diff options
author | Shauren <shauren.trinity@gmail.com> | 2025-05-29 12:53:58 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2025-05-29 12:53:58 +0200 |
commit | 5e8adaabcc1bef7563036d3765a0c13894e860f7 (patch) | |
tree | c3196fb58281f9268248f9e9091846da191af34f /src | |
parent | a37133e18f81d990a9bdd0c515efaaa4c4a72043 (diff) |
Core/AreaTriggers: Fixed areatrigger spline duration calculation
Diffstat (limited to 'src')
4 files changed, 11 insertions, 11 deletions
diff --git a/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp b/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp index a0b0ccb22d9..90874333897 100644 --- a/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp +++ b/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp @@ -347,7 +347,7 @@ void AreaTrigger::Update(uint32 diff) { float orientation = sDB2Manager.GetCurveValueAt(createProperties->FacingCurveId, GetProgress()); if (!GetCreateProperties() || !GetCreateProperties()->Flags.HasFlag(AreaTriggerCreatePropertiesFlag::HasAbsoluteOrientation)) - orientation += GetStationaryO(); + orientation += _stationaryPosition.GetOrientation(); SetOrientation(orientation); } @@ -1094,8 +1094,8 @@ void AreaTrigger::InitSplines(std::vector<G3D::Vector3> const& splinePoints, Opt _movementTime = 0; - std::unique_ptr<Movement::Spline<int32>> spline = std::make_unique<::Movement::Spline<int32>>(); - spline->init_spline(splinePoints.data(), splinePoints.size(), ::Movement::SplineBase::ModeLinear, GetStationaryO()); + std::unique_ptr<Movement::Spline<float>> spline = std::make_unique<::Movement::Spline<float>>(); + spline->init_spline(splinePoints.data(), splinePoints.size(), ::Movement::SplineBase::ModeLinear, _stationaryPosition.GetOrientation()); spline->initLengths(); float speed = overrideSpeed.value_or(GetCreateProperties()->Speed); @@ -1131,7 +1131,7 @@ void AreaTrigger::InitSplines(std::vector<G3D::Vector3> const& splinePoints, Opt bool AreaTrigger::HasSplines() const { - return std::holds_alternative<std::unique_ptr<::Movement::Spline<int32>>>(_movement); + return std::holds_alternative<std::unique_ptr<::Movement::Spline<float>>>(_movement); } void AreaTrigger::InitOrbit(AreaTriggerOrbitInfo const& orbit, Optional<float> overrideSpeed) @@ -1259,7 +1259,7 @@ void AreaTrigger::UpdateSplinePosition(uint32 diff) _movementTime += diff; - Movement::Spline<int32>& spline = *std::get<std::unique_ptr<::Movement::Spline<int32>>>(_movement); + Movement::Spline<float>& spline = **std::get_if<std::unique_ptr<::Movement::Spline<float>>>(&_movement); if (_movementTime >= GetTimeToTarget()) { @@ -1302,7 +1302,7 @@ void AreaTrigger::UpdateSplinePosition(uint32 diff) G3D::Vector3 currentPosition; spline.evaluate_percent(lastPositionIndex, percentFromLastPoint, currentPosition); - float orientation = GetStationaryO(); + float orientation = _stationaryPosition.GetOrientation(); if (createProperties && createProperties->FacingCurveId) orientation += sDB2Manager.GetCurveValueAt(createProperties->FacingCurveId, GetProgress()); @@ -1341,7 +1341,7 @@ void AreaTrigger::UpdateOverridePosition() { orientation = sDB2Manager.GetCurveValueAt(createProperties->FacingCurveId, GetProgress()); if (!GetCreateProperties() || !GetCreateProperties()->Flags.HasFlag(AreaTriggerCreatePropertiesFlag::HasAbsoluteOrientation)) - orientation += GetStationaryO(); + orientation += _stationaryPosition.GetOrientation(); } } diff --git a/src/server/game/Entities/AreaTrigger/AreaTrigger.h b/src/server/game/Entities/AreaTrigger/AreaTrigger.h index 56ebef02f5d..fc42273f5d2 100644 --- a/src/server/game/Entities/AreaTrigger/AreaTrigger.h +++ b/src/server/game/Entities/AreaTrigger/AreaTrigger.h @@ -155,7 +155,7 @@ class TC_GAME_API AreaTrigger final : public WorldObject, public GridObject<Area void InitSplineOffsets(std::vector<Position> const& offsets, Optional<float> overrideSpeed = {}); void InitSplines(std::vector<G3D::Vector3> const& splinePoints, Optional<float> overrideSpeed = {}); bool HasSplines() const; - ::Movement::Spline<int32> const& GetSpline() const { return *std::get<std::unique_ptr<::Movement::Spline<int32>>>(_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 = {}); @@ -223,7 +223,7 @@ class TC_GAME_API AreaTrigger final : public WorldObject, public GridObject<Area Position _rollPitchYaw; Position _targetRollPitchYaw; std::vector<Position> _polygonVertices; - std::variant<std::monostate, std::unique_ptr<::Movement::Spline<int32>>, std::unique_ptr<AreaTriggerOrbitInfo>> _movement; + std::variant<std::monostate, std::unique_ptr<::Movement::Spline<float>>, std::unique_ptr<AreaTriggerOrbitInfo>> _movement; bool _reachedDestination; int32 _lastSplineIndex; diff --git a/src/server/game/Server/Packets/MovementPackets.cpp b/src/server/game/Server/Packets/MovementPackets.cpp index 0075307b107..ac5413d59f2 100644 --- a/src/server/game/Server/Packets/MovementPackets.cpp +++ b/src/server/game/Server/Packets/MovementPackets.cpp @@ -513,7 +513,7 @@ void CommonMovement::WriteCreateObjectSplineDataBlock(::Movement::MoveSpline con } } -void CommonMovement::WriteCreateObjectAreaTriggerSpline(::Movement::Spline<int32> const& spline, ByteBuffer& data) +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); diff --git a/src/server/game/Server/Packets/MovementPackets.h b/src/server/game/Server/Packets/MovementPackets.h index 71a51a5b9b4..020305d0b49 100644 --- a/src/server/game/Server/Packets/MovementPackets.h +++ b/src/server/game/Server/Packets/MovementPackets.h @@ -148,7 +148,7 @@ namespace WorldPackets { public: static void WriteCreateObjectSplineDataBlock(::Movement::MoveSpline const& moveSpline, ByteBuffer& data); - static void WriteCreateObjectAreaTriggerSpline(::Movement::Spline<int32> const& spline, ByteBuffer& data); + static void WriteCreateObjectAreaTriggerSpline(::Movement::Spline<float> const& spline, ByteBuffer& data); static void WriteMovementForceWithDirection(MovementForce const& movementForce, ByteBuffer& data, Position const* objectPosition = nullptr); }; |