diff options
author | ccrs <ccrs@users.noreply.github.com> | 2017-04-11 15:03:34 +0200 |
---|---|---|
committer | ccrs <ccrs@users.noreply.github.com> | 2017-04-11 15:03:34 +0200 |
commit | 4d7e7a97b329dc8ee4354f7be26c5e5efbaeba6b (patch) | |
tree | 2d1033dca0a30608c78a2e519468a81ac713de04 /src | |
parent | bd3cf8f7cd479a1097e966198cf9abd5da0c2522 (diff) |
Core/Movement: correct no point recalculation on speed change in TargetedMovementGenerator
Diffstat (limited to 'src')
-rw-r--r-- | 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 1e6a01a08f4..107bb80690d 100644 --- 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 6bfb3bbbc28..fd6303db29d 100755 --- a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.h +++ b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.h @@ -43,12 +43,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*) { } @@ -66,6 +66,7 @@ class TargetedMovementGenerator : public MovementGeneratorMedium< T, D >, public float _offset; float _angle; bool _recalculateTravel; + bool _speedChanged; bool _targetReached; bool _interrupt; }; |