18#ifndef TRINITYCORE_AREATRIGGER_H
19#define TRINITYCORE_AREATRIGGER_H
38 template<
typename length_type>
98 void operator()(
Player const* player)
const;
104 void AI_Initialize();
109 bool IsCustom()
const {
return _areaTriggerTemplate->Id.IsCustom; }
121 bool Create(
AreaTriggerCreatePropertiesId areaTriggerCreatePropertiesId,
Map* map,
Position const& pos,
int32 duration,
AreaTriggerSpawn const* spawnData =
nullptr,
Unit* caster =
nullptr,
Unit* target =
nullptr,
SpellCastVisual spellVisual = { 0, 0 },
SpellInfo const* spellInfo =
nullptr,
Spell* spell =
nullptr,
AuraEffect const* aurEff =
nullptr);
133 uint32 GetTimeSinceCreated()
const;
141 float CalcCurrentScale()
const;
142 void SetOverrideScaleCurve(
float overrideScale);
144 void ClearOverrideScaleCurve();
146 void SetExtraScaleCurve(
float extraScale);
148 void ClearExtraScaleCurve();
150 void SetOverrideMoveCurve(
float x,
float y,
float z);
151 void SetOverrideMoveCurve(std::array<DBCPosition2D, 2>
const& xCurvePoints, std::array<DBCPosition2D, 2>
const& yCurvePoints, std::array<DBCPosition2D, 2>
const& zCurvePoints,
153 void ClearOverrideMoveCurve();
171 void SetDuration(
int32 newDuration);
172 void Delay(
int32 delaytime) { SetDuration(GetDuration() - delaytime); }
178 uint32 GetScriptId()
const;
183 Unit* GetCaster()
const;
184 Unit* GetTarget()
const;
189 float GetMaxSearchRadius()
const;
191 void InitSplines(std::vector<G3D::Vector3>
const& splinePoints,
Optional<float> overrideSpeed = {},
Optional<bool> speedIsTimeInSeconds = {});
194 uint32 GetElapsedTimeForMovement()
const;
202 bool HasOverridePosition()
const;
206 void HandleUnitExit(
Unit* unit);
211 void _UpdateDuration(
int32 newDuration);
213 float GetProgress()
const;
220 using Points = std::array<DBCPosition2D, 2>;
225 float GetScaleCurveValueAtProgress(
UF::ScaleCurve const& scaleCurve,
float x)
const;
232 void UpdateTargetList();
233 void SearchUnits(std::vector<Unit*>& targetList,
float radius,
bool check3D);
241 void HandleUnitEnter(
Unit* unit);
244 void DoActions(
Unit* unit);
245 void UndoActions(
Unit* unit);
247 void UpdatePolygonVertices();
248 void UpdateOrbitPosition();
250 void UpdateOverridePosition();
252 Position const* GetOrbitCenterPosition()
const;
253 Position CalculateOrbitPosition()
const;
255 void UpdateHasPlayersFlag();
257 void DebugVisualizePosition();
272 std::unique_ptr<::Movement::Spline<float>>
_spline;
281 std::unique_ptr<AreaTriggerAI>
_ai;
#define DEFINE_ENUM_FLAG(enumType)
std::unordered_set< ObjectGuid > GuidUnorderedSet
std::optional< T > Optional
Optional helper class to wrap optional values within.
AreaTriggerTemplate const * GetTemplate() const
::Movement::Spline< float > const & GetSpline() const
GuidUnorderedSet const & GetInsideUnits() const
AreaTriggerCreateProperties const * _areaTriggerCreateProperties
uint32 GetTimeToTargetExtraScale() const
bool HasAreaTriggerFlag(AreaTriggerFieldFlags flag) const
std::vector< Position > _polygonVertices
ObjectGuid::LowType _spawnId
bool HasActionSetFlag(AreaTriggerActionSetFlag flag) const
UF::AreaTriggerOrbit const & GetOrbit() const
EnumFlag< AreaTriggerFieldFlags > GetAreaTriggerFlags() const
ObjectGuid GetOwnerGUID() const override
void SetTimeToTargetPos(uint32 timeToTargetPos)
ObjectGuid const & GetCasterGuid() const
void RelocateStationaryPosition(Position const &pos)
int32 GetTotalDuration() const
Position _stationaryPosition
Position const & GetStationaryPosition() const override
std::unique_ptr< AreaTriggerAI > _ai
uint32 GetTimeToTargetPos() const
bool IsServerSide() const
uint32 GetSpellId() const
void SetTimeToTarget(uint32 timeToTarget)
UF::UpdateField< UF::AreaTriggerData, int32(WowCS::EntityFragment::CGObject), TYPEID_AREATRIGGER > m_areaTriggerData
void SetAreaTriggerFlag(AreaTriggerFieldFlags flag)
uint32 GetTimeToTarget() const
GuidUnorderedSet _insideUnits
uint32 GetTimeToTargetScale() const
bool IsStaticSpawn() const
AreaTriggerTemplate const * _areaTriggerTemplate
void SetTimeToTargetScale(uint32 timeToTargetScale)
void RemoveAreaTriggerFlag(AreaTriggerFieldFlags flag)
AuraEffect const * _aurEff
AuraEffect const * GetAuraEffect() const
ObjectGuid GetCreatorGUID() const override
void ReplaceAllAreaTriggerFlags(AreaTriggerFieldFlags flag)
void SetTimeToTargetExtraScale(uint32 timeToTargetExtraScale)
int32 GetDuration() const
AreaTriggerCreateProperties const * GetCreateProperties() const
void Delay(int32 delaytime)
std::unique_ptr<::Movement::Spline< float > > _spline
void SetPathTarget(ObjectGuid pathTarget)
float _verticesUpdatePreviousOrientation
void SetUpdateFieldValue(UF::UpdateFieldPrivateSetter< T > setter, typename UF::UpdateFieldPrivateSetter< T >::value_type value)
void SetUpdateFieldFlagValue(UF::UpdateFieldPrivateSetter< T > setter, typename UF::UpdateFieldPrivateSetter< T >::value_type flag)
void RemoveUpdateFieldFlagValue(UF::UpdateFieldPrivateSetter< T > setter, typename UF::UpdateFieldPrivateSetter< T >::value_type flag)
virtual void BuildValuesCreate(UF::UpdateFieldFlag flags, ByteBuffer &data, Player const *target) const =0
virtual void BuildValuesUpdate(UF::UpdateFieldFlag flags, ByteBuffer &data, Player const *target) const =0
virtual void ClearValuesChangesMask()
void AddToWorld() override
void RemoveFromWorld() override
virtual uint32 GetFaction() const =0
virtual bool IsNeverVisibleFor(WorldObject const *seer, bool allowServersideObjects=false) const
virtual void Update(uint32 diff)
std::conditional_t< std::is_base_of_v< HasChangesMaskTag, T >, MutableFieldReferenceWithChangesMask< T, PublicSet >, MutableFieldReferenceNoChangesMask< T, PublicSet > > MutableFieldReference
std::variant< float, Points > Curve
std::array< DBCPosition2D, 2 > Points
UF::ObjectData::Base ObjectMask
bool IgnoreNestedChangesMask
UF::AreaTriggerData::Base AreaTriggerMask
ValuesUpdateForPlayerWithMaskSender(AreaTrigger const *owner)
AreaTrigger const * Owner
UpdateField< ObjectGuid, 0, 20 > OrbitPathTarget
UpdateField< uint32, 0, 27 > Flags
UpdateField< uint32, 0, 12 > TimeToTargetPos
UpdateField< uint32, 0, 11 > TimeToTargetExtraScale
UpdateField< uint32, 0, 10 > TimeToTargetScale
UpdateField< uint32, 0, 9 > TimeToTarget