aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game/Entities')
-rw-r--r--src/server/game/Entities/AreaTrigger/AreaTrigger.cpp2
-rw-r--r--src/server/game/Entities/Object/Object.cpp6
-rw-r--r--src/server/game/Entities/Object/Position.cpp13
-rw-r--r--src/server/game/Entities/Object/Position.h20
-rw-r--r--src/server/game/Entities/Player/CinematicMgr.cpp2
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp19
-rw-r--r--src/server/game/Entities/Unit/Unit.h1
7 files changed, 23 insertions, 40 deletions
diff --git a/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp b/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp
index 195837c8ebb..7e22c4d3a58 100644
--- a/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp
+++ b/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp
@@ -910,7 +910,7 @@ void AreaTrigger::UpdateSplinePosition(uint32 diff)
if (GetTemplate() && GetTemplate()->HasFlag(AREATRIGGER_FLAG_HAS_FACE_MOVEMENT_DIR))
{
G3D::Vector3 const& nextPoint = _spline->getPoint(lastPositionIndex + 1);
- orientation = GetAngle(nextPoint.x, nextPoint.y);
+ orientation = GetAbsoluteAngle(nextPoint.x, nextPoint.y);
}
GetMap()->AreaTriggerRelocation(this, currentPosition.x, currentPosition.y, currentPosition.z, orientation);
diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp
index 85a925a5dc3..aec9708e403 100644
--- a/src/server/game/Entities/Object/Object.cpp
+++ b/src/server/game/Entities/Object/Object.cpp
@@ -1102,7 +1102,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
@@ -1259,7 +1259,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);
@@ -3047,7 +3047,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 af6e3d035e1..3e469434dff 100644
--- a/src/server/game/Entities/Object/Position.cpp
+++ b/src/server/game/Entities/Object/Position.cpp
@@ -115,7 +115,7 @@ bool Position::IsWithinDoubleVerticalCylinder(Position const* center, float radi
return IsInDist2d(center, radius) && std::abs(verticalDelta) <= height;
}
-bool Position::HasInArc(float arc, Position const* obj, float border, Optional<float> orientation) const
+bool Position::HasInArc(float arc, Position const* obj, float border) const
{
// always have self in arc
if (obj == this)
@@ -124,11 +124,8 @@ bool Position::HasInArc(float arc, Position const* obj, float border, Optional<f
// move arc to range 0.. 2*pi
arc = NormalizeOrientation(arc);
- float angle = GetAngle(obj);
- angle -= orientation.is_initialized() ? *orientation : GetOrientation();
-
// move angle to range -pi ... +pi
- angle = NormalizeOrientation(angle);
+ float angle = GetRelativeAngle(obj);
if (angle > float(M_PI))
angle -= 2.0f * float(M_PI);
@@ -137,13 +134,13 @@ bool Position::HasInArc(float arc, Position const* obj, float border, Optional<f
return ((angle >= lborder) && (angle <= rborder));
}
-bool Position::HasInLine(Position const* pos, float objSize, float width, Optional<float> orientation) const
+bool Position::HasInLine(Position const* pos, float objSize, float width) const
{
- if (!HasInArc(float(M_PI), pos, 2.0f, orientation))
+ if (!HasInArc(float(M_PI), pos, 2.0f))
return false;
width += objSize;
- float angle = GetAngle(pos) - (orientation.is_initialized() ? *orientation : GetOrientation());
+ float angle = GetRelativeAngle(pos);
return std::fabs(std::sin(angle)) * GetExactDist2d(pos->GetPositionX(), pos->GetPositionY()) < width;
}
diff --git a/src/server/game/Entities/Object/Position.h b/src/server/game/Entities/Object/Position.h
index 6940da13885..271f19e563f 100644
--- a/src/server/game/Entities/Object/Position.h
+++ b/src/server/game/Entities/Object/Position.h
@@ -19,7 +19,6 @@
#define Trinity_game_Position_h__
#include "Define.h"
-#include "Optional.h"
#include <string>
#include <cmath>
@@ -124,19 +123,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(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 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 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;
@@ -152,8 +152,8 @@ public:
// dist2d < radius && abs(dz) < height
bool IsWithinDoubleVerticalCylinder(Position const* center, float radius, float height) const;
- bool HasInArc(float arcangle, Position const* pos, float border = 2.0f, Optional<float> orientation = {}) const;
- bool HasInLine(Position const* pos, float objSize, float width, Optional<float> orientation = {}) const;
+ bool HasInArc(float arcangle, Position const* pos, float border = 2.0f) const;
+ bool HasInLine(Position const* pos, float objSize, float width) const;
std::string ToString() const;
// constrain arbitrary radian orientation to interval [0,2*PI)
diff --git a/src/server/game/Entities/Player/CinematicMgr.cpp b/src/server/game/Entities/Player/CinematicMgr.cpp
index a67b6876afb..1081f248781 100644
--- a/src/server/game/Entities/Player/CinematicMgr.cpp
+++ b/src/server/game/Entities/Player/CinematicMgr.cpp
@@ -121,7 +121,7 @@ void CinematicMgr::UpdateCinematicLocation(uint32 /*diff*/)
lastPosition.Relocate(cam.locations);
lastTimestamp = cam.timeStamp;
}
- float angle = lastPosition.GetAngle(&nextPosition);
+ float angle = lastPosition.GetAbsoluteAngle(&nextPosition);
angle -= lastPosition.GetOrientation();
if (angle < 0)
angle += 2 * float(M_PI);
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index 10edd2ef852..90e06ba69af 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -590,19 +590,6 @@ bool Unit::IsWithinBoundaryRadius(const Unit* obj) const
return IsInDist(obj, objBoundaryRadius);
}
-void Unit::GetRandomContactPoint(Unit const* obj, float &x, float &y, float &z, float distance2dMin, float distance2dMax) const
-{
- float combat_reach = GetCombatReach();
- if (combat_reach < 0.1f) // sometimes bugged for players
- combat_reach = DEFAULT_PLAYER_COMBAT_REACH;
-
- uint32 attacker_number = uint32(getAttackers().size());
- if (attacker_number > 0)
- --attacker_number;
- GetNearPoint(obj, x, y, z, obj->GetCombatReach(), distance2dMin+(distance2dMax-distance2dMin) * (float)rand_norm(),
- GetAngle(obj) + (attacker_number ? (static_cast<float>(M_PI/2) - static_cast<float>(M_PI) * (float)rand_norm()) * float(attacker_number) / combat_reach * 0.3f : 0));
-}
-
void Unit::SetVisibleAura(AuraApplication* aurApp)
{
m_visibleAuras.insert(aurApp);
@@ -11727,7 +11714,7 @@ void Unit::JumpTo(WorldObject* obj, float speedZ, bool withOrientation)
float x, y, z;
obj->GetContactPoint(this, x, y, z);
float speedXY = GetExactDist2d(x, y) * 10.0f / speedZ;
- GetMotionMaster()->MoveJump(x, y, z, GetAngle(obj), speedXY, speedZ, EVENT_JUMP, withOrientation);
+ GetMotionMaster()->MoveJump(x, y, z, GetAbsoluteAngle(obj), speedXY, speedZ, EVENT_JUMP, withOrientation);
}
void Unit::HandleSpellClick(Unit* clicker, int8 seatId /*= -1*/)
@@ -12302,7 +12289,7 @@ bool CharmInfo::IsReturning()
void Unit::SetInFront(WorldObject const* target)
{
if (!HasUnitState(UNIT_STATE_CANNOT_TURN))
- SetOrientation(GetAngle(target));
+ SetOrientation(GetAbsoluteAngle(target));
}
void Unit::SetFacingTo(float ori, bool force)
@@ -12328,7 +12315,7 @@ void Unit::SetFacingToObject(WorldObject const* object, bool force)
/// @todo figure out under what conditions creature will move towards object instead of facing it where it currently is.
Movement::MoveSplineInit init(this);
init.MoveTo(GetPositionX(), GetPositionY(), GetPositionZ(), false);
- init.SetFacing(GetAngle(object)); // when on transport, GetAngle will still return global coordinates (and angle) that needs transforming
+ init.SetFacing(GetAbsoluteAngle(object)); // when on transport, GetAbsoluteAngle will still return global coordinates (and angle) that needs transforming
init.Launch();
}
diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h
index 696c63bcacf..335ccbc0cb6 100644
--- a/src/server/game/Entities/Unit/Unit.h
+++ b/src/server/game/Entities/Unit/Unit.h
@@ -797,7 +797,6 @@ class TC_GAME_API Unit : public WorldObject
float GetMeleeRange(Unit const* target) const;
virtual SpellSchoolMask GetMeleeDamageSchoolMask(WeaponAttackType attackType = BASE_ATTACK) const = 0;
bool IsWithinBoundaryRadius(const Unit* obj) const;
- void GetRandomContactPoint(Unit const* target, float& x, float& y, float& z, float distance2dMin, float distance2dMax) const;
uint32 m_extraAttacks;
bool m_canDualWield;