aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Entities/Object/Object.cpp13
-rw-r--r--src/server/game/Entities/Object/Object.h3
-rw-r--r--src/server/game/Entities/Object/Position.cpp6
-rw-r--r--src/server/game/Entities/Object/Position.h26
4 files changed, 35 insertions, 13 deletions
diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp
index 044d9fc7c62..f80f132ca0a 100644
--- a/src/server/game/Entities/Object/Object.cpp
+++ b/src/server/game/Entities/Object/Object.cpp
@@ -1867,24 +1867,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
diff --git a/src/server/game/Entities/Object/Object.h b/src/server/game/Entities/Object/Object.h
index 5b7b324a70e..b5bc67bd8ad 100644
--- a/src/server/game/Entities/Object/Object.h
+++ b/src/server/game/Entities/Object/Object.h
@@ -602,7 +602,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
diff --git a/src/server/game/Entities/Object/Position.cpp b/src/server/game/Entities/Object/Position.cpp
index 6c5ad7a97ef..5cf7fdd51f1 100644
--- a/src/server/game/Entities/Object/Position.cpp
+++ b/src/server/game/Entities/Object/Position.cpp
@@ -70,12 +70,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
diff --git a/src/server/game/Entities/Object/Position.h b/src/server/game/Entities/Object/Position.h
index 1553d4e0791..2a72653501a 100644
--- a/src/server/game/Entities/Object/Position.h
+++ b/src/server/game/Entities/Object/Position.h
@@ -133,7 +133,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;
}
@@ -143,6 +143,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(GetExactDist2dSq(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;
@@ -163,6 +173,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;
@@ -177,6 +197,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
{