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/Creature/Creature.cpp6
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp11
-rw-r--r--src/server/game/Entities/Unit/Unit.h4
3 files changed, 12 insertions, 9 deletions
diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp
index 958d97e785e..cbb026fb665 100644
--- a/src/server/game/Entities/Creature/Creature.cpp
+++ b/src/server/game/Entities/Creature/Creature.cpp
@@ -2800,10 +2800,10 @@ void Creature::FocusTarget(Spell const* focusSpell, WorldObject const* target)
bool canTurnDuringCast = !focusSpell->GetSpellInfo()->HasAttribute(SPELL_ATTR5_DONT_TURN_DURING_CAST);
// Face the target - we need to do this before the unit state is modified for no-turn spells
if (target)
- SetFacingTo(GetAngle(target));
+ SetFacingToObject(target);
else if (!canTurnDuringCast)
if (Unit* victim = GetVictim())
- SetFacingTo(GetAngle(victim)); // ensure orientation is correct at beginning of cast
+ SetFacingToObject(victim); // ensure orientation is correct at beginning of cast
if (!canTurnDuringCast)
AddUnitState(UNIT_STATE_CANNOT_TURN);
@@ -2849,7 +2849,7 @@ void Creature::ReleaseFocus(Spell const* focusSpell, bool withDelay)
if (!m_suppressedTarget.IsEmpty())
{
if (WorldObject const* objTarget = ObjectAccessor::GetWorldObject(*this, m_suppressedTarget))
- SetFacingTo(GetAngle(objTarget));
+ SetFacingToObject(objTarget);
}
else
SetFacingTo(m_suppressedOrientation);
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index bd104032a10..6ea885e8d78 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -15271,8 +15271,11 @@ void Unit::SetInFront(WorldObject const* target)
SetOrientation(GetAngle(target));
}
-void Unit::SetFacingTo(float ori)
+void Unit::SetFacingTo(float ori, bool force)
{
+ if (!force && !IsStopped())
+ return;
+
Movement::MoveSplineInit init(this);
init.MoveTo(GetPositionX(), GetPositionY(), GetPositionZMinusOffset(), false);
if (GetTransport())
@@ -15281,10 +15284,10 @@ void Unit::SetFacingTo(float ori)
init.Launch();
}
-void Unit::SetFacingToObject(WorldObject const* object)
+void Unit::SetFacingToObject(WorldObject const* object, bool force)
{
- // never face when already moving
- if (!IsStopped())
+ // do not face when already moving
+ if (!force && !IsStopped())
return;
/// @todo figure out under what conditions creature will move towards object instead of facing it where it currently is.
diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h
index 054db0ef5eb..0337939cdbe 100644
--- a/src/server/game/Entities/Unit/Unit.h
+++ b/src/server/game/Entities/Unit/Unit.h
@@ -1711,8 +1711,8 @@ class TC_GAME_API Unit : public WorldObject
void SendSetVehicleRecId(uint32 vehicleId);
void SetInFront(WorldObject const* target);
- void SetFacingTo(float ori);
- void SetFacingToObject(WorldObject const* object);
+ void SetFacingTo(float ori, bool force = false);
+ void SetFacingToObject(WorldObject const* object, bool force = false);
void SendChangeCurrentVictimOpcode(HostileReference* pHostileReference);
void SendClearThreatListOpcode();