From 4d7e7a97b329dc8ee4354f7be26c5e5efbaeba6b Mon Sep 17 00:00:00 2001 From: ccrs Date: Tue, 11 Apr 2017 15:03:34 +0200 Subject: Core/Movement: correct no point recalculation on speed change in TargetedMovementGenerator --- .../game/Movement/MovementGenerators/TargetedMovementGenerator.cpp | 5 ++++- .../game/Movement/MovementGenerators/TargetedMovementGenerator.h | 5 +++-- 2 files changed, 7 insertions(+), 3 deletions(-) (limited to 'src') 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::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::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 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; }; -- cgit v1.2.3