diff options
Diffstat (limited to 'src')
4 files changed, 11 insertions, 8 deletions
diff --git a/src/server/game/Movement/MovementGenerators/ChaseMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/ChaseMovementGenerator.cpp index f83c7e8b16a..28928cdeacb 100644 --- a/src/server/game/Movement/MovementGenerators/ChaseMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/ChaseMovementGenerator.cpp @@ -73,7 +73,7 @@ void ChaseMovementGenerator::Initialize(Unit* owner) owner->SetWalk(false); _path = nullptr; - _lastTargetPosition.Relocate(0.0f, 0.0f, 0.0f); + _lastTargetPosition.reset(); } void ChaseMovementGenerator::Reset(Unit* owner) @@ -102,6 +102,7 @@ bool ChaseMovementGenerator::Update(Unit* owner, uint32 diff) if (owner->HasUnitState(UNIT_STATE_NOT_MOVE) || owner->IsMovementPreventedByCasting()) { owner->StopMoving(); + _lastTargetPosition.reset(); return true; } @@ -142,7 +143,7 @@ bool ChaseMovementGenerator::Update(Unit* owner, uint32 diff) } // if the target moved, we have to consider whether to adjust - if (_lastTargetPosition != target->GetPosition() || mutualChase != _mutualChase) + if (!_lastTargetPosition || target->GetPosition() != _lastTargetPosition.get() || mutualChase != _mutualChase) { _lastTargetPosition = target->GetPosition(); _mutualChase = mutualChase; diff --git a/src/server/game/Movement/MovementGenerators/ChaseMovementGenerator.h b/src/server/game/Movement/MovementGenerators/ChaseMovementGenerator.h index 48d828b7602..33252de524e 100644 --- a/src/server/game/Movement/MovementGenerators/ChaseMovementGenerator.h +++ b/src/server/game/Movement/MovementGenerators/ChaseMovementGenerator.h @@ -40,7 +40,7 @@ class ChaseMovementGenerator : public MovementGenerator, public AbstractFollower void Finalize(Unit*, bool, bool) override; MovementGeneratorType GetMovementGeneratorType() const override { return CHASE_MOTION_TYPE; } - void UnitSpeedChanged() override { _lastTargetPosition.Relocate(0.0f, 0.0f, 0.0f); } + void UnitSpeedChanged() override { _lastTargetPosition.reset(); } private: static constexpr uint32 RANGE_CHECK_INTERVAL = 100; // time (ms) until we attempt to recalculate @@ -49,7 +49,7 @@ class ChaseMovementGenerator : public MovementGenerator, public AbstractFollower Optional<ChaseAngle> const _angle; std::unique_ptr<PathGenerator> _path; - Position _lastTargetPosition; + Optional<Position> _lastTargetPosition; uint32 _rangeCheckTimer = RANGE_CHECK_INTERVAL; bool _movingTowards = true; bool _mutualChase = true; diff --git a/src/server/game/Movement/MovementGenerators/FollowMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/FollowMovementGenerator.cpp index 817401da6ad..e4b7fc78832 100644 --- a/src/server/game/Movement/MovementGenerators/FollowMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/FollowMovementGenerator.cpp @@ -61,7 +61,7 @@ void FollowMovementGenerator::Initialize(Unit* owner) owner->StopMoving(); UpdatePetSpeed(owner); _path = nullptr; - _lastTargetPosition.Relocate(0.0f, 0.0f, 0.0f); + _lastTargetPosition.reset(); } void FollowMovementGenerator::Reset(Unit* owner) @@ -85,6 +85,7 @@ bool FollowMovementGenerator::Update(Unit* owner, uint32 diff) if (owner->HasUnitState(UNIT_STATE_NOT_MOVE) || owner->IsMovementPreventedByCasting()) { owner->StopMoving(); + _lastTargetPosition.reset(); return true; } @@ -112,7 +113,7 @@ bool FollowMovementGenerator::Update(Unit* owner, uint32 diff) DoMovementInform(owner, target); } - if (_lastTargetPosition.GetExactDistSq(target->GetPosition()) > 0.0f) + if (!_lastTargetPosition || _lastTargetPosition->GetExactDistSq(target->GetPosition()) > 0.0f) { _lastTargetPosition = target->GetPosition(); if (owner->HasUnitState(UNIT_STATE_FOLLOW_MOVE) || !PositionOkay(owner, target, _range + FOLLOW_RANGE_TOLERANCE)) diff --git a/src/server/game/Movement/MovementGenerators/FollowMovementGenerator.h b/src/server/game/Movement/MovementGenerators/FollowMovementGenerator.h index 91d99bb8fb5..0dd2a434cd0 100644 --- a/src/server/game/Movement/MovementGenerators/FollowMovementGenerator.h +++ b/src/server/game/Movement/MovementGenerators/FollowMovementGenerator.h @@ -21,6 +21,7 @@ #include "AbstractFollower.h" #include "MovementDefines.h" #include "MovementGenerator.h" +#include "Optional.h" #include "Position.h" class PathGenerator; @@ -41,7 +42,7 @@ class FollowMovementGenerator : public MovementGenerator, public AbstractFollowe void Finalize(Unit*, bool, bool) override; MovementGeneratorType GetMovementGeneratorType() const override { return FOLLOW_MOTION_TYPE; } - void UnitSpeedChanged() override { _lastTargetPosition.Relocate(0.0f, 0.0f, 0.0f); } + void UnitSpeedChanged() override { _lastTargetPosition.reset(); } private: static constexpr uint32 CHECK_INTERVAL = 500; @@ -53,7 +54,7 @@ class FollowMovementGenerator : public MovementGenerator, public AbstractFollowe uint32 _checkTimer = CHECK_INTERVAL; std::unique_ptr<PathGenerator> _path; - Position _lastTargetPosition; + Optional<Position> _lastTargetPosition; }; #endif |
