diff options
| author | Shauren <shauren.trinity@gmail.com> | 2025-10-14 13:11:41 +0200 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2025-10-14 13:11:41 +0200 |
| commit | a8f01e07d111ea14cbe843d82fbfce19f63faa12 (patch) | |
| tree | 2aca52b9b4dfa9723ec170e672e2a4ddb7481178 /src/server/game/Entities/Vehicle | |
| parent | d48e97731538b01c4005cd7c73653a0f33015098 (diff) | |
Core/Entities: Merge duplicate functions calculating relative positions - remove CalculatePassengerPosition/CalculatePassengerOffset from TransportBase class
Diffstat (limited to 'src/server/game/Entities/Vehicle')
| -rw-r--r-- | src/server/game/Entities/Vehicle/Vehicle.cpp | 8 | ||||
| -rw-r--r-- | src/server/game/Entities/Vehicle/Vehicle.h | 16 | ||||
| -rw-r--r-- | src/server/game/Entities/Vehicle/VehicleDefines.h | 35 |
3 files changed, 12 insertions, 47 deletions
diff --git a/src/server/game/Entities/Vehicle/Vehicle.cpp b/src/server/game/Entities/Vehicle/Vehicle.cpp index d7537f878d1..232c5748d51 100644 --- a/src/server/game/Entities/Vehicle/Vehicle.cpp +++ b/src/server/game/Entities/Vehicle/Vehicle.cpp @@ -572,16 +572,12 @@ void Vehicle::RelocatePassengers() { ASSERT(passenger->IsInWorld()); - float px, py, pz, po; - passenger->m_movementInfo.transport.pos.GetPosition(px, py, pz, po); - CalculatePassengerPosition(px, py, pz, &po); - - seatRelocation.emplace_back(passenger, Position(px, py, pz, po)); + seatRelocation.emplace_back(passenger, _me->GetPositionWithOffset(passenger->m_movementInfo.transport.pos)); } } for (auto const& [passenger, position] : seatRelocation) - UpdatePassengerPosition(_me->GetMap(), passenger, position.GetPositionX(), position.GetPositionY(), position.GetPositionZ(), position.GetOrientation(), false); + UpdatePassengerPosition(_me->GetMap(), passenger, position, false); } /** diff --git a/src/server/game/Entities/Vehicle/Vehicle.h b/src/server/game/Entities/Vehicle/Vehicle.h index 5b68a429fe3..fb740a7d962 100644 --- a/src/server/game/Entities/Vehicle/Vehicle.h +++ b/src/server/game/Entities/Vehicle/Vehicle.h @@ -95,23 +95,13 @@ class TC_GAME_API Vehicle final : public TransportBase float GetTransportOrientation() const override { return GetBase()->GetOrientation(); } - void AddPassenger(WorldObject* /*passenger*/) override { ABORT_MSG("Vehicle cannot directly gain passengers without auras"); } + void AddPassenger(WorldObject* /*passenger*/, Position const& /*offset*/) override { ABORT_MSG("Vehicle cannot directly gain passengers without auras"); } /// This method transforms supplied transport offsets into global coordinates - void CalculatePassengerPosition(float& x, float& y, float& z, float* o /*= nullptr*/) const override - { - TransportBase::CalculatePassengerPosition(x, y, z, o, - GetBase()->GetPositionX(), GetBase()->GetPositionY(), - GetBase()->GetPositionZ(), GetBase()->GetOrientation()); - } + Position GetPositionWithOffset(Position const& offset) const override { return GetBase()->GetPositionWithOffset(offset); } /// This method transforms supplied global coordinates into local offsets - void CalculatePassengerOffset(float& x, float& y, float& z, float* o /*= nullptr*/) const override - { - TransportBase::CalculatePassengerOffset(x, y, z, o, - GetBase()->GetPositionX(), GetBase()->GetPositionY(), - GetBase()->GetPositionZ(), GetBase()->GetOrientation()); - } + Position GetPositionOffsetTo(Position const& endPos) const override { return GetBase()->GetPositionOffsetTo(endPos); } int32 GetMapIdForSpawning() const override { return GetBase()->GetMapId(); } diff --git a/src/server/game/Entities/Vehicle/VehicleDefines.h b/src/server/game/Entities/Vehicle/VehicleDefines.h index fd012bdc53e..7349434f5ce 100644 --- a/src/server/game/Entities/Vehicle/VehicleDefines.h +++ b/src/server/game/Entities/Vehicle/VehicleDefines.h @@ -21,6 +21,9 @@ #include "Define.h" #include "Duration.h" #include "EnumFlag.h" +#include "ObjectGuid.h" +#include "Optional.h" +#include "Position.h" #include <map> #include <vector> @@ -172,42 +175,18 @@ public: virtual ObjectGuid GetTransportGUID() const = 0; /// This method transforms supplied transport offsets into global coordinates - virtual void CalculatePassengerPosition(float& x, float& y, float& z, float* o = nullptr) const = 0; + virtual Position GetPositionWithOffset(Position const& offset) const = 0; /// This method transforms supplied global coordinates into local offsets - virtual void CalculatePassengerOffset(float& x, float& y, float& z, float* o = nullptr) const = 0; + virtual Position GetPositionOffsetTo(Position const& endPos) const = 0; virtual float GetTransportOrientation() const = 0; - virtual void AddPassenger(WorldObject* passenger) = 0; + virtual void AddPassenger(WorldObject* passenger, Position const& offset) = 0; virtual TransportBase* RemovePassenger(WorldObject* passenger) = 0; - void UpdatePassengerPosition(Map* map, WorldObject* passenger, float x, float y, float z, float o, bool setHomePosition); - - static void CalculatePassengerPosition(float& x, float& y, float& z, float* o, float transX, float transY, float transZ, float transO) - { - float inx = x, iny = y, inz = z; - if (o) - *o = Position::NormalizeOrientation(transO + *o); - - x = transX + inx * std::cos(transO) - iny * std::sin(transO); - y = transY + iny * std::cos(transO) + inx * std::sin(transO); - z = transZ + inz; - } - - static void CalculatePassengerOffset(float& x, float& y, float& z, float* o, float transX, float transY, float transZ, float transO) - { - if (o) - *o = Position::NormalizeOrientation(*o - transO); - - z -= transZ; - y -= transY; // y = searchedY * std::cos(o) + searchedX * std::sin(o) - x -= transX; // x = searchedX * std::cos(o) + searchedY * std::sin(o + pi) - float inx = x, iny = y; - y = (iny - inx * std::tan(transO)) / (std::cos(transO) + std::sin(transO) * std::tan(transO)); - x = (inx + iny * std::tan(transO)) / (std::cos(transO) + std::sin(transO) * std::tan(transO)); - } + void UpdatePassengerPosition(Map* map, WorldObject* passenger, Position const& position, bool setHomePosition); virtual int32 GetMapIdForSpawning() const = 0; }; |
