18#ifndef TRINITYCORE_AREATRIGGER_H
19#define TRINITYCORE_AREATRIGGER_H
38 template<
typename length_type>
65 void operator()(
Player const* player)
const;
76 bool IsServerSide()
const {
return _areaTriggerTemplate->Id.IsServerSide; }
99 void SetDuration(
int32 newDuration);
100 void Delay(
int32 delaytime) { SetDuration(GetDuration() - delaytime); }
106 uint32 GetScriptId()
const;
110 Unit* GetCaster()
const;
111 Unit* GetTarget()
const;
119 void InitSplineOffsets(std::vector<Position>
const& offsets,
uint32 timeToTarget);
120 void InitSplines(std::vector<G3D::Vector3> splinePoints,
uint32 timeToTarget);
121 bool HasSplines()
const;
126 bool HasOrbit()
const;
134 void _UpdateDuration(
int32 newDuration);
135 float GetProgress()
const;
137 float GetScaleCurveValue(
UF::ScaleCurve const& scaleCurve,
float x)
const;
140 void UpdateTargetList();
141 void SearchUnits(std::vector<Unit*>& targetList,
float radius,
bool check3D);
142 void SearchUnitInSphere(std::vector<Unit*>& targetList);
143 void SearchUnitInBox(std::vector<Unit*>& targetList);
144 void SearchUnitInPolygon(std::vector<Unit*>& targetList);
145 void SearchUnitInCylinder(std::vector<Unit*>& targetList);
146 void SearchUnitInDisk(std::vector<Unit*>& targetList);
147 void SearchUnitInBoundedPlane(std::vector<Unit*>& targetList);
148 bool CheckIsInPolygon2D(
Position const* pos)
const;
149 void HandleUnitEnterExit(std::vector<Unit*>
const& targetList);
151 void DoActions(
Unit* unit);
152 void UndoActions(
Unit* unit);
154 void UpdatePolygonOrientation();
155 void UpdateOrbitPosition(
uint32 diff);
156 void UpdateSplinePosition(
uint32 diff);
158 Position const* GetOrbitCenterPosition()
const;
159 Position CalculateOrbitPosition()
const;
161 void DebugVisualizePosition();
180 std::unique_ptr<::Movement::Spline<int32>>
_spline;
192 std::unique_ptr<AreaTriggerAI>
_ai;
std::unordered_set< ObjectGuid > GuidUnorderedSet
std::optional< T > Optional
Optional helper class to wrap optional values within.
GuidUnorderedSet const & GetInsideUnits() const
AreaTriggerCreateProperties const * _areaTriggerCreateProperties
std::vector< Position > _polygonVertices
ObjectGuid::LowType _spawnId
ObjectGuid GetOwnerGUID() const override
uint32 GetTimeSinceCreated() const
AreaTriggerShapeInfo const & GetShape() const
ObjectGuid const & GetCasterGuid() const
int32 GetTotalDuration() const
float GetMaxSearchRadius() const
UF::UpdateField< UF::AreaTriggerData, 0, TYPEID_AREATRIGGER > m_areaTriggerData
std::unique_ptr< AreaTriggerAI > _ai
bool IsServerSide() const
uint32 GetSpellId() const
float _previousCheckOrientation
Optional< AreaTriggerOrbitInfo > const & GetCircularMovementInfo() const
uint32 GetTimeToTarget() const
GuidUnorderedSet _insideUnits
uint32 GetTimeToTargetScale() const
std::unique_ptr<::Movement::Spline< int32 > > _spline
uint32 GetElapsedTimeForMovement() const
AreaTriggerTemplate const * _areaTriggerTemplate
Position _targetRollPitchYaw
Optional< AreaTriggerOrbitInfo > _orbitInfo
AuraEffect const * _aurEff
AuraEffect const * GetAuraEffect() const
::Movement::Spline< int32 > const & GetSpline() const
Position const & GetTargetRollPitchYaw() const
Position const & GetRollPitchYaw() const
int32 GetDuration() const
AreaTriggerCreateProperties const * GetCreateProperties() const
void Delay(int32 delaytime)
AreaTriggerShapeInfo _shape
virtual void BuildValuesCreate(ByteBuffer *data, Player const *target) const =0
virtual void ClearUpdateMask(bool remove)
virtual void BuildValuesUpdate(ByteBuffer *data, Player const *target) const =0
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)
UF::ObjectData::Base ObjectMask
UF::AreaTriggerData::Base AreaTriggerMask
ValuesUpdateForPlayerWithMaskSender(AreaTrigger const *owner)
AreaTrigger const * Owner