aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities
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
parent2f7fa781ddaafede2b75fda8f9680e28914708f2 (diff)
Core/PacketIO: Remove duplicated areatrigger spline packet writer
Diffstat (limited to 'src/server/game/Entities')
-rw-r--r--src/server/game/Entities/AreaTrigger/AreaTrigger.cpp29
-rw-r--r--src/server/game/Entities/AreaTrigger/AreaTrigger.h10
-rw-r--r--src/server/game/Entities/Object/Object.cpp19
3 files changed, 16 insertions, 42 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;
diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp
index fa03ea214e4..26e3c8585f3 100644
--- a/src/server/game/Entities/Object/Object.cpp
+++ b/src/server/game/Entities/Object/Object.cpp
@@ -506,7 +506,7 @@ void Object::BuildMovementUpdate(ByteBuffer* data, CreateObjectBits flags, Playe
if (flags.AreaTrigger)
{
- AreaTrigger const* areaTrigger = ToAreaTrigger();
+ AreaTrigger const* areaTrigger = static_cast<AreaTrigger const*>(this);
AreaTriggerCreateProperties const* createProperties = areaTrigger->GetCreateProperties();
AreaTriggerShapeInfo const& shape = areaTrigger->GetShape();
@@ -586,8 +586,6 @@ void Object::BuildMovementUpdate(ByteBuffer* data, CreateObjectBits flags, Playe
bool hasMorphCurveID = createProperties && createProperties->MorphCurveId != 0;
bool hasFacingCurveID = createProperties && createProperties->FacingCurveId != 0;
bool hasMoveCurveID = createProperties && createProperties->MoveCurveId != 0;
- bool hasAreaTriggerSpline = areaTrigger->HasSplines();
- bool hasOrbit = areaTrigger->HasOrbit();
bool hasMovementScript = false;
bool hasPositionalSoundKitID= false;
@@ -604,19 +602,14 @@ void Object::BuildMovementUpdate(ByteBuffer* data, CreateObjectBits flags, Playe
data->WriteBit(hasFacingCurveID);
data->WriteBit(hasMoveCurveID);
data->WriteBit(hasPositionalSoundKitID);
- data->WriteBit(hasAreaTriggerSpline);
- data->WriteBit(hasOrbit);
+ data->WriteBit(areaTrigger->HasSplines());
+ data->WriteBit(areaTrigger->HasOrbit());
data->WriteBit(hasMovementScript);
data->FlushBits();
- if (hasAreaTriggerSpline)
- {
- *data << uint32(areaTrigger->GetTimeToTarget());
- *data << uint32(areaTrigger->GetElapsedTimeForMovement());
-
- WorldPackets::Movement::CommonMovement::WriteCreateObjectAreaTriggerSpline(areaTrigger->GetSpline(), *data);
- }
+ if (areaTrigger->HasSplines())
+ WorldPackets::AreaTrigger::WriteAreaTriggerSpline(*data, areaTrigger->GetTimeToTarget(), areaTrigger->GetElapsedTimeForMovement(), areaTrigger->GetSpline());
if (hasTargetRollPitchYaw)
*data << areaTrigger->GetTargetRollPitchYaw().PositionXYZStream();
@@ -639,7 +632,7 @@ void Object::BuildMovementUpdate(ByteBuffer* data, CreateObjectBits flags, Playe
//if (hasMovementScript)
// *data << *areaTrigger->GetMovementScript(); // AreaTriggerMovementScriptInfo
- if (hasOrbit)
+ if (areaTrigger->HasOrbit())
{
using WorldPackets::AreaTrigger::operator<<;
*data << areaTrigger->GetOrbit();