mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-19 17:05:44 +01:00
Core/Movement: Added a wrapper method in MotionMaster for a unit to move toward another unit and stop once it reaches the target at a certain distance. (#16806)
This commit is contained in:
@@ -302,6 +302,27 @@ void MotionMaster::MovePoint(uint32 id, float x, float y, float z, bool generate
|
||||
}
|
||||
}
|
||||
|
||||
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 destx = _owner->GetPositionX() + distanceToTravel * std::cos(angle);
|
||||
float desty = _owner->GetPositionY() + distanceToTravel * std::sin(angle);
|
||||
MovePoint(id, destx, desty, target->GetPositionZ());
|
||||
}
|
||||
else
|
||||
{
|
||||
// we are already close enough. We just need to turn toward the target without changing position.
|
||||
Movement::MoveSplineInit init(_owner);
|
||||
init.MoveTo(_owner->GetPositionX(), _owner->GetPositionY(), _owner->GetPositionZMinusOffset());
|
||||
init.SetFacing(target);
|
||||
init.Launch();
|
||||
Mutate(new EffectMovementGenerator(id), MOTION_SLOT_ACTIVE);
|
||||
}
|
||||
}
|
||||
|
||||
void MotionMaster::MoveLand(uint32 id, Position const& pos)
|
||||
{
|
||||
float x, y, z;
|
||||
|
||||
@@ -173,6 +173,12 @@ class TC_GAME_API MotionMaster //: private std::stack<MovementGenerator *>
|
||||
{ MovePoint(id, pos.m_positionX, pos.m_positionY, pos.m_positionZ, generatePath); }
|
||||
void MovePoint(uint32 id, float x, float y, float z, bool generatePath = true);
|
||||
|
||||
/* Makes the unit move toward the target until it is at a certain distance from it. The unit then stops.
|
||||
Only works in 2D.
|
||||
This method doesn't account for any movement done by the target. in other words, it only works if the target is stationary.
|
||||
*/
|
||||
void MoveCloserAndStop(uint32 id, Unit* target, float distance);
|
||||
|
||||
// These two movement types should only be used with creatures having landing/takeoff animations
|
||||
void MoveLand(uint32 id, Position const& pos);
|
||||
void MoveTakeoff(uint32 id, Position const& pos);
|
||||
|
||||
Reference in New Issue
Block a user