diff options
| author | ccrs <ccrs@users.noreply.github.com> | 2020-05-02 22:52:01 +0200 |
|---|---|---|
| committer | ccrs <ccrs@users.noreply.github.com> | 2020-05-02 22:52:01 +0200 |
| commit | b8422e667b242ae4ab2bbdfda43656ed1fe485ae (patch) | |
| tree | 9c11718e8b4269f6d80c8590726c580f4f15f312 /src/server/game/Movement | |
| parent | 9b5375f858b7a9bac409cc0b17c56391f2787f5b (diff) | |
Core/Movement: 0e2342c followup
Diffstat (limited to 'src/server/game/Movement')
| -rw-r--r-- | src/server/game/Movement/MovementGenerators/FormationMovementGenerator.cpp | 35 | ||||
| -rw-r--r-- | src/server/game/Movement/MovementGenerators/FormationMovementGenerator.h | 1 |
2 files changed, 13 insertions, 23 deletions
diff --git a/src/server/game/Movement/MovementGenerators/FormationMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/FormationMovementGenerator.cpp index 9bc79afcee0..b1261f816ed 100644 --- a/src/server/game/Movement/MovementGenerators/FormationMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/FormationMovementGenerator.cpp @@ -30,7 +30,7 @@ FormationMovementGenerator::FormationMovementGenerator(Unit* leader, float range Mode = MOTION_MODE_DEFAULT; Priority = MOTION_PRIORITY_NORMAL; Flags = MOVEMENTGENERATOR_FLAG_INITIALIZATION_PENDING; - BaseUnitState = UNIT_STATE_ROAMING; + BaseUnitState = UNIT_STATE_FOLLOW_FORMATION; } MovementGeneratorType FormationMovementGenerator::GetMovementGeneratorType() const @@ -71,35 +71,25 @@ bool FormationMovementGenerator::DoUpdate(Creature* owner, uint32 diff) if (owner->HasUnitState(UNIT_STATE_NOT_MOVE) || owner->IsMovementPreventedByCasting()) { AddFlag(MOVEMENTGENERATOR_FLAG_INTERRUPTED); - owner->ClearUnitState(UNIT_STATE_ROAMING_MOVE); - owner->StopMoving(); - return true; - } - - // Leader has stopped moving, so do we as well - if (target->movespline->Finalized() && target->movespline->GetId() == _lastLeaderSplineID && _hasPredictedDestination) - { - owner->ClearUnitState(UNIT_STATE_ROAMING_MOVE); owner->StopMoving(); _nextMoveTimer.Reset(0); _hasPredictedDestination = false; return true; } - // Update home position - owner->SetHomePosition(owner->GetPosition()); - if (HasFlag(MOVEMENTGENERATOR_FLAG_INTERRUPTED)) - RemoveFlag(MOVEMENTGENERATOR_FLAG_INTERRUPTED); - - // Leader has stopped moving, so do we as well - if (owner->HasUnitState(UNIT_STATE_ROAMING_MOVE) && _hasPredictedDestination && target->movespline->Finalized() && target->movespline->GetId() == _lastLeaderSplineID) + // If target is not moving and destination has been predicted and if we are on the same spline, we stop as well + if (target->movespline->Finalized() && target->movespline->GetId() == _lastLeaderSplineID && _hasPredictedDestination) { + AddFlag(MOVEMENTGENERATOR_FLAG_INTERRUPTED); owner->StopMoving(); _nextMoveTimer.Reset(0); _hasPredictedDestination = false; return true; } + if (!owner->movespline->Finalized()) + owner->SetHomePosition(owner->GetPosition()); + // Formation leader has launched a new spline, launch a new one for our member as well // This action does not reset the regular movement launch cycle interval if (!target->movespline->Finalized() && target->movespline->GetId() != _lastLeaderSplineID) @@ -137,9 +127,9 @@ bool FormationMovementGenerator::DoUpdate(Creature* owner, uint32 diff) } // We have reached our destination before launching a new movement. Alling facing with leader - if (owner->HasUnitState(UNIT_STATE_ROAMING_MOVE) && owner->movespline->Finalized()) + if (owner->HasUnitState(UNIT_STATE_FOLLOW_FORMATION_MOVE) && owner->movespline->Finalized()) { - owner->ClearUnitState(UNIT_STATE_ROAMING_MOVE); + owner->ClearUnitState(UNIT_STATE_FOLLOW_FORMATION_MOVE); owner->SetFacingTo(target->GetOrientation()); MovementInform(owner); } @@ -205,20 +195,21 @@ void FormationMovementGenerator::LaunchMovement(Creature* owner, Unit* target) init.Launch(); _lastLeaderPosition = target->GetPosition(); - owner->AddUnitState(UNIT_STATE_ROAMING_MOVE); + owner->AddUnitState(UNIT_STATE_FOLLOW_FORMATION_MOVE); + RemoveFlag(MOVEMENTGENERATOR_FLAG_INTERRUPTED); } void FormationMovementGenerator::DoDeactivate(Creature* owner) { AddFlag(MOVEMENTGENERATOR_FLAG_DEACTIVATED); - owner->ClearUnitState(UNIT_STATE_ROAMING_MOVE); + owner->ClearUnitState(UNIT_STATE_FOLLOW_FORMATION_MOVE); } void FormationMovementGenerator::DoFinalize(Creature* owner, bool active, bool movementInform) { AddFlag(MOVEMENTGENERATOR_FLAG_FINALIZED); if (active) - owner->ClearUnitState(UNIT_STATE_ROAMING_MOVE); + owner->ClearUnitState(UNIT_STATE_FOLLOW_FORMATION_MOVE); if (movementInform && HasFlag(MOVEMENTGENERATOR_FLAG_INFORM_ENABLED)) MovementInform(owner); diff --git a/src/server/game/Movement/MovementGenerators/FormationMovementGenerator.h b/src/server/game/Movement/MovementGenerators/FormationMovementGenerator.h index 0b6d89b9b08..4c3adaf192b 100644 --- a/src/server/game/Movement/MovementGenerators/FormationMovementGenerator.h +++ b/src/server/game/Movement/MovementGenerators/FormationMovementGenerator.h @@ -40,7 +40,6 @@ class FormationMovementGenerator : public MovementGeneratorMedium<Creature, Form private: void MovementInform(Creature*); - void LaunchMovement(Creature* owner, Unit* target); static constexpr uint32 FORMATION_MOVEMENT_INTERVAL = 1200; // sniffed (3 batch update cycles) |
