aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities/AreaTrigger
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2025-06-04 20:59:46 +0200
committerShauren <shauren.trinity@gmail.com>2025-06-04 20:59:46 +0200
commitdc10ac722f5e059852785372f9ff91e205d730ce (patch)
treebc4304eeddf5fa6a13c02231b2b5d7f4f7cfd2ea /src/server/game/Entities/AreaTrigger
parent2f7fa781ddaafede2b75fda8f9680e28914708f2 (diff)
Core/PacketIO: Remove duplicated areatrigger spline packet writer
Diffstat (limited to 'src/server/game/Entities/AreaTrigger')
-rw-r--r--src/server/game/Entities/AreaTrigger/AreaTrigger.cpp29
-rw-r--r--src/server/game/Entities/AreaTrigger/AreaTrigger.h10
2 files changed, 10 insertions, 29 deletions
diff --git a/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp b/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp
index 90874333897..e1f85a2b285 100644
--- a/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp
+++ b/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp
@@ -318,7 +318,7 @@ void AreaTrigger::Update(uint32 diff)
}
else if (HasOrbit())
{
- UpdateOrbitPosition(diff);
+ UpdateOrbitPosition(*std::get<std::unique_ptr<AreaTriggerOrbitInfo>>(_movement), diff);
}
else if (GetCreateProperties() && GetCreateProperties()->Flags.HasFlag(AreaTriggerCreatePropertiesFlag::HasAttached))
{
@@ -337,7 +337,7 @@ void AreaTrigger::Update(uint32 diff)
}
else if (HasSplines())
{
- UpdateSplinePosition(diff);
+ UpdateSplinePosition(*std::get<std::unique_ptr<::Movement::Spline<float>>>(_movement), diff);
}
else
{
@@ -882,11 +882,6 @@ void AreaTrigger::HandleUnitEnterExit(std::vector<Unit*> const& newTargetList)
std::ranges::count_if(_insideUnits, [](ObjectGuid const& guid) { return guid.IsPlayer(); }));
}
-AreaTriggerTemplate const* AreaTrigger::GetTemplate() const
-{
- return _areaTriggerTemplate;
-}
-
uint32 AreaTrigger::GetScriptId() const
{
if (_spawnId)
@@ -1119,8 +1114,7 @@ void AreaTrigger::InitSplines(std::vector<G3D::Vector3> const& splinePoints, Opt
reshape.AreaTriggerSpline.emplace();
reshape.AreaTriggerSpline->ElapsedTimeForMovement = GetElapsedTimeForMovement();
reshape.AreaTriggerSpline->TimeToTarget = timeToTarget;
- for (G3D::Vector3 const& vec : spline->getPoints())
- reshape.AreaTriggerSpline->Points.emplace_back(vec.x, vec.y, vec.z);
+ reshape.AreaTriggerSpline->Points = spline.get();
SendMessageToSet(reshape.Write(), true);
}
@@ -1129,11 +1123,6 @@ void AreaTrigger::InitSplines(std::vector<G3D::Vector3> const& splinePoints, Opt
_movement = std::move(spline);
}
-bool AreaTrigger::HasSplines() const
-{
- return std::holds_alternative<std::unique_ptr<::Movement::Spline<float>>>(_movement);
-}
-
void AreaTrigger::InitOrbit(AreaTriggerOrbitInfo const& orbit, Optional<float> overrideSpeed)
{
// Circular movement requires either a center position or an attached unit
@@ -1165,11 +1154,6 @@ void AreaTrigger::InitOrbit(AreaTriggerOrbitInfo const& orbit, Optional<float> o
_movement = std::move(movementOrbit);
}
-bool AreaTrigger::HasOrbit() const
-{
- return std::holds_alternative<std::unique_ptr<AreaTriggerOrbitInfo>>(_movement);
-}
-
Position const* AreaTrigger::GetOrbitCenterPosition() const
{
if (!HasOrbit())
@@ -1236,9 +1220,8 @@ Position AreaTrigger::CalculateOrbitPosition() const
return { x, y, z, orientation };
}
-void AreaTrigger::UpdateOrbitPosition(uint32 /*diff*/)
+void AreaTrigger::UpdateOrbitPosition(AreaTriggerOrbitInfo& orbit, uint32 /*diff*/)
{
- AreaTriggerOrbitInfo& orbit = *std::get<std::unique_ptr<AreaTriggerOrbitInfo>>(_movement);
if (orbit.StartDelay > GetElapsedTimeForMovement())
return;
@@ -1252,15 +1235,13 @@ void AreaTrigger::UpdateOrbitPosition(uint32 /*diff*/)
#endif
}
-void AreaTrigger::UpdateSplinePosition(uint32 diff)
+void AreaTrigger::UpdateSplinePosition(Movement::Spline<float>& spline, uint32 diff)
{
if (_reachedDestination)
return;
_movementTime += diff;
- Movement::Spline<float>& spline = **std::get_if<std::unique_ptr<::Movement::Spline<float>>>(&_movement);
-
if (_movementTime >= GetTimeToTarget())
{
_reachedDestination = true;
diff --git a/src/server/game/Entities/AreaTrigger/AreaTrigger.h b/src/server/game/Entities/AreaTrigger/AreaTrigger.h
index fc42273f5d2..9e3c0d776ba 100644
--- a/src/server/game/Entities/AreaTrigger/AreaTrigger.h
+++ b/src/server/game/Entities/AreaTrigger/AreaTrigger.h
@@ -137,7 +137,7 @@ class TC_GAME_API AreaTrigger final : public WorldObject, public GridObject<Area
GuidUnorderedSet const& GetInsideUnits() const { return _insideUnits; }
AreaTriggerCreateProperties const* GetCreateProperties() const { return _areaTriggerCreateProperties; }
- AreaTriggerTemplate const* GetTemplate() const;
+ AreaTriggerTemplate const* GetTemplate() const { return _areaTriggerTemplate; }
uint32 GetScriptId() const;
ObjectGuid GetCreatorGUID() const override { return GetCasterGuid(); }
@@ -154,12 +154,12 @@ class TC_GAME_API AreaTrigger final : public WorldObject, public GridObject<Area
Position const& GetTargetRollPitchYaw() const { return _targetRollPitchYaw; }
void InitSplineOffsets(std::vector<Position> const& offsets, Optional<float> overrideSpeed = {});
void InitSplines(std::vector<G3D::Vector3> const& splinePoints, Optional<float> overrideSpeed = {});
- bool HasSplines() const;
+ bool HasSplines() const { return std::holds_alternative<std::unique_ptr<::Movement::Spline<float>>>(_movement); }
::Movement::Spline<float> const& GetSpline() const { return *std::get<std::unique_ptr<::Movement::Spline<float>>>(_movement); }
uint32 GetElapsedTimeForMovement() const { return GetTimeSinceCreated(); } /// @todo: research the right value, in sniffs both timers are nearly identical
void InitOrbit(AreaTriggerOrbitInfo const& orbit, Optional<float> overrideSpeed = {});
- bool HasOrbit() const;
+ bool HasOrbit() const { return std::holds_alternative<std::unique_ptr<AreaTriggerOrbitInfo>>(_movement); }
AreaTriggerOrbitInfo const& GetOrbit() const { return *std::get<std::unique_ptr<AreaTriggerOrbitInfo>>(_movement); }
bool HasOverridePosition() const;
@@ -197,8 +197,8 @@ class TC_GAME_API AreaTrigger final : public WorldObject, public GridObject<Area
void UndoActions(Unit* unit);
void UpdatePolygonVertices();
- void UpdateOrbitPosition(uint32 diff);
- void UpdateSplinePosition(uint32 diff);
+ void UpdateOrbitPosition(AreaTriggerOrbitInfo& orbit, uint32 diff);
+ void UpdateSplinePosition(Movement::Spline<float>& spline, uint32 diff);
void UpdateOverridePosition();
Position const* GetOrbitCenterPosition() const;