mirror of
https://github.com/mangosfour/server.git
synced 2025-12-13 22:37:03 +00:00
[9188] Implement MoveGen::Interrupt call.
It can be used in time when need do some tasks before another movement generator add on top to motion stack. This just finish pair Interrupt->Reset similar Initilize->Finilize In general movementgenerator have states: Initilize=>Interrupt<=>[-some addition movegen->]<=>Reset=>Finalize
This commit is contained in:
parent
cc062f16ac
commit
132b1cbabd
14 changed files with 61 additions and 24 deletions
|
|
@ -86,8 +86,12 @@ ConfusedMovementGenerator<Player>::_InitSpecific(Player &, bool &is_water_ok, bo
|
|||
}
|
||||
|
||||
template<class T>
|
||||
void
|
||||
ConfusedMovementGenerator<T>::Reset(T &unit)
|
||||
void ConfusedMovementGenerator<T>::Interrupt(T &unit)
|
||||
{
|
||||
}
|
||||
|
||||
template<class T>
|
||||
void ConfusedMovementGenerator<T>::Reset(T &unit)
|
||||
{
|
||||
i_nextMove = 1;
|
||||
i_nextMoveTime.Reset(0);
|
||||
|
|
@ -96,8 +100,7 @@ ConfusedMovementGenerator<T>::Reset(T &unit)
|
|||
}
|
||||
|
||||
template<class T>
|
||||
bool
|
||||
ConfusedMovementGenerator<T>::Update(T &unit, const uint32 &diff)
|
||||
bool ConfusedMovementGenerator<T>::Update(T &unit, const uint32 &diff)
|
||||
{
|
||||
if(!&unit)
|
||||
return true;
|
||||
|
|
@ -154,6 +157,8 @@ void ConfusedMovementGenerator<Creature>::Finalize(Creature &unit)
|
|||
|
||||
template void ConfusedMovementGenerator<Player>::Initialize(Player &player);
|
||||
template void ConfusedMovementGenerator<Creature>::Initialize(Creature &creature);
|
||||
template void ConfusedMovementGenerator<Player>::Interrupt(Player &player);
|
||||
template void ConfusedMovementGenerator<Creature>::Interrupt(Creature &creature);
|
||||
template void ConfusedMovementGenerator<Player>::Reset(Player &player);
|
||||
template void ConfusedMovementGenerator<Creature>::Reset(Creature &creature);
|
||||
template bool ConfusedMovementGenerator<Player>::Update(Player &player, const uint32 &diff);
|
||||
|
|
|
|||
|
|
@ -34,6 +34,7 @@ class MANGOS_DLL_SPEC ConfusedMovementGenerator
|
|||
|
||||
void Initialize(T &);
|
||||
void Finalize(T &);
|
||||
void Interrupt(T &);
|
||||
void Reset(T &);
|
||||
bool Update(T &, const uint32 &);
|
||||
|
||||
|
|
|
|||
|
|
@ -341,15 +341,18 @@ void FleeingMovementGenerator<Creature>::Finalize(Creature &owner)
|
|||
}
|
||||
|
||||
template<class T>
|
||||
void
|
||||
FleeingMovementGenerator<T>::Reset(T &owner)
|
||||
void FleeingMovementGenerator<T>::Interrupt(T &owner)
|
||||
{
|
||||
}
|
||||
|
||||
template<class T>
|
||||
void FleeingMovementGenerator<T>::Reset(T &owner)
|
||||
{
|
||||
Initialize(owner);
|
||||
}
|
||||
|
||||
template<class T>
|
||||
bool
|
||||
FleeingMovementGenerator<T>::Update(T &owner, const uint32 & time_diff)
|
||||
bool FleeingMovementGenerator<T>::Update(T &owner, const uint32 & time_diff)
|
||||
{
|
||||
if( !&owner || !owner.isAlive() )
|
||||
return false;
|
||||
|
|
@ -386,6 +389,8 @@ template bool FleeingMovementGenerator<Player>::_getPoint(Player &, float &, flo
|
|||
template bool FleeingMovementGenerator<Creature>::_getPoint(Creature &, float &, float &, float &);
|
||||
template void FleeingMovementGenerator<Player>::_setTargetLocation(Player &);
|
||||
template void FleeingMovementGenerator<Creature>::_setTargetLocation(Creature &);
|
||||
template void FleeingMovementGenerator<Player>::Interrupt(Player &);
|
||||
template void FleeingMovementGenerator<Creature>::Interrupt(Creature &);
|
||||
template void FleeingMovementGenerator<Player>::Reset(Player &);
|
||||
template void FleeingMovementGenerator<Creature>::Reset(Creature &);
|
||||
template bool FleeingMovementGenerator<Player>::Update(Player &, const uint32 &);
|
||||
|
|
|
|||
|
|
@ -32,6 +32,7 @@ class MANGOS_DLL_SPEC FleeingMovementGenerator
|
|||
|
||||
void Initialize(T &);
|
||||
void Finalize(T &);
|
||||
void Interrupt(T &);
|
||||
void Reset(T &);
|
||||
bool Update(T &, const uint32 &);
|
||||
|
||||
|
|
|
|||
|
|
@ -39,6 +39,7 @@ class MANGOS_DLL_SPEC HomeMovementGenerator<Creature>
|
|||
|
||||
void Initialize(Creature &);
|
||||
void Finalize(Creature &) {}
|
||||
void Interrupt(Creature &) {}
|
||||
void Reset(Creature &);
|
||||
bool Update(Creature &, const uint32 &);
|
||||
void modifyTravelTime(uint32 travel_time) { i_travel_timer = travel_time; }
|
||||
|
|
|
|||
|
|
@ -25,8 +25,9 @@ class MANGOS_DLL_SPEC IdleMovementGenerator : public MovementGenerator
|
|||
{
|
||||
public:
|
||||
|
||||
void Initialize(Unit &) { }
|
||||
void Finalize(Unit &) { }
|
||||
void Initialize(Unit &) {}
|
||||
void Finalize(Unit &) {}
|
||||
void Interrupt(Unit &) {}
|
||||
void Reset(Unit &);
|
||||
bool Update(Unit &, const uint32 &) { return true; }
|
||||
MovementGeneratorType GetMovementGeneratorType() { return IDLE_MOTION_TYPE; }
|
||||
|
|
@ -41,6 +42,7 @@ class MANGOS_DLL_SPEC DistractMovementGenerator : public MovementGenerator
|
|||
|
||||
void Initialize(Unit& owner);
|
||||
void Finalize(Unit& owner);
|
||||
void Interrupt(Unit& ) {}
|
||||
void Reset(Unit& owner) { Initialize(owner); }
|
||||
bool Update(Unit& owner, const uint32& time_diff);
|
||||
MovementGeneratorType GetMovementGeneratorType() { return DISTRACT_MOTION_TYPE; }
|
||||
|
|
|
|||
|
|
@ -434,6 +434,9 @@ void MotionMaster::Mutate(MovementGenerator *m)
|
|||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (!empty())
|
||||
top()->Interrupt(*i_owner);
|
||||
}
|
||||
m->Initialize(*i_owner);
|
||||
push(m);
|
||||
|
|
|
|||
|
|
@ -33,9 +33,14 @@ class MANGOS_DLL_SPEC MovementGenerator
|
|||
public:
|
||||
virtual ~MovementGenerator();
|
||||
|
||||
// called before adding movement generator to motion stack
|
||||
virtual void Initialize(Unit &) = 0;
|
||||
// called aftre remove movement generator from motion stack
|
||||
virtual void Finalize(Unit &) = 0;
|
||||
|
||||
// called before lost top position (before push new movement generator above)
|
||||
virtual void Interrupt(Unit &) = 0;
|
||||
// called after return movement generator to top position (after remove above movement generator)
|
||||
virtual void Reset(Unit &) = 0;
|
||||
|
||||
virtual bool Update(Unit &, const uint32 &time_diff) = 0;
|
||||
|
|
@ -63,6 +68,11 @@ class MANGOS_DLL_SPEC MovementGeneratorMedium : public MovementGenerator
|
|||
//u->AssertIsType<T>();
|
||||
(static_cast<D*>(this))->Finalize(*((T*)&u));
|
||||
}
|
||||
void Interrupt(Unit &u)
|
||||
{
|
||||
//u->AssertIsType<T>();
|
||||
(static_cast<D*>(this))->Interrupt(*((T*)&u));
|
||||
}
|
||||
void Reset(Unit &u)
|
||||
{
|
||||
//u->AssertIsType<T>();
|
||||
|
|
@ -77,6 +87,7 @@ class MANGOS_DLL_SPEC MovementGeneratorMedium : public MovementGenerator
|
|||
// will not link if not overridden in the generators
|
||||
void Initialize(T &u);
|
||||
void Finalize(T &u);
|
||||
void Interrupt(T &u);
|
||||
void Reset(T &u);
|
||||
bool Update(T &u, const uint32 &time_diff);
|
||||
};
|
||||
|
|
|
|||
|
|
@ -34,7 +34,8 @@ class MANGOS_DLL_SPEC PointMovementGenerator
|
|||
|
||||
void Initialize(T &);
|
||||
void Finalize(T &){}
|
||||
void Reset(T &unit){unit.StopMoving();}
|
||||
void Interrupt(T &) {}
|
||||
void Reset(T &unit){ unit.StopMoving(); }
|
||||
bool Update(T &, const uint32 &diff);
|
||||
|
||||
void MovementInform(T &);
|
||||
|
|
|
|||
|
|
@ -33,6 +33,7 @@ class MANGOS_DLL_SPEC RandomMovementGenerator
|
|||
void _setRandomLocation(T &);
|
||||
void Initialize(T &);
|
||||
void Finalize(T &) {}
|
||||
void Interrupt(T &) {}
|
||||
void Reset(T &);
|
||||
bool Update(T &, const uint32 &);
|
||||
void UpdateMapPosition(uint32 mapid, float &x ,float &y, float &z)
|
||||
|
|
|
|||
|
|
@ -88,6 +88,12 @@ TargetedMovementGenerator<T>::_setTargetLocation(T &owner)
|
|||
((Creature&)owner).AddMonsterMoveFlag(MONSTER_MOVE_FLY);
|
||||
}
|
||||
|
||||
template<>
|
||||
void TargetedMovementGenerator<Player>::Initialize(Player &owner)
|
||||
{
|
||||
_setTargetLocation(owner);
|
||||
}
|
||||
|
||||
template<>
|
||||
void TargetedMovementGenerator<Creature>::Initialize(Creature &owner)
|
||||
{
|
||||
|
|
@ -113,29 +119,25 @@ void TargetedMovementGenerator<Creature>::UpdateFinalDistance(float fDistance)
|
|||
i_recalculateTravel = true;
|
||||
}
|
||||
|
||||
template<>
|
||||
void TargetedMovementGenerator<Player>::Initialize(Player &owner)
|
||||
template<class T>
|
||||
void TargetedMovementGenerator<T>::Finalize(T &owner)
|
||||
{
|
||||
_setTargetLocation(owner);
|
||||
owner.clearUnitState(UNIT_STAT_CHASE | UNIT_STAT_FOLLOW);
|
||||
}
|
||||
|
||||
template<class T>
|
||||
void
|
||||
TargetedMovementGenerator<T>::Finalize(T &owner)
|
||||
void TargetedMovementGenerator<T>::Interrupt(T &owner)
|
||||
{
|
||||
owner.clearUnitState(UNIT_STAT_CHASE);
|
||||
}
|
||||
|
||||
template<class T>
|
||||
void
|
||||
TargetedMovementGenerator<T>::Reset(T &owner)
|
||||
void TargetedMovementGenerator<T>::Reset(T &owner)
|
||||
{
|
||||
Initialize(owner);
|
||||
}
|
||||
|
||||
template<class T>
|
||||
bool
|
||||
TargetedMovementGenerator<T>::Update(T &owner, const uint32 & time_diff)
|
||||
bool TargetedMovementGenerator<T>::Update(T &owner, const uint32 & time_diff)
|
||||
{
|
||||
if (!i_target.isValid() || !i_target->IsInWorld())
|
||||
return false;
|
||||
|
|
@ -207,8 +209,7 @@ TargetedMovementGenerator<T>::Update(T &owner, const uint32 & time_diff)
|
|||
}
|
||||
|
||||
template<class T>
|
||||
Unit*
|
||||
TargetedMovementGenerator<T>::GetTarget() const
|
||||
Unit* TargetedMovementGenerator<T>::GetTarget() const
|
||||
{
|
||||
return i_target.getTarget();
|
||||
}
|
||||
|
|
@ -217,6 +218,8 @@ template void TargetedMovementGenerator<Player>::_setTargetLocation(Player &);
|
|||
template void TargetedMovementGenerator<Creature>::_setTargetLocation(Creature &);
|
||||
template void TargetedMovementGenerator<Player>::Finalize(Player &);
|
||||
template void TargetedMovementGenerator<Creature>::Finalize(Creature &);
|
||||
template void TargetedMovementGenerator<Player>::Interrupt(Player &);
|
||||
template void TargetedMovementGenerator<Creature>::Interrupt(Creature &);
|
||||
template void TargetedMovementGenerator<Player>::Reset(Player &);
|
||||
template void TargetedMovementGenerator<Creature>::Reset(Creature &);
|
||||
template bool TargetedMovementGenerator<Player>::Update(Player &, const uint32 &);
|
||||
|
|
|
|||
|
|
@ -47,6 +47,7 @@ class MANGOS_DLL_SPEC TargetedMovementGenerator
|
|||
|
||||
void Initialize(T &);
|
||||
void Finalize(T &);
|
||||
void Interrupt(T &);
|
||||
void Reset(T &);
|
||||
bool Update(T &, const uint32 &);
|
||||
MovementGeneratorType GetMovementGeneratorType() { return TARGETED_MOTION_TYPE; }
|
||||
|
|
|
|||
|
|
@ -82,6 +82,7 @@ public PathMovementBase<Creature, WaypointPath*>
|
|||
u.StopMoving();
|
||||
LoadPath(u);
|
||||
}
|
||||
void Interrupt(Creature &) {}
|
||||
void Finalize(Creature &) {}
|
||||
void Reset(Creature &u)
|
||||
{
|
||||
|
|
@ -130,6 +131,7 @@ public PathMovementBase<Player>
|
|||
explicit FlightPathMovementGenerator(uint32 id, uint32 startNode = 0) : i_pathId(id) { i_currentNode = startNode; }
|
||||
void Initialize(Player &);
|
||||
void Finalize(Player &);
|
||||
void Interrupt(Player &) {}
|
||||
void Reset(Player &) {}
|
||||
bool Update(Player &, const uint32 &);
|
||||
MovementGeneratorType GetMovementGeneratorType() { return FLIGHT_MOTION_TYPE; }
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
#ifndef __REVISION_NR_H__
|
||||
#define __REVISION_NR_H__
|
||||
#define REVISION_NR "9187"
|
||||
#define REVISION_NR "9188"
|
||||
#endif // __REVISION_NR_H__
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue