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 | |
| parent | fb39980c52cdb28b9de43356ee37470c7fd6797c (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.cpp | 2 | ||||
| -rw-r--r-- | src/server/game/AI/PlayerAI/PlayerAI.cpp | 2 | ||||
| -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 | ||||
| -rw-r--r-- | src/server/game/Entities/Player/CinematicMgr.cpp | 2 | ||||
| -rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 21 | ||||
| -rw-r--r-- | src/server/game/Entities/Unit/Unit.h | 1 | ||||
| -rw-r--r-- | src/server/game/Movement/MotionMaster.cpp | 6 | ||||
| -rw-r--r-- | src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp | 2 | ||||
| -rw-r--r-- | src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp | 2 | ||||
| -rw-r--r-- | src/server/game/Spells/SpellEffects.cpp | 4 |
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) { |
