diff options
| author | Shauren <shauren.trinity@gmail.com> | 2023-03-05 15:45:57 +0100 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2023-03-05 15:45:57 +0100 |
| commit | cdc09d29bc8fcb85d97846027ddf589478e21139 (patch) | |
| tree | 9182eff113add4b137ec7a5772f26c31c3a06978 /src/server/game/Entities/Unit | |
| parent | f83b161bccd03a8bef8b2debb5430ae9ff12fd21 (diff) | |
Core/Units: Added Unit::SetFacingToPoint function
Diffstat (limited to 'src/server/game/Entities/Unit')
| -rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 17 | ||||
| -rw-r--r-- | src/server/game/Entities/Unit/Unit.h | 1 |
2 files changed, 18 insertions, 0 deletions
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index bbe4e973e27..329ff633801 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -12679,6 +12679,23 @@ void Unit::SetFacingToObject(WorldObject const* object, bool force) init.Launch(); } +void Unit::SetFacingToPoint(Position const& point, bool force) +{ + // do not face when already moving + if (!force && (!IsStopped() || !movespline->Finalized())) + return; + + /// @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); + if (GetTransport()) + init.DisableTransportPathTransformations(); // It makes no sense to target global orientation + init.SetFacing(point.GetPositionX(), point.GetPositionY(), point.GetPositionZ()); + + //GetMotionMaster()->LaunchMoveSpline(std::move(init), EVENT_FACE, MOTION_PRIORITY_HIGHEST); + init.Launch(); +} + bool Unit::SetWalk(bool enable) { if (enable == IsWalking()) diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index 0d831aa45f3..79b3a07c5e8 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -1248,6 +1248,7 @@ class TC_GAME_API Unit : public WorldObject void SetInFront(WorldObject const* target); void SetFacingTo(float const ori, bool force = true); void SetFacingToObject(WorldObject const* object, bool force = true); + void SetFacingToPoint(Position const& point, bool force = true); bool IsAlive() const { return (m_deathState == ALIVE); } bool isDying() const { return (m_deathState == JUST_DIED); } |
