529{
531 return false;
532
533 if (!owner || !owner->IsAlive())
534 return false;
535
538
539
540 if (owner->HasUnitState(
UNIT_STATE_NOT_MOVE) || (cOwner && owner->ToCreature()->IsMovementPreventedByCasting()))
541 {
545 return true;
546 }
547
548 bool followingMaster = false;
550 if (oPet)
551 {
553 followingMaster = true;
554 }
555
556 bool forceDest =
557 (followingMaster) ||
559 ;
560
561 bool targetIsMoving = false;
563 {
565 {
569
571 {
573 }
574
576 }
577 }
578 else
579 {
582
583
584 if (targetIsMoving)
585 {
588 return true;
589
591 targetPosition = predictedPosition;
593 }
594 else
595 {
598 }
599
601 i_path = std::make_unique<PathGenerator>(owner);
602 else
604
606
607 float x, y, z;
609
610 if (owner->IsHovering())
611 owner->UpdateAllowedPositionZ(x, y, z);
612
613 bool success =
i_path->CalculatePath(x, y, z, forceDest);
615 {
616 if (!owner->IsStopped())
617 owner->StopMoving();
618
619 return true;
620 }
621
623
625 init.MovebyPath(
i_path->GetPath());
628
631 init.SetVelocity(*velocity);
632 init.Launch();
633 }
634
635 return true;
636}
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:421
static Position const PredictPosition(Unit *target)
Definition TargetedMovementGenerator.cpp:449
@ UNIT_STATE_NOT_MOVE
Definition UnitDefines.h:222
bool PositionOkay(Unit *target, bool isPlayerPet, bool &targetIsMoving, uint32 diff)
Definition TargetedMovementGenerator.cpp:483
void MovementInform(T *)
Definition TargetedMovementGenerator.cpp:659
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:722
Pet * ToPet()
Definition Unit.h:714
Movement::MoveSpline * movespline
Definition Unit.h:2071
void StopMoving()
Definition Unit.cpp:16660
ObjectGuid GetOwnerGUID() const
Definition Unit.h:698
bool IsWalking() const
Definition Unit.h:1662
void MovePositionToFirstCollision(Position &pos, float dist, float angle)
Definition Object.cpp:2876
float RelativeAngle
Definition MotionMaster.h:115
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