Skip to content

Commit 2f0a2ba

Browse files
committed
move gen commit
1 parent 868eab6 commit 2f0a2ba

28 files changed

Lines changed: 126 additions & 110 deletions

src/server/game/Movement/MotionMaster.cpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -313,19 +313,20 @@ void MotionMaster::Update(uint32 diff)
313313
AddFlag(MOTIONMASTER_FLAG_UPDATE);
314314

315315
MovementGenerator* top = GetCurrentMovementGenerator();
316+
bool initialized = false;
316317
if (HasFlag(MOTIONMASTER_FLAG_STATIC_INITIALIZATION_PENDING) && IsStatic(top))
317318
{
318319
RemoveFlag(MOTIONMASTER_FLAG_STATIC_INITIALIZATION_PENDING);
319-
top->Initialize(_owner);
320+
initialized = top->Initialize(_owner);
320321
}
321322
if (top->HasFlag(MOVEMENTGENERATOR_FLAG_INITIALIZATION_PENDING))
322-
top->Initialize(_owner);
323+
initialized = top->Initialize(_owner);
323324
if (top->HasFlag(MOVEMENTGENERATOR_FLAG_DEACTIVATED))
324-
top->Reset(_owner);
325+
initialized = top->Reset(_owner);
325326

326327
ASSERT(!top->HasFlag(MOVEMENTGENERATOR_FLAG_INITIALIZATION_PENDING | MOVEMENTGENERATOR_FLAG_DEACTIVATED), "MotionMaster:Update: update called on an uninitialized top! (%s) (type: %u, flags: %u)", _owner->GetGUID().ToString().c_str(), top->GetMovementGeneratorType(), top->Flags);
327328

328-
if (!top->Update(_owner, diff))
329+
if (!initialized && !top->Update(_owner, diff))
329330
{
330331
ASSERT(top == GetCurrentMovementGenerator(), "MotionMaster::Update: top was modified while updating! (%s)", _owner->GetGUID().ToString().c_str());
331332

src/server/game/Movement/MovementGenerator.h

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -52,9 +52,9 @@ class TC_GAME_API MovementGenerator
5252
virtual ~MovementGenerator();
5353

5454
// on top first update
55-
virtual void Initialize(Unit*) = 0;
55+
virtual bool Initialize(Unit*) = 0;
5656
// on top reassign
57-
virtual void Reset(Unit*) = 0;
57+
virtual bool Reset(Unit*) = 0;
5858
// on top on MotionMaster::Update
5959
virtual bool Update(Unit*, uint32 diff) = 0;
6060
// on current top if another movement replaces
@@ -87,14 +87,14 @@ template<class T, class D>
8787
class MovementGeneratorMedium : public MovementGenerator
8888
{
8989
public:
90-
void Initialize(Unit* owner) override
90+
bool Initialize(Unit* owner) override
9191
{
92-
(static_cast<D*>(this))->DoInitialize(static_cast<T*>(owner));
92+
return (static_cast<D*>(this))->DoInitialize(static_cast<T*>(owner));
9393
}
9494

95-
void Reset(Unit* owner) override
95+
bool Reset(Unit* owner) override
9696
{
97-
(static_cast<D*>(this))->DoReset(static_cast<T*>(owner));
97+
return (static_cast<D*>(this))->DoReset(static_cast<T*>(owner));
9898
}
9999

100100
bool Update(Unit* owner, uint32 diff) override

src/server/game/Movement/MovementGenerators/ChaseMovementGenerator.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,16 +75,17 @@ ChaseMovementGenerator::ChaseMovementGenerator(Unit *target, Optional<ChaseRange
7575
}
7676
ChaseMovementGenerator::~ChaseMovementGenerator() = default;
7777

78-
void ChaseMovementGenerator::Initialize(Unit* /*owner*/)
78+
bool ChaseMovementGenerator::Initialize(Unit* /*owner*/)
7979
{
8080
RemoveFlag(MOVEMENTGENERATOR_FLAG_INITIALIZATION_PENDING | MOVEMENTGENERATOR_FLAG_DEACTIVATED);
8181
AddFlag(MOVEMENTGENERATOR_FLAG_INITIALIZED | MOVEMENTGENERATOR_FLAG_INFORM_ENABLED);
8282

8383
_path = nullptr;
8484
_lastTargetPosition.reset();
85+
return true;
8586
}
8687

87-
void ChaseMovementGenerator::Reset(Unit* owner)
88+
bool ChaseMovementGenerator::Reset(Unit* owner)
8889
{
8990
RemoveFlag(MOVEMENTGENERATOR_FLAG_DEACTIVATED);
9091

src/server/game/Movement/MovementGenerators/ChaseMovementGenerator.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,8 @@ class ChaseMovementGenerator : public MovementGenerator, public AbstractFollower
3434
explicit ChaseMovementGenerator(Unit* target, Optional<ChaseRange> range = {}, Optional<ChaseAngle> angle = {});
3535
~ChaseMovementGenerator();
3636

37-
void Initialize(Unit*) override;
38-
void Reset(Unit*) override;
37+
bool Initialize(Unit*) override;
38+
bool Reset(Unit*) override;
3939
bool Update(Unit*, uint32) override;
4040
void Deactivate(Unit*) override;
4141
void Finalize(Unit*, bool, bool) override;

src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -40,13 +40,13 @@ MovementGeneratorType ConfusedMovementGenerator<T>::GetMovementGeneratorType() c
4040
}
4141

4242
template<class T>
43-
void ConfusedMovementGenerator<T>::DoInitialize(T* owner)
43+
bool ConfusedMovementGenerator<T>::DoInitialize(T* owner)
4444
{
4545
MovementGenerator::RemoveFlag(MOVEMENTGENERATOR_FLAG_INITIALIZATION_PENDING | MOVEMENTGENERATOR_FLAG_TRANSITORY | MOVEMENTGENERATOR_FLAG_DEACTIVATED);
4646
MovementGenerator::AddFlag(MOVEMENTGENERATOR_FLAG_INITIALIZED);
4747

4848
if (!owner || !owner->IsAlive())
49-
return;
49+
return false;
5050

5151
// TODO: UNIT_FIELD_FLAGS should not be handled by generators
5252
owner->SetUnitFlag(UNIT_FLAG_CONFUSED);
@@ -55,14 +55,15 @@ void ConfusedMovementGenerator<T>::DoInitialize(T* owner)
5555
_timer.Reset(0);
5656
owner->GetPosition(_x, _y, _z);
5757
_path = nullptr;
58+
return true;
5859
}
5960

6061
template<class T>
61-
void ConfusedMovementGenerator<T>::DoReset(T* owner)
62+
bool ConfusedMovementGenerator<T>::DoReset(T* owner)
6263
{
6364
MovementGenerator::RemoveFlag(MOVEMENTGENERATOR_FLAG_TRANSITORY | MOVEMENTGENERATOR_FLAG_DEACTIVATED);
6465

65-
DoInitialize(owner);
66+
return DoInitialize(owner);
6667
}
6768

6869
template<class T>
@@ -167,10 +168,10 @@ template ConfusedMovementGenerator<Player>::ConfusedMovementGenerator();
167168
template ConfusedMovementGenerator<Creature>::ConfusedMovementGenerator();
168169
template MovementGeneratorType ConfusedMovementGenerator<Player>::GetMovementGeneratorType() const;
169170
template MovementGeneratorType ConfusedMovementGenerator<Creature>::GetMovementGeneratorType() const;
170-
template void ConfusedMovementGenerator<Player>::DoInitialize(Player*);
171-
template void ConfusedMovementGenerator<Creature>::DoInitialize(Creature*);
172-
template void ConfusedMovementGenerator<Player>::DoReset(Player*);
173-
template void ConfusedMovementGenerator<Creature>::DoReset(Creature*);
171+
template bool ConfusedMovementGenerator<Player>::DoInitialize(Player*);
172+
template bool ConfusedMovementGenerator<Creature>::DoInitialize(Creature*);
173+
template bool ConfusedMovementGenerator<Player>::DoReset(Player*);
174+
template bool ConfusedMovementGenerator<Creature>::DoReset(Creature*);
174175
template bool ConfusedMovementGenerator<Player>::DoUpdate(Player*, uint32);
175176
template bool ConfusedMovementGenerator<Creature>::DoUpdate(Creature*, uint32);
176177
template void ConfusedMovementGenerator<Player>::DoDeactivate(Player*);

src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@ class ConfusedMovementGenerator : public MovementGeneratorMedium<T, ConfusedMove
3131

3232
MovementGeneratorType GetMovementGeneratorType() const override;
3333

34-
void DoInitialize(T*);
35-
void DoReset(T*);
34+
bool DoInitialize(T*);
35+
bool DoReset(T*);
3636
bool DoUpdate(T*, uint32);
3737
void DoDeactivate(T*);
3838
void DoFinalize(T*, bool, bool);

src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -45,27 +45,28 @@ MovementGeneratorType FleeingMovementGenerator<T>::GetMovementGeneratorType() co
4545
}
4646

4747
template<class T>
48-
void FleeingMovementGenerator<T>::DoInitialize(T* owner)
48+
bool FleeingMovementGenerator<T>::DoInitialize(T* owner)
4949
{
5050
MovementGenerator::RemoveFlag(MOVEMENTGENERATOR_FLAG_INITIALIZATION_PENDING | MOVEMENTGENERATOR_FLAG_TRANSITORY | MOVEMENTGENERATOR_FLAG_DEACTIVATED);
5151
MovementGenerator::AddFlag(MOVEMENTGENERATOR_FLAG_INITIALIZED);
5252

5353
if (!owner || !owner->IsAlive())
54-
return;
54+
return false;
5555

5656
// TODO: UNIT_FIELD_FLAGS should not be handled by generators
5757
owner->SetUnitFlag(UNIT_FLAG_FLEEING);
5858

5959
_path = nullptr;
6060
SetTargetLocation(owner);
61+
return true;
6162
}
6263

6364
template<class T>
64-
void FleeingMovementGenerator<T>::DoReset(T* owner)
65+
bool FleeingMovementGenerator<T>::DoReset(T* owner)
6566
{
6667
MovementGenerator::RemoveFlag(MOVEMENTGENERATOR_FLAG_TRANSITORY | MOVEMENTGENERATOR_FLAG_DEACTIVATED);
6768

68-
DoInitialize(owner);
69+
return DoInitialize(owner);
6970
}
7071

7172
template<class T>
@@ -223,10 +224,10 @@ template FleeingMovementGenerator<Player>::FleeingMovementGenerator(ObjectGuid);
223224
template FleeingMovementGenerator<Creature>::FleeingMovementGenerator(ObjectGuid);
224225
template MovementGeneratorType FleeingMovementGenerator<Player>::GetMovementGeneratorType() const;
225226
template MovementGeneratorType FleeingMovementGenerator<Creature>::GetMovementGeneratorType() const;
226-
template void FleeingMovementGenerator<Player>::DoInitialize(Player*);
227-
template void FleeingMovementGenerator<Creature>::DoInitialize(Creature*);
228-
template void FleeingMovementGenerator<Player>::DoReset(Player*);
229-
template void FleeingMovementGenerator<Creature>::DoReset(Creature*);
227+
template bool FleeingMovementGenerator<Player>::DoInitialize(Player*);
228+
template bool FleeingMovementGenerator<Creature>::DoInitialize(Creature*);
229+
template bool FleeingMovementGenerator<Player>::DoReset(Player*);
230+
template bool FleeingMovementGenerator<Creature>::DoReset(Creature*);
230231
template bool FleeingMovementGenerator<Player>::DoUpdate(Player*, uint32);
231232
template bool FleeingMovementGenerator<Creature>::DoUpdate(Creature*, uint32);
232233
template void FleeingMovementGenerator<Player>::DoDeactivate(Player*);

src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,8 @@ class FleeingMovementGenerator : public MovementGeneratorMedium<T, FleeingMoveme
3434

3535
MovementGeneratorType GetMovementGeneratorType() const override;
3636

37-
void DoInitialize(T*);
38-
void DoReset(T*);
37+
bool DoInitialize(T*);
38+
bool DoReset(T*);
3939
bool DoUpdate(T*, uint32);
4040
void DoDeactivate(T*);
4141
void DoFinalize(T*, bool, bool);

src/server/game/Movement/MovementGenerators/FlightPathMovementGenerator.cpp

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -58,16 +58,17 @@ bool FlightPathMovementGenerator::GetResetPosition(Unit* /*owner*/, float& x, fl
5858
return true;
5959
}
6060

61-
void FlightPathMovementGenerator::DoInitialize(Player* owner)
61+
bool FlightPathMovementGenerator::DoInitialize(Player* owner)
6262
{
6363
RemoveFlag(MOVEMENTGENERATOR_FLAG_INITIALIZATION_PENDING | MOVEMENTGENERATOR_FLAG_DEACTIVATED);
6464
AddFlag(MOVEMENTGENERATOR_FLAG_INITIALIZED);
6565

66-
DoReset(owner);
66+
bool returnValue = DoReset(owner);
6767
InitEndGridInfo();
68+
return returnValue;
6869
}
6970

70-
void FlightPathMovementGenerator::DoReset(Player* owner)
71+
bool FlightPathMovementGenerator::DoReset(Player* owner)
7172
{
7273
RemoveFlag(MOVEMENTGENERATOR_FLAG_DEACTIVATED);
7374

@@ -80,7 +81,7 @@ void FlightPathMovementGenerator::DoReset(Player* owner)
8081
if (currentNodeId == end)
8182
{
8283
TC_LOG_DEBUG("movement.flightpath", "FlightPathMovementGenerator::DoReset: trying to start a flypath from the end point. {}", owner->GetDebugInfo());
83-
return;
84+
return false;
8485
}
8586

8687
Movement::MoveSplineInit init(owner);
@@ -95,6 +96,7 @@ void FlightPathMovementGenerator::DoReset(Player* owner)
9596
init.SetFly();
9697
init.SetVelocity(PLAYER_FLIGHT_SPEED);
9798
init.Launch();
99+
return true;
98100
}
99101

100102
bool FlightPathMovementGenerator::DoUpdate(Player* owner, uint32 /*diff*/)

src/server/game/Movement/MovementGenerators/FlightPathMovementGenerator.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,8 @@ class FlightPathMovementGenerator : public MovementGeneratorMedium<Player, Fligh
3737
MovementGeneratorType GetMovementGeneratorType() const override;
3838
bool GetResetPosition(Unit* owner, float& x, float& y, float& z) override;
3939

40-
void DoInitialize(Player*);
41-
void DoReset(Player*);
40+
bool DoInitialize(Player*);
41+
bool DoReset(Player*);
4242
bool DoUpdate(Player*, uint32);
4343
void DoDeactivate(Player*);
4444
void DoFinalize(Player*, bool, bool);

0 commit comments

Comments
 (0)