aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorccrs <ccrs@users.noreply.github.com>2020-05-03 16:53:21 +0200
committerccrs <ccrs@users.noreply.github.com>2020-05-03 16:53:21 +0200
commitde832b698026ead014e1d73969c7bcffeef9b965 (patch)
tree2a74fdbeda4dac70372719cd67be92c4c3208bb0 /src
parent829cf38c67a70c1e0ec9886562e7ae7ae4fda17d (diff)
Core/Movement: modify MovementInform trigger condition & checks in FollowMovementGenerator
ref #24552
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Movement/MovementGenerators/FollowMovementGenerator.cpp36
-rw-r--r--src/server/game/Movement/MovementGenerators/FollowMovementGenerator.h5
2 files changed, 18 insertions, 23 deletions
diff --git a/src/server/game/Movement/MovementGenerators/FollowMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/FollowMovementGenerator.cpp
index 472b9571ae6..448e1c3dc50 100644
--- a/src/server/game/Movement/MovementGenerators/FollowMovementGenerator.cpp
+++ b/src/server/game/Movement/MovementGenerators/FollowMovementGenerator.cpp
@@ -35,7 +35,7 @@ static void DoMovementInform(Unit* owner, Unit* target)
AI->MovementInform(FOLLOW_MOTION_TYPE, target->GetGUID().GetCounter());
}
-FollowMovementGenerator::FollowMovementGenerator(Unit* target, float range, ChaseAngle angle) : AbstractFollower(ASSERT_NOTNULL(target)), _range(range), _angle(angle)
+FollowMovementGenerator::FollowMovementGenerator(Unit* target, float range, ChaseAngle angle) : AbstractFollower(ASSERT_NOTNULL(target)), _range(range), _angle(angle), _checkTimer(CHECK_INTERVAL)
{
Mode = MOTION_MODE_DEFAULT;
Priority = MOTION_PRIORITY_NORMAL;
@@ -55,7 +55,7 @@ static bool PositionOkay(Unit* owner, Unit* target, float range, Optional<ChaseA
void FollowMovementGenerator::Initialize(Unit* owner)
{
RemoveFlag(MOVEMENTGENERATOR_FLAG_INITIALIZATION_PENDING | MOVEMENTGENERATOR_FLAG_DEACTIVATED);
- AddFlag(MOVEMENTGENERATOR_FLAG_INITIALIZED);
+ AddFlag(MOVEMENTGENERATOR_FLAG_INITIALIZED | MOVEMENTGENERATOR_FLAG_INFORM_ENABLED);
owner->StopMoving();
UpdatePetSpeed(owner);
@@ -83,35 +83,27 @@ bool FollowMovementGenerator::Update(Unit* owner, uint32 diff)
if (owner->HasUnitState(UNIT_STATE_NOT_MOVE) || owner->IsMovementPreventedByCasting())
{
+ _path = nullptr;
owner->StopMoving();
_lastTargetPosition.reset();
return true;
}
- if (owner->HasUnitState(UNIT_STATE_FOLLOW_MOVE))
+ _checkTimer.Update(diff);
+ if (_checkTimer.Passed())
{
- if (_checkTimer > diff)
- _checkTimer -= diff;
- else
+ _checkTimer.Reset(CHECK_INTERVAL);
+ if (HasFlag(MOVEMENTGENERATOR_FLAG_INFORM_ENABLED) && PositionOkay(owner, target, _range, _angle))
{
- _checkTimer = CHECK_INTERVAL;
- if (PositionOkay(owner, target, _range, _angle))
- {
- _path = nullptr;
- owner->StopMoving();
- DoMovementInform(owner, target);
- return true;
- }
+ RemoveFlag(MOVEMENTGENERATOR_FLAG_INFORM_ENABLED);
+ _path = nullptr;
+ owner->StopMoving();
+ _lastTargetPosition.reset();
+ DoMovementInform(owner, target);
+ return true;
}
}
- if (owner->HasUnitState(UNIT_STATE_FOLLOW_MOVE) && owner->movespline->Finalized())
- {
- _path = nullptr;
- owner->ClearUnitState(UNIT_STATE_FOLLOW_MOVE);
- DoMovementInform(owner, target);
- }
-
if (!_lastTargetPosition || _lastTargetPosition->GetExactDistSq(target->GetPosition()) > 0.0f)
{
_lastTargetPosition = target->GetPosition();
@@ -158,6 +150,7 @@ bool FollowMovementGenerator::Update(Unit* owner, uint32 diff)
}
owner->AddUnitState(UNIT_STATE_FOLLOW_MOVE);
+ AddFlag(MOVEMENTGENERATOR_FLAG_INFORM_ENABLED);
Movement::MoveSplineInit init(owner);
init.MovebyPath(_path->GetPath());
@@ -172,6 +165,7 @@ bool FollowMovementGenerator::Update(Unit* owner, uint32 diff)
void FollowMovementGenerator::Deactivate(Unit* owner)
{
AddFlag(MOVEMENTGENERATOR_FLAG_DEACTIVATED);
+ RemoveFlag(MOVEMENTGENERATOR_FLAG_TRANSITORY | MOVEMENTGENERATOR_FLAG_INFORM_ENABLED);
owner->ClearUnitState(UNIT_STATE_FOLLOW_MOVE);
}
diff --git a/src/server/game/Movement/MovementGenerators/FollowMovementGenerator.h b/src/server/game/Movement/MovementGenerators/FollowMovementGenerator.h
index edd7053a176..7cd0fa3fcd3 100644
--- a/src/server/game/Movement/MovementGenerators/FollowMovementGenerator.h
+++ b/src/server/game/Movement/MovementGenerators/FollowMovementGenerator.h
@@ -23,6 +23,7 @@
#include "MovementGenerator.h"
#include "Optional.h"
#include "Position.h"
+#include "Timer.h"
class PathGenerator;
class Unit;
@@ -45,14 +46,14 @@ class FollowMovementGenerator : public MovementGenerator, public AbstractFollowe
void UnitSpeedChanged() override { _lastTargetPosition.reset(); }
private:
- static constexpr uint32 CHECK_INTERVAL = 500;
+ static constexpr uint32 CHECK_INTERVAL = 250;
void UpdatePetSpeed(Unit* owner);
float const _range;
ChaseAngle const _angle;
- uint32 _checkTimer = CHECK_INTERVAL;
+ TimeTrackerSmall _checkTimer;
std::unique_ptr<PathGenerator> _path;
Optional<Position> _lastTargetPosition;
};