aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorccrs <ccrs@users.noreply.github.com>2017-04-11 15:03:34 +0200
committerfunjoker <funjoker109@gmail.com>2020-04-27 12:25:52 +0200
commit4e03d2717a7f971263f17639eb496c0b3b248018 (patch)
tree30703da389c94af4b9615a20f09d3ef723d560f1
parente5e37f0d8608f7823e016acf3b6e86a15b5c0491 (diff)
Core/Movement: correct no point recalculation on speed change in TargetedMovementGenerator
(cherry picked from commit 4d7e7a97b329dc8ee4354f7be26c5e5efbaeba6b)
-rwxr-xr-xsrc/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp5
-rwxr-xr-xsrc/server/game/Movement/MovementGenerators/TargetedMovementGenerator.h5
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;
};