diff options
-rw-r--r-- | src/game/PointMovementGenerator.cpp | 16 | ||||
-rw-r--r-- | src/game/PointMovementGenerator.h | 5 |
2 files changed, 15 insertions, 6 deletions
diff --git a/src/game/PointMovementGenerator.cpp b/src/game/PointMovementGenerator.cpp index 4aa21d32d55..6117dbf903d 100644 --- a/src/game/PointMovementGenerator.cpp +++ b/src/game/PointMovementGenerator.cpp @@ -57,9 +57,7 @@ bool PointMovementGenerator<T>::Update(T &unit, const uint32 &diff) if(i_destinationHolder.HasArrived()) { - //unit.StopMoving(); - if(!unit.hasUnitState(UNIT_STAT_CHARGING)) - MovementInform(unit); + arrived = true; return false; } @@ -67,6 +65,15 @@ bool PointMovementGenerator<T>::Update(T &unit, const uint32 &diff) } template<class T> +void PointMovementGenerator<T>:: Finalize(T &unit) +{ + if(unit.hasUnitState(UNIT_STAT_CHARGING)) + unit.clearUnitState(UNIT_STAT_CHARGING); + else if(arrived) + MovementInform(unit); +} + +template<class T> void PointMovementGenerator<T>::MovementInform(T &unit) { } @@ -79,7 +86,8 @@ template <> void PointMovementGenerator<Creature>::MovementInform(Creature &unit template void PointMovementGenerator<Player>::Initialize(Player&); template bool PointMovementGenerator<Player>::Update(Player &, const uint32 &diff); template void PointMovementGenerator<Player>::MovementInform(Player&); +template void PointMovementGenerator<Player>::Finalize(Player&); template void PointMovementGenerator<Creature>::Initialize(Creature&); template bool PointMovementGenerator<Creature>::Update(Creature&, const uint32 &diff); - +template void PointMovementGenerator<Creature>::Finalize(Creature&); diff --git a/src/game/PointMovementGenerator.h b/src/game/PointMovementGenerator.h index 5d0bb4e80e7..5f1bf33c348 100644 --- a/src/game/PointMovementGenerator.h +++ b/src/game/PointMovementGenerator.h @@ -32,10 +32,10 @@ class TRINITY_DLL_SPEC PointMovementGenerator { public: PointMovementGenerator(uint32 _id, float _x, float _y, float _z) : id(_id), - i_x(_x), i_y(_y), i_z(_z), i_nextMoveTime(0) {} + i_x(_x), i_y(_y), i_z(_z), i_nextMoveTime(0), arrived(false) {} void Initialize(T &); - void Finalize(T &unit){unit.clearUnitState(UNIT_STAT_CHARGING);} + void Finalize(T &unit); void Reset(T &unit){unit.StopMoving();} bool Update(T &, const uint32 &diff); @@ -49,6 +49,7 @@ class TRINITY_DLL_SPEC PointMovementGenerator float i_x,i_y,i_z; uint32 id; DestinationHolder< Traveller<T> > i_destinationHolder; + bool arrived; }; #endif |