457{
459 return false;
460
461 if (!owner || !owner->IsAlive())
462 return false;
463
466
467
468 if (owner->HasUnitState(
UNIT_STATE_NOT_MOVE) || (cOwner && owner->ToCreature()->IsMovementPreventedByCasting()))
469 {
473 return true;
474 }
475
476 bool followingMaster = false;
478 if (oPet)
479 {
481 followingMaster = true;
482 }
483
484 bool forceDest =
485 (followingMaster) ||
487 ;
488
489 bool targetIsMoving = false;
491 {
493 {
497
499 {
501 }
502
504 }
505 }
506 else
507 {
510
511
512 if (targetIsMoving)
513 {
516 return true;
517
519 targetPosition = predictedPosition;
521 }
522 else
523 {
526 }
527
529 i_path = std::make_unique<PathGenerator>(owner);
530 else
532
534
535 float x, y, z;
537
538 if (owner->IsHovering())
539 owner->UpdateAllowedPositionZ(x, y, z);
540
541 bool success =
i_path->CalculatePath(x, y, z, forceDest);
543 {
544 if (!owner->IsStopped())
545 owner->StopMoving();
546
547 return true;
548 }
549
551
553 init.MovebyPath(
i_path->GetPath());
556
559 init.SetVelocity(*velocity);
560 init.Launch();
561 }
562
563 return true;
564}
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:349
static Position const PredictPosition(Unit *target)
Definition TargetedMovementGenerator.cpp:377
@ UNIT_STATE_NOT_MOVE
Definition UnitDefines.h:218
bool PositionOkay(Unit *target, bool isPlayerPet, bool &targetIsMoving, uint32 diff)
Definition TargetedMovementGenerator.cpp:411
void MovementInform(T *)
Definition TargetedMovementGenerator.cpp:587
Optional< Position > _lastPredictedPosition
Definition TargetedMovementGenerator.h:107
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:2029
void StopMoving()
Definition Unit.cpp:16724
ObjectGuid GetOwnerGUID() const
Definition Unit.h:668
bool IsWalking() const
Definition Unit.h:1621
void MovePositionToFirstCollision(Position &pos, float dist, float angle)
Definition Object.cpp:2867
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