diff options
author | ccrs <ccrs@users.noreply.github.com> | 2017-04-11 15:03:34 +0200 |
---|---|---|
committer | funjoker <funjoker109@gmail.com> | 2020-04-27 12:25:52 +0200 |
commit | 4e03d2717a7f971263f17639eb496c0b3b248018 (patch) | |
tree | 30703da389c94af4b9615a20f09d3ef723d560f1 | |
parent | e5e37f0d8608f7823e016acf3b6e86a15b5c0491 (diff) |
Core/Movement: correct no point recalculation on speed change in TargetedMovementGenerator
(cherry picked from commit 4d7e7a97b329dc8ee4354f7be26c5e5efbaeba6b)
-rwxr-xr-x | src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp | 5 | ||||
-rwxr-xr-x | src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.h | 5 |
2 files changed, 7 insertions, 3 deletions
diff --git a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp index 122156f165e..a4efd581a4e 100755 --- a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp @@ -82,7 +82,9 @@ bool TargetedMovementGenerator<T, D>::DoUpdate(T* owner, uint32 diff) } if (targetMoved) - SetTargetLocation(owner, targetMoved); + SetTargetLocation(owner, true); + else if (_speedChanged) + SetTargetLocation(owner, false); if (!_targetReached && owner->movespline->Finalized()) { @@ -177,6 +179,7 @@ void TargetedMovementGenerator<T, D>::SetTargetLocation(T* owner, bool updateDes _targetReached = false; _recalculateTravel = false; + _speedChanged = false; AddUnitStateMove(owner); diff --git a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.h b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.h index 2bd04e292f4..9f4e3712b5c 100755 --- a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.h +++ b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.h @@ -42,12 +42,12 @@ template<class T, typename D> class TargetedMovementGenerator : public MovementGeneratorMedium< T, D >, public TargetedMovementGeneratorBase { public: - explicit TargetedMovementGenerator(Unit* target, float offset, float angle) : TargetedMovementGeneratorBase(target), _path(nullptr), _timer(0), _offset(offset), _angle(angle), _recalculateTravel(false), _targetReached(false), _interrupt(false) { } + explicit TargetedMovementGenerator(Unit* target, float offset, float angle) : TargetedMovementGeneratorBase(target), _path(nullptr), _timer(0), _offset(offset), _angle(angle), _recalculateTravel(false), _speedChanged(false), _targetReached(false), _interrupt(false) { } ~TargetedMovementGenerator(); bool DoUpdate(T*, uint32); - void UnitSpeedChanged() override { _recalculateTravel = true; } + void UnitSpeedChanged() override { _speedChanged = true; } virtual void ClearUnitStateMove(T*) { } virtual void AddUnitStateMove(T*) { } @@ -65,6 +65,7 @@ class TargetedMovementGenerator : public MovementGeneratorMedium< T, D >, public float _offset; float _angle; bool _recalculateTravel; + bool _speedChanged; bool _targetReached; bool _interrupt; }; |