aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities/Object
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/Object
parentd48e97731538b01c4005cd7c73653a0f33015098 (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.cpp7
-rw-r--r--src/server/game/Entities/Object/Position.cpp19
-rw-r--r--src/server/game/Entities/Object/Position.h2
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