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/Object | |
| parent | d48e97731538b01c4005cd7c73653a0f33015098 (diff) | |
Core/Entities: Merge duplicate functions calculating relative positions - remove CalculatePassengerPosition/CalculatePassengerOffset from TransportBase class
Diffstat (limited to 'src/server/game/Entities/Object')
| -rw-r--r-- | src/server/game/Entities/Object/Object.cpp | 7 | ||||
| -rw-r--r-- | src/server/game/Entities/Object/Position.cpp | 19 | ||||
| -rw-r--r-- | src/server/game/Entities/Object/Position.h | 2 |
3 files changed, 13 insertions, 15 deletions
diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp index d5b732a145e..0f729d06dff 100644 --- a/src/server/game/Entities/Object/Object.cpp +++ b/src/server/game/Entities/Object/Object.cpp @@ -1849,13 +1849,8 @@ TempSummon* Map::SummonCreature(uint32 entry, Position const& pos, SummonPropert TransportBase* transport = summoner ? summoner->GetTransport() : nullptr; if (transport) { - float x, y, z, o; - pos.GetPosition(x, y, z, o); - transport->CalculatePassengerOffset(x, y, z, &o); - summon->m_movementInfo.transport.pos.Relocate(x, y, z, o); - // This object must be added to transport before adding to map for the client to properly display it - transport->AddPassenger(summon); + transport->AddPassenger(summon, transport->GetPositionOffsetTo(pos)); } if (summoner && !(properties && properties->GetFlags().HasFlag(SummonPropertiesFlags::IgnoreSummonerPhase))) diff --git a/src/server/game/Entities/Object/Position.cpp b/src/server/game/Entities/Object/Position.cpp index c3a4d0f57c9..6fb5f0e1c51 100644 --- a/src/server/game/Entities/Object/Position.cpp +++ b/src/server/game/Entities/Object/Position.cpp @@ -33,9 +33,9 @@ bool Position::operator==(Position const& a) const void Position::RelocateOffset(Position const& offset) { - m_positionX = GetPositionX() + (offset.GetPositionX() * std::cos(GetOrientation()) + offset.GetPositionY() * std::sin(GetOrientation() + float(M_PI))); - m_positionY = GetPositionY() + (offset.GetPositionY() * std::cos(GetOrientation()) + offset.GetPositionX() * std::sin(GetOrientation())); - m_positionZ = GetPositionZ() + offset.GetPositionZ(); + m_positionX += offset.GetPositionX() * std::cos(GetOrientation()) - offset.GetPositionY() * std::sin(GetOrientation()); + m_positionY += offset.GetPositionY() * std::cos(GetOrientation()) + offset.GetPositionX() * std::sin(GetOrientation()); + m_positionZ += offset.GetPositionZ(); SetOrientation(GetOrientation() + offset.GetOrientation()); } @@ -44,15 +44,18 @@ bool Position::IsPositionValid() const return Trinity::IsValidMapCoord(m_positionX, m_positionY, m_positionZ, m_orientation); } -void Position::GetPositionOffsetTo(Position const& endPos, Position& retOffset) const +Position Position::GetPositionOffsetTo(Position const& endPos) const { float dx = endPos.GetPositionX() - GetPositionX(); float dy = endPos.GetPositionY() - GetPositionY(); - retOffset.m_positionX = (dx + dy * std::tan(GetOrientation())) / (std::cos(GetOrientation()) + std::sin(GetOrientation()) * std::tan(GetOrientation())); - retOffset.m_positionY = (dy - dx * std::tan(GetOrientation())) / (std::cos(GetOrientation()) + std::sin(GetOrientation()) * std::tan(GetOrientation())); - retOffset.m_positionZ = endPos.GetPositionZ() - GetPositionZ(); - retOffset.SetOrientation(endPos.GetOrientation() - GetOrientation()); + return + { + (dx + dy * std::tan(GetOrientation())) / (std::cos(GetOrientation()) + std::sin(GetOrientation()) * std::tan(GetOrientation())), + (dy - dx * std::tan(GetOrientation())) / (std::cos(GetOrientation()) + std::sin(GetOrientation()) * std::tan(GetOrientation())), + endPos.GetPositionZ() - GetPositionZ(), + endPos.GetOrientation() - GetOrientation() + }; } Position Position::GetPositionWithOffset(Position const& offset) const diff --git a/src/server/game/Entities/Object/Position.h b/src/server/game/Entities/Object/Position.h index f2f1ddcde43..14553c4a14b 100644 --- a/src/server/game/Entities/Object/Position.h +++ b/src/server/game/Entities/Object/Position.h @@ -129,7 +129,7 @@ public: float GetExactDist(Position const& pos) const { return GetExactDist(pos.m_positionX, pos.m_positionY, pos.m_positionZ); } float GetExactDist(Position const* pos) const { return GetExactDist(*pos); } - void GetPositionOffsetTo(Position const & endPos, Position & retOffset) const; + Position GetPositionOffsetTo(Position const & endPos) const; Position GetPositionWithOffset(Position const& offset) const; float GetAbsoluteAngle(float x, float y) const |
