diff options
| author | Treeston <treeston.mmoc@gmail.com> | 2018-04-01 13:52:36 +0200 |
|---|---|---|
| committer | Treeston <treeston.mmoc@gmail.com> | 2018-04-01 13:52:36 +0200 |
| commit | 4692e10ca2ffed5ba2a0336e9c93962b0fad9eaa (patch) | |
| tree | a5324da18c6bec3aab267006c6da615918329510 /src/server/game/Entities/Object | |
| parent | fb39980c52cdb28b9de43356ee37470c7fd6797c (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.cpp | 6 | ||||
| -rw-r--r-- | src/server/game/Entities/Object/Position.cpp | 5 | ||||
| -rw-r--r-- | src/server/game/Entities/Object/Position.h | 17 |
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; |
