aboutsummaryrefslogtreecommitdiff
path: root/src/server/game
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
parentfb39980c52cdb28b9de43356ee37470c7fd6797c (diff)
Core/Position: Refactor GetAngle -> GetAbsoluteAngle because code clarity is good.
Diffstat (limited to 'src/server/game')
-rw-r--r--src/server/game/AI/CreatureAI.cpp2
-rw-r--r--src/server/game/AI/PlayerAI/PlayerAI.cpp2
-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
-rw-r--r--src/server/game/Entities/Player/CinematicMgr.cpp2
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp21
-rw-r--r--src/server/game/Entities/Unit/Unit.h1
-rw-r--r--src/server/game/Movement/MotionMaster.cpp6
-rw-r--r--src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp2
-rw-r--r--src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp2
-rw-r--r--src/server/game/Spells/SpellEffects.cpp4
12 files changed, 27 insertions, 43 deletions
diff --git a/src/server/game/AI/CreatureAI.cpp b/src/server/game/AI/CreatureAI.cpp
index 22e2226af50..0686ad20c6e 100644
--- a/src/server/game/AI/CreatureAI.cpp
+++ b/src/server/game/AI/CreatureAI.cpp
@@ -159,7 +159,7 @@ void CreatureAI::TriggerAlert(Unit const* who) const
// Face the unit (stealthed player) and set distracted state for 5 seconds
me->GetMotionMaster()->MoveDistract(5 * IN_MILLISECONDS);
me->StopMoving();
- me->SetFacingTo(me->GetAngle(who));
+ me->SetFacingTo(me->GetAbsoluteAngle(who));
}
void CreatureAI::EnterEvadeMode(EvadeReason why)
diff --git a/src/server/game/AI/PlayerAI/PlayerAI.cpp b/src/server/game/AI/PlayerAI/PlayerAI.cpp
index 677d39ca322..98cfbd287f7 100644
--- a/src/server/game/AI/PlayerAI/PlayerAI.cpp
+++ b/src/server/game/AI/PlayerAI/PlayerAI.cpp
@@ -1375,7 +1375,7 @@ void SimpleCharmedPlayerAI::UpdateAI(const uint32 diff)
if (me->IsStopped() && !me->HasUnitState(UNIT_STATE_CANNOT_TURN))
{
- float targetAngle = me->GetAngle(target);
+ float targetAngle = me->GetAbsoluteAngle(target);
if (_forceFacing || fabs(me->GetOrientation() - targetAngle) > 0.4f)
{
me->SetFacingTo(targetAngle);
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;
diff --git a/src/server/game/Entities/Player/CinematicMgr.cpp b/src/server/game/Entities/Player/CinematicMgr.cpp
index 127c28b3f08..c53118a021d 100644
--- a/src/server/game/Entities/Player/CinematicMgr.cpp
+++ b/src/server/game/Entities/Player/CinematicMgr.cpp
@@ -114,7 +114,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 c83c967da5b..74044bad861 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -559,20 +559,7 @@ float Unit::GetMeleeRange(Unit const* target) const
return std::max(range, NOMINAL_MELEE_RANGE);
}
-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 = 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));
-}
-
-AuraApplication * Unit::GetVisibleAura(uint8 slot) const
+AuraApplication* Unit::GetVisibleAura(uint8 slot) const
{
VisibleAuraMap::const_iterator itr = m_visibleAuras.find(slot);
if (itr != m_visibleAuras.end())
@@ -12395,7 +12382,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*/)
@@ -13043,7 +13030,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)
@@ -13069,7 +13056,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 3ecfd9c4fa5..cdde6785750 100644
--- a/src/server/game/Entities/Unit/Unit.h
+++ b/src/server/game/Entities/Unit/Unit.h
@@ -792,7 +792,6 @@ class TC_GAME_API Unit : public WorldObject
bool IsWithinMeleeRange(Unit const* obj) const;
float GetMeleeRange(Unit const* target) const;
virtual SpellSchoolMask GetMeleeDamageSchoolMask(WeaponAttackType attackType = BASE_ATTACK, uint8 damageIndex = 0) const = 0;
- void GetRandomContactPoint(Unit const* target, float& x, float& y, float& z, float distance2dMin, float distance2dMax) const;
uint32 m_extraAttacks;
bool m_canDualWield;
diff --git a/src/server/game/Movement/MotionMaster.cpp b/src/server/game/Movement/MotionMaster.cpp
index c10870703fa..92ac7b11fc1 100644
--- a/src/server/game/Movement/MotionMaster.cpp
+++ b/src/server/game/Movement/MotionMaster.cpp
@@ -347,7 +347,7 @@ void MotionMaster::MoveCloserAndStop(uint32 id, Unit* target, float distance)
float distanceToTravel = _owner->GetExactDist2d(target) - distance;
if (distanceToTravel > 0.0f)
{
- float angle = _owner->GetAngle(target);
+ float angle = _owner->GetAbsoluteAngle(target);
float destx = _owner->GetPositionX() + distanceToTravel * std::cos(angle);
float desty = _owner->GetPositionY() + distanceToTravel * std::sin(angle);
MovePoint(id, destx, desty, target->GetPositionZ());
@@ -436,7 +436,7 @@ void MotionMaster::MoveKnockbackFrom(float srcX, float srcY, float speedXY, floa
float dist = 2 * moveTimeHalf * speedXY;
float max_height = -Movement::computeFallElevation(moveTimeHalf, false, -speedZ);
- _owner->GetNearPoint(_owner, x, y, z, _owner->GetCombatReach(), dist, _owner->GetAngle(srcX, srcY) + float(M_PI));
+ _owner->GetNearPoint(_owner, x, y, z, _owner->GetCombatReach(), dist, _owner->GetAbsoluteAngle(srcX, srcY) + float(M_PI));
Movement::MoveSplineInit init(_owner);
init.MoveTo(x, y, z);
@@ -486,7 +486,7 @@ void MotionMaster::MoveCirclePath(float x, float y, float z, float radius, bool
{
float step = 2 * float(M_PI) / stepCount * (clockwise ? -1.0f : 1.0f);
Position const& pos = { x, y, z, 0.0f };
- float angle = pos.GetAngle(_owner->GetPositionX(), _owner->GetPositionY());
+ float angle = pos.GetAbsoluteAngle(_owner->GetPositionX(), _owner->GetPositionY());
Movement::MoveSplineInit init(_owner);
diff --git a/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp
index a7d4f70e624..8d613a88298 100644
--- a/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp
+++ b/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp
@@ -147,7 +147,7 @@ void FleeingMovementGenerator<T>::GetPoint(T* owner, Position &position)
{
casterDistance = fleeTarget->GetDistance(owner);
if (casterDistance > 0.2f)
- casterAngle = fleeTarget->GetAngle(owner);
+ casterAngle = fleeTarget->GetAbsoluteAngle(owner);
else
casterAngle = frand(0.0f, 2.0f * float(M_PI));
}
diff --git a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp
index e440fbdcf5e..09b187dc976 100644
--- a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp
+++ b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp
@@ -135,7 +135,7 @@ void TargetedMovementGenerator<T, D>::SetTargetLocation(T* owner, bool updateDes
if (hoverDiff)
size = size > hoverDiff ? std::sqrt(size * size - hoverDiff * hoverDiff) : 0.0f;
- GetTarget()->GetNearPoint(owner, x, y, z, size, CONTACT_DISTANCE, GetTarget()->GetAngle(owner));
+ GetTarget()->GetNearPoint(owner, x, y, z, size, CONTACT_DISTANCE, GetTarget()->GetAbsoluteAngle(owner));
}
else
{
diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp
index 96dec8e753b..269dc5527c9 100644
--- a/src/server/game/Spells/SpellEffects.cpp
+++ b/src/server/game/Spells/SpellEffects.cpp
@@ -2534,7 +2534,7 @@ void Spell::EffectDistract(SpellEffIndex /*effIndex*/)
unitTarget->GetMotionMaster()->MoveDistract(damage * IN_MILLISECONDS);
unitTarget->StopMoving();
- unitTarget->SetFacingTo(unitTarget->GetAngle(destTarget));
+ unitTarget->SetFacingTo(unitTarget->GetAbsoluteAngle(destTarget));
}
void Spell::EffectPickPocket(SpellEffIndex /*effIndex*/)
@@ -5665,7 +5665,7 @@ void Spell::SummonGuardian(uint32 i, uint32 entry, SummonPropertiesEntry const*
summon->SetFaction(unitCaster->GetFaction());
if (summon->HasUnitTypeMask(UNIT_MASK_MINION) && m_targets.HasDst())
- ((Minion*)summon)->SetFollowAngle(unitCaster->GetAngle(summon));
+ ((Minion*)summon)->SetFollowAngle(unitCaster->GetAbsoluteAngle(summon));
if (summon->GetEntry() == 27893)
{