aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities/Vehicle
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2025-10-14 13:11:41 +0200
committerShauren <shauren.trinity@gmail.com>2025-10-14 13:11:41 +0200
commita8f01e07d111ea14cbe843d82fbfce19f63faa12 (patch)
tree2aca52b9b4dfa9723ec170e672e2a4ddb7481178 /src/server/game/Entities/Vehicle
parentd48e97731538b01c4005cd7c73653a0f33015098 (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.cpp8
-rw-r--r--src/server/game/Entities/Vehicle/Vehicle.h16
-rw-r--r--src/server/game/Entities/Vehicle/VehicleDefines.h35
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;
};