mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-16 07:30:42 +01:00
Entities/Object: Add some Position const& overloads to distance/angle methods for usability.
This commit is contained in:
@@ -1363,24 +1363,21 @@ bool WorldObject::IsInRange3d(float x, float y, float z, float minRange, float m
|
||||
return distsq < maxdist * maxdist;
|
||||
}
|
||||
|
||||
bool WorldObject::IsInBetween(const WorldObject* obj1, const WorldObject* obj2, float size) const
|
||||
bool WorldObject::IsInBetween(Position const& pos1, Position const& pos2, float size) const
|
||||
{
|
||||
if (!obj1 || !obj2)
|
||||
return false;
|
||||
|
||||
float dist = GetExactDist2d(obj1->GetPositionX(), obj1->GetPositionY());
|
||||
float dist = GetExactDist2d(pos1);
|
||||
|
||||
// not using sqrt() for performance
|
||||
if ((dist * dist) >= obj1->GetExactDist2dSq(obj2->GetPositionX(), obj2->GetPositionY()))
|
||||
if ((dist * dist) >= pos1.GetExactDist2dSq(pos2))
|
||||
return false;
|
||||
|
||||
if (!size)
|
||||
size = GetObjectSize() / 2;
|
||||
|
||||
float angle = obj1->GetAngle(obj2);
|
||||
float angle = pos1.GetAngle(pos2);
|
||||
|
||||
// not using sqrt() for performance
|
||||
return (size * size) >= GetExactDist2dSq(obj1->GetPositionX() + std::cos(angle) * dist, obj1->GetPositionY() + std::sin(angle) * dist);
|
||||
return (size * size) >= GetExactDist2dSq(pos1.GetPositionX() + std::cos(angle) * dist, pos1.GetPositionY() + std::sin(angle) * dist);
|
||||
}
|
||||
|
||||
bool WorldObject::isInFront(WorldObject const* target, float arc) const
|
||||
|
||||
@@ -500,7 +500,8 @@ class TC_GAME_API WorldObject : public Object, public WorldLocation
|
||||
bool isInFront(WorldObject const* target, float arc = float(M_PI)) const;
|
||||
bool isInBack(WorldObject const* target, float arc = float(M_PI)) const;
|
||||
|
||||
bool IsInBetween(WorldObject const* obj1, WorldObject const* obj2, float size = 0) const;
|
||||
bool IsInBetween(Position const& pos1, Position const& pos2, float size = 0) const;
|
||||
bool IsInBetween(WorldObject const* obj1, WorldObject const* obj2, float size = 0) const { return obj1 && obj2 && IsInBetween(obj1->GetPosition(), obj2->GetPosition(), size); }
|
||||
|
||||
virtual void CleanupsBeforeDelete(bool finalCleanup = true); // used in destructor or explicitly before mass creature delete to remove cross-references to already deleted units
|
||||
|
||||
|
||||
@@ -71,12 +71,12 @@ Position Position::GetPositionWithOffset(Position const& offset) const
|
||||
return ret;
|
||||
}
|
||||
|
||||
float Position::GetAngle(const Position* obj) const
|
||||
float Position::GetAngle(Position const* pos) const
|
||||
{
|
||||
if (!obj)
|
||||
if (!pos)
|
||||
return 0;
|
||||
|
||||
return GetAngle(obj->GetPositionX(), obj->GetPositionY());
|
||||
return GetAngle(pos->GetPositionX(), pos->GetPositionY());
|
||||
}
|
||||
|
||||
// Return angle in range 0..2*pi
|
||||
|
||||
@@ -131,7 +131,7 @@ public:
|
||||
|
||||
bool IsPositionValid() const;
|
||||
|
||||
float GetExactDist2dSq(float x, float y) const
|
||||
float GetExactDist2dSq(const float x, const float y) const
|
||||
{
|
||||
float dx = m_positionX - x; float dy = m_positionY - y; return dx*dx + dy*dy;
|
||||
}
|
||||
@@ -141,6 +141,16 @@ public:
|
||||
return std::sqrt(GetExactDist2dSq(x, y));
|
||||
}
|
||||
|
||||
float GetExactDist2dSq(Position const& pos) const
|
||||
{
|
||||
float dx = m_positionX - pos.m_positionX; float dy = m_positionY - pos.m_positionY; return dx*dx + dy*dy;
|
||||
}
|
||||
|
||||
float GetExactDist2d(Position const& pos) const
|
||||
{
|
||||
return std::sqrt(GetExactDist2d(pos));
|
||||
}
|
||||
|
||||
float GetExactDist2dSq(Position const* pos) const
|
||||
{
|
||||
float dx = m_positionX - pos->m_positionX; float dy = m_positionY - pos->m_positionY; return dx*dx + dy*dy;
|
||||
@@ -161,6 +171,16 @@ public:
|
||||
return std::sqrt(GetExactDistSq(x, y, z));
|
||||
}
|
||||
|
||||
float GetExactDistSq(Position const& pos) const
|
||||
{
|
||||
float dx = m_positionX - pos.m_positionX; float dy = m_positionY - pos.m_positionY; float dz = m_positionZ - pos.m_positionZ; return dx*dx + dy*dy + dz*dz;
|
||||
}
|
||||
|
||||
float GetExactDist(Position const& pos) const
|
||||
{
|
||||
return std::sqrt(GetExactDistSq(pos));
|
||||
}
|
||||
|
||||
float GetExactDistSq(Position const* pos) const
|
||||
{
|
||||
float dx = m_positionX - pos->m_positionX; float dy = m_positionY - pos->m_positionY; float dz = m_positionZ - pos->m_positionZ; return dx*dx + dy*dy + dz*dz;
|
||||
@@ -175,6 +195,10 @@ public:
|
||||
Position GetPositionWithOffset(Position const& offset) const;
|
||||
|
||||
float GetAngle(Position const* pos) const;
|
||||
float GetAngle(Position const& pos) const
|
||||
{
|
||||
return GetAngle(pos.m_positionX, pos.m_positionY);
|
||||
}
|
||||
float GetAngle(float x, float y) const;
|
||||
float GetRelativeAngle(Position const* pos) const
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user