aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities/Object
diff options
context:
space:
mode:
authorTreeston <treeston.mmoc@gmail.com>2018-04-01 13:52:36 +0200
committerTreeston <treeston.mmoc@gmail.com>2018-04-01 13:52:36 +0200
commit4692e10ca2ffed5ba2a0336e9c93962b0fad9eaa (patch)
treea5324da18c6bec3aab267006c6da615918329510 /src/server/game/Entities/Object
parentfb39980c52cdb28b9de43356ee37470c7fd6797c (diff)
Core/Position: Refactor GetAngle -> GetAbsoluteAngle because code clarity is good.
Diffstat (limited to 'src/server/game/Entities/Object')
-rw-r--r--src/server/game/Entities/Object/Object.cpp6
-rw-r--r--src/server/game/Entities/Object/Position.cpp5
-rw-r--r--src/server/game/Entities/Object/Position.h17
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 9addc8c8baf..632e9d0050b 100644
--- a/src/server/game/Entities/Object/Object.cpp
+++ b/src/server/game/Entities/Object/Object.cpp
@@ -1256,7 +1256,7 @@ Position WorldObject::GetHitSpherePointFor(Position const& dest) const
G3D::Vector3 vObj(dest.GetPositionX(), dest.GetPositionY(), dest.GetPositionZ());
G3D::Vector3 contactPoint = vThis + (vObj - vThis).directionOrZero() * std::min(dest.GetExactDist(GetPosition()), GetCombatReach());
- return Position(contactPoint.x, contactPoint.y, contactPoint.z, GetAngle(contactPoint.x, contactPoint.y));
+ return Position(contactPoint.x, contactPoint.y, contactPoint.z, GetAbsoluteAngle(contactPoint.x, contactPoint.y));
}
bool WorldObject::IsWithinLOS(float ox, float oy, float oz, LineOfSightChecks checks, VMAP::ModelIgnoreFlags ignoreFlags) const
@@ -1413,7 +1413,7 @@ bool WorldObject::IsInBetween(Position const& pos1, Position const& pos2, float
if (!size)
size = GetCombatReach() / 2;
- float angle = pos1.GetAngle(pos2);
+ float angle = pos1.GetAbsoluteAngle(pos2);
// not using sqrt() for performance
return (size * size) >= GetExactDist2dSq(pos1.GetPositionX() + std::cos(angle) * dist, pos1.GetPositionY() + std::sin(angle) * dist);
@@ -3194,7 +3194,7 @@ Position WorldObject::GetRandomNearPosition(float radius)
void WorldObject::GetContactPoint(WorldObject const* obj, float& x, float& y, float& z, float distance2d /*= CONTACT_DISTANCE*/) const
{
// angle to face `obj` to `this` using distance includes size of `obj`
- GetNearPoint(obj, x, y, z, obj->GetCombatReach(), distance2d, GetAngle(obj));
+ GetNearPoint(obj, x, y, z, obj->GetCombatReach(), distance2d, GetAbsoluteAngle(obj));
}
void WorldObject::MovePosition(Position &pos, float dist, float angle)
diff --git a/src/server/game/Entities/Object/Position.cpp b/src/server/game/Entities/Object/Position.cpp
index bc3959eb4fa..57ebeebfbf1 100644
--- a/src/server/game/Entities/Object/Position.cpp
+++ b/src/server/game/Entities/Object/Position.cpp
@@ -124,11 +124,8 @@ bool Position::HasInArc(float arc, Position const* obj, float border) const
// move arc to range 0.. 2*pi
arc = NormalizeOrientation(arc);
- float angle = GetAngle(obj);
- angle -= m_orientation;
-
// move angle to range -pi ... +pi
- angle = NormalizeOrientation(angle);
+ float angle = GetRelativeAngle(obj);
if (angle > float(M_PI))
angle -= 2.0f * float(M_PI);
diff --git a/src/server/game/Entities/Object/Position.h b/src/server/game/Entities/Object/Position.h
index 3c71ac4224a..17526feb37c 100644
--- a/src/server/game/Entities/Object/Position.h
+++ b/src/server/game/Entities/Object/Position.h
@@ -125,19 +125,20 @@ public:
void GetPositionOffsetTo(Position const & endPos, Position & retOffset) const;
Position GetPositionWithOffset(Position const& offset) const;
- float GetAngle(float x, float y) const
+ float GetAbsoluteAngle(float x, float y) const
{
float dx = m_positionX - x;
float dy = m_positionY - y;
return NormalizeOrientation(std::atan2(dy, dx));
}
- float GetAngle(Position const& pos) const { return GetAngle(pos.m_positionX, pos.m_positionY); }
- float GetAngle(Position const* pos) const { return GetAngle(*pos); }
-
- float GetAbsoluteAngle(float relAngle) const { return NormalizeOrientation(relAngle + m_orientation); }
- float GetRelativeAngle(float absAngle) const { return NormalizeOrientation(absAngle - m_orientation); }
- float GetRelativeAngle(float x, float y) const { return GetRelativeAngle(GetAngle(x, y)); }
- float GetRelativeAngle(Position const* pos) const { return GetRelativeAngle(GetAngle(pos)); }
+ float GetAbsoluteAngle(Position const& pos) const { return GetAbsoluteAngle(pos.m_positionX, pos.m_positionY); }
+ float GetAbsoluteAngle(Position const* pos) const { return GetAbsoluteAngle(*pos); }
+ float ToAbsoluteAngle(float relAngle) const { return NormalizeOrientation(relAngle + m_orientation); }
+
+ float ToRelativeAngle(float absAngle) const { return NormalizeOrientation(absAngle - m_orientation); }
+ float GetRelativeAngle(float x, float y) const { return ToRelativeAngle(GetAbsoluteAngle(x, y)); }
+ float GetRelativeAngle(Position const& pos) const { return ToRelativeAngle(GetAbsoluteAngle(pos)); }
+ float GetRelativeAngle(Position const* pos) const { return ToRelativeAngle(GetAbsoluteAngle(pos)); }
void GetSinCos(float x, float y, float &vsin, float &vcos) const;