mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-15 23:20:36 +01:00
Core/PacketIO: Remove duplicated areatrigger spline packet writer
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -17,20 +17,22 @@
|
||||
|
||||
#include "AreaTriggerPackets.h"
|
||||
#include "PacketOperators.h"
|
||||
#include "Spline.h"
|
||||
|
||||
namespace WorldPackets::AreaTrigger
|
||||
{
|
||||
void WriteAreaTriggerSpline(ByteBuffer& data, uint32 timeToTarget, uint32 elapsedTimeForMovement, ::Movement::Spline<float> const& areaTriggerSpline)
|
||||
{
|
||||
data << uint32(timeToTarget);
|
||||
data << uint32(elapsedTimeForMovement);
|
||||
|
||||
data << BitsSize<16>(areaTriggerSpline.getPoints());
|
||||
data.append(reinterpret_cast<float const*>(areaTriggerSpline.getPoints().data()), areaTriggerSpline.getPoints().size() * 3);
|
||||
}
|
||||
|
||||
ByteBuffer& operator<<(ByteBuffer& data, AreaTriggerSplineInfo const& areaTriggerSpline)
|
||||
{
|
||||
data << uint32(areaTriggerSpline.TimeToTarget);
|
||||
data << uint32(areaTriggerSpline.ElapsedTimeForMovement);
|
||||
|
||||
data << BitsSize<16>(areaTriggerSpline.Points);
|
||||
data.FlushBits();
|
||||
|
||||
for (TaggedPosition<Position::XYZ> const& point : areaTriggerSpline.Points)
|
||||
data << point;
|
||||
|
||||
WriteAreaTriggerSpline(data, areaTriggerSpline.TimeToTarget, areaTriggerSpline.ElapsedTimeForMovement, *areaTriggerSpline.Points);
|
||||
return data;
|
||||
}
|
||||
|
||||
|
||||
@@ -23,6 +23,12 @@
|
||||
#include "ObjectGuid.h"
|
||||
#include "Optional.h"
|
||||
|
||||
namespace Movement
|
||||
{
|
||||
template<class index_type>
|
||||
class Spline;
|
||||
}
|
||||
|
||||
namespace WorldPackets
|
||||
{
|
||||
namespace AreaTrigger
|
||||
@@ -31,7 +37,7 @@ namespace WorldPackets
|
||||
{
|
||||
uint32 TimeToTarget = 0;
|
||||
uint32 ElapsedTimeForMovement = 0;
|
||||
std::vector<TaggedPosition<Position::XYZ>> Points;
|
||||
::Movement::Spline<float>* Points = nullptr;
|
||||
};
|
||||
|
||||
struct AreaTriggerMovementScriptInfo
|
||||
@@ -96,6 +102,7 @@ namespace WorldPackets
|
||||
uint32 SpellVisualID = 0;
|
||||
};
|
||||
|
||||
void WriteAreaTriggerSpline(ByteBuffer& data, uint32 timeToTarget, uint32 elapsedTimeForMovement, ::Movement::Spline<float> const& areaTriggerSpline);
|
||||
ByteBuffer& operator<<(ByteBuffer& data, AreaTriggerOrbitInfo const& areaTriggerCircularMovement);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -513,12 +513,6 @@ void CommonMovement::WriteCreateObjectSplineDataBlock(::Movement::MoveSpline con
|
||||
}
|
||||
}
|
||||
|
||||
void CommonMovement::WriteCreateObjectAreaTriggerSpline(::Movement::Spline<float> const& spline, ByteBuffer& data)
|
||||
{
|
||||
data << BitsSize<16>(spline.getPoints());
|
||||
data.append(reinterpret_cast<float const*>(spline.getPoints().data()), spline.getPoints().size() * 3);
|
||||
}
|
||||
|
||||
void CommonMovement::WriteMovementForceWithDirection(MovementForce const& movementForce, ByteBuffer& data, Position const* objectPosition /*= nullptr*/)
|
||||
{
|
||||
data << movementForce.ID;
|
||||
|
||||
@@ -25,8 +25,6 @@
|
||||
|
||||
namespace Movement
|
||||
{
|
||||
template<class index_type>
|
||||
class Spline;
|
||||
class MoveSpline;
|
||||
}
|
||||
|
||||
@@ -148,7 +146,6 @@ namespace WorldPackets
|
||||
{
|
||||
public:
|
||||
static void WriteCreateObjectSplineDataBlock(::Movement::MoveSpline const& moveSpline, ByteBuffer& data);
|
||||
static void WriteCreateObjectAreaTriggerSpline(::Movement::Spline<float> const& spline, ByteBuffer& data);
|
||||
|
||||
static void WriteMovementForceWithDirection(MovementForce const& movementForce, ByteBuffer& data, Position const* objectPosition = nullptr);
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user