diff options
Diffstat (limited to 'src/game/PointMovementGenerator.cpp')
-rw-r--r-- | src/game/PointMovementGenerator.cpp | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/src/game/PointMovementGenerator.cpp b/src/game/PointMovementGenerator.cpp index 10f8357ef87..23012f7e170 100644 --- a/src/game/PointMovementGenerator.cpp +++ b/src/game/PointMovementGenerator.cpp @@ -17,12 +17,14 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + #include "PointMovementGenerator.h" #include "Errors.h" #include "Creature.h" #include "CreatureAI.h" #include "DestinationHolderImp.h" #include "World.h" + //----- Point Movement Generator template<class T> void PointMovementGenerator<T>::Initialize(T &unit) @@ -32,11 +34,13 @@ void PointMovementGenerator<T>::Initialize(T &unit) // knockback effect has UNIT_STAT_JUMPING set,so if here we disable sentmonstermove there will be creature position sync problem between client and server i_destinationHolder.SetDestination(traveller,i_x,i_y,i_z, true /* !unit.hasUnitState(UNIT_STAT_JUMPING)*/); } + template<class T> bool PointMovementGenerator<T>::Update(T &unit, const uint32 &diff) { if(!&unit) return false; + if(unit.hasUnitState(UNIT_STAT_ROOT | UNIT_STAT_STUNNED)) { if(unit.hasUnitState(UNIT_STAT_CHARGING)) @@ -44,16 +48,21 @@ bool PointMovementGenerator<T>::Update(T &unit, const uint32 &diff) else return true; } + Traveller<T> traveller(unit); + i_destinationHolder.UpdateTraveller(traveller, diff); + if(i_destinationHolder.HasArrived()) { unit.clearUnitState(UNIT_STAT_MOVE); arrived = true; return false; } + return true; } + template<class T> void PointMovementGenerator<T>:: Finalize(T &unit) { @@ -62,10 +71,12 @@ void PointMovementGenerator<T>:: Finalize(T &unit) if(arrived) // without this crash! MovementInform(unit); } + template<class T> void PointMovementGenerator<T>::MovementInform(T &unit) { } + template <> void PointMovementGenerator<Creature>::MovementInform(Creature &unit) { if(id == EVENT_FALL_GROUND) @@ -75,13 +86,16 @@ template <> void PointMovementGenerator<Creature>::MovementInform(Creature &unit } unit.AI()->MovementInform(POINT_MOTION_TYPE, id); } + 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&); + void AssistanceMovementGenerator::Finalize(Unit &unit) { ((Creature*)&unit)->SetNoCallAssistance(false); |