524{
526 return false;
527
528 if (!owner || !owner->IsAlive())
529 return false;
530
533
534
535 if (owner->HasUnitState(
UNIT_STATE_NOT_MOVE) || (cOwner && owner->ToCreature()->IsMovementPreventedByCasting()))
536 {
540 return true;
541 }
542
543 bool followingMaster = false;
545 if (oPet)
546 {
548 followingMaster = true;
549 }
550
551 bool forceDest =
552 (followingMaster) ||
554 ;
555
556 bool targetIsMoving = false;
558 {
560 {
564
566 {
568 }
569
571 }
572 }
573 else
574 {
577
578
579 if (targetIsMoving)
580 {
583 return true;
584
586 targetPosition = predictedPosition;
588 }
589 else
590 {
593 }
594
596 i_path = std::make_unique<PathGenerator>(owner);
597 else
599
601
602 float x, y, z;
604
605 if (owner->IsHovering())
606 owner->UpdateAllowedPositionZ(x, y, z);
607
608 bool success =
i_path->CalculatePath(x, y, z, forceDest);
610 {
611 if (!owner->IsStopped())
612 owner->StopMoving();
613
614 return true;
615 }
616
618
620 init.MovebyPath(
i_path->GetPath());
623
626 init.SetVelocity(*velocity);
627 init.Launch();
628 }
629
630 return true;
631}
std::optional< T > Optional
Optional helper class to wrap optional values within.
Definition Optional.h:24
@ PATHFIND_NOPATH
Definition PathGenerator.h:50
static Optional< float > GetVelocity(Unit *owner, Unit *target, G3D::Vector3 const &dest, bool playerPet)
Definition TargetedMovementGenerator.cpp:416
static Position const PredictPosition(Unit *target)
Definition TargetedMovementGenerator.cpp:444
@ UNIT_STATE_NOT_MOVE
Definition UnitDefines.h:220
bool PositionOkay(Unit *target, bool isPlayerPet, bool &targetIsMoving, uint32 diff)
Definition TargetedMovementGenerator.cpp:478
void MovementInform(T *)
Definition TargetedMovementGenerator.cpp:654
Optional< Position > _lastPredictedPosition
Definition TargetedMovementGenerator.h:122
Definition MoveSplineInit.h:71
bool isWalking() const
Definition MoveSpline.h:119
bool IsPlayer() const
Definition Object.h:201
Creature * ToCreature()
Definition Object.h:206
static ObjectGuid GetGUID(Object const *o)
Definition Object.h:113
TO * getTarget() const
Definition Reference.h:95
bool isValid() const
Definition Reference.h:79
FollowerReference i_target
Definition TargetedMovementGenerator.h:34
void ClearUnitState(uint32 f)
Definition Unit.h:692
Pet * ToPet()
Definition Unit.h:684
Movement::MoveSpline * movespline
Definition Unit.h:2032
void StopMoving()
Definition Unit.cpp:16733
ObjectGuid GetOwnerGUID() const
Definition Unit.h:668
bool IsWalking() const
Definition Unit.h:1624
void MovePositionToFirstCollision(Position &pos, float dist, float angle)
Definition Object.cpp:2851
float RelativeAngle
Definition MotionMaster.h:100
float ToAbsoluteAngle(float relAngle) const
Definition Position.h:207
float GetOrientation() const
Definition Position.h:124
void GetPosition(float &x, float &y) const
Definition Position.h:126
void Reset(int32 interval)
Definition Timer.h:249