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>
|
template<class T>
|
||||||
void
|
void ConfusedMovementGenerator<T>::Interrupt(T &unit)
|
||||||
ConfusedMovementGenerator<T>::Reset(T &unit)
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
void ConfusedMovementGenerator<T>::Reset(T &unit)
|
||||||
{
|
{
|
||||||
i_nextMove = 1;
|
i_nextMove = 1;
|
||||||
i_nextMoveTime.Reset(0);
|
i_nextMoveTime.Reset(0);
|
||||||
|
|
@ -96,8 +100,7 @@ ConfusedMovementGenerator<T>::Reset(T &unit)
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class T>
|
template<class T>
|
||||||
bool
|
bool ConfusedMovementGenerator<T>::Update(T &unit, const uint32 &diff)
|
||||||
ConfusedMovementGenerator<T>::Update(T &unit, const uint32 &diff)
|
|
||||||
{
|
{
|
||||||
if(!&unit)
|
if(!&unit)
|
||||||
return true;
|
return true;
|
||||||
|
|
@ -154,6 +157,8 @@ void ConfusedMovementGenerator<Creature>::Finalize(Creature &unit)
|
||||||
|
|
||||||
template void ConfusedMovementGenerator<Player>::Initialize(Player &player);
|
template void ConfusedMovementGenerator<Player>::Initialize(Player &player);
|
||||||
template void ConfusedMovementGenerator<Creature>::Initialize(Creature &creature);
|
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<Player>::Reset(Player &player);
|
||||||
template void ConfusedMovementGenerator<Creature>::Reset(Creature &creature);
|
template void ConfusedMovementGenerator<Creature>::Reset(Creature &creature);
|
||||||
template bool ConfusedMovementGenerator<Player>::Update(Player &player, const uint32 &diff);
|
template bool ConfusedMovementGenerator<Player>::Update(Player &player, const uint32 &diff);
|
||||||
|
|
|
||||||
|
|
@ -34,6 +34,7 @@ class MANGOS_DLL_SPEC ConfusedMovementGenerator
|
||||||
|
|
||||||
void Initialize(T &);
|
void Initialize(T &);
|
||||||
void Finalize(T &);
|
void Finalize(T &);
|
||||||
|
void Interrupt(T &);
|
||||||
void Reset(T &);
|
void Reset(T &);
|
||||||
bool Update(T &, const uint32 &);
|
bool Update(T &, const uint32 &);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -341,15 +341,18 @@ void FleeingMovementGenerator<Creature>::Finalize(Creature &owner)
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class T>
|
template<class T>
|
||||||
void
|
void FleeingMovementGenerator<T>::Interrupt(T &owner)
|
||||||
FleeingMovementGenerator<T>::Reset(T &owner)
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
void FleeingMovementGenerator<T>::Reset(T &owner)
|
||||||
{
|
{
|
||||||
Initialize(owner);
|
Initialize(owner);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class T>
|
template<class T>
|
||||||
bool
|
bool FleeingMovementGenerator<T>::Update(T &owner, const uint32 & time_diff)
|
||||||
FleeingMovementGenerator<T>::Update(T &owner, const uint32 & time_diff)
|
|
||||||
{
|
{
|
||||||
if( !&owner || !owner.isAlive() )
|
if( !&owner || !owner.isAlive() )
|
||||||
return false;
|
return false;
|
||||||
|
|
@ -386,6 +389,8 @@ template bool FleeingMovementGenerator<Player>::_getPoint(Player &, float &, flo
|
||||||
template bool FleeingMovementGenerator<Creature>::_getPoint(Creature &, float &, float &, float &);
|
template bool FleeingMovementGenerator<Creature>::_getPoint(Creature &, float &, float &, float &);
|
||||||
template void FleeingMovementGenerator<Player>::_setTargetLocation(Player &);
|
template void FleeingMovementGenerator<Player>::_setTargetLocation(Player &);
|
||||||
template void FleeingMovementGenerator<Creature>::_setTargetLocation(Creature &);
|
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<Player>::Reset(Player &);
|
||||||
template void FleeingMovementGenerator<Creature>::Reset(Creature &);
|
template void FleeingMovementGenerator<Creature>::Reset(Creature &);
|
||||||
template bool FleeingMovementGenerator<Player>::Update(Player &, const uint32 &);
|
template bool FleeingMovementGenerator<Player>::Update(Player &, const uint32 &);
|
||||||
|
|
|
||||||
|
|
@ -32,6 +32,7 @@ class MANGOS_DLL_SPEC FleeingMovementGenerator
|
||||||
|
|
||||||
void Initialize(T &);
|
void Initialize(T &);
|
||||||
void Finalize(T &);
|
void Finalize(T &);
|
||||||
|
void Interrupt(T &);
|
||||||
void Reset(T &);
|
void Reset(T &);
|
||||||
bool Update(T &, const uint32 &);
|
bool Update(T &, const uint32 &);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -39,6 +39,7 @@ class MANGOS_DLL_SPEC HomeMovementGenerator<Creature>
|
||||||
|
|
||||||
void Initialize(Creature &);
|
void Initialize(Creature &);
|
||||||
void Finalize(Creature &) {}
|
void Finalize(Creature &) {}
|
||||||
|
void Interrupt(Creature &) {}
|
||||||
void Reset(Creature &);
|
void Reset(Creature &);
|
||||||
bool Update(Creature &, const uint32 &);
|
bool Update(Creature &, const uint32 &);
|
||||||
void modifyTravelTime(uint32 travel_time) { i_travel_timer = travel_time; }
|
void modifyTravelTime(uint32 travel_time) { i_travel_timer = travel_time; }
|
||||||
|
|
|
||||||
|
|
@ -25,8 +25,9 @@ class MANGOS_DLL_SPEC IdleMovementGenerator : public MovementGenerator
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
void Initialize(Unit &) { }
|
void Initialize(Unit &) {}
|
||||||
void Finalize(Unit &) { }
|
void Finalize(Unit &) {}
|
||||||
|
void Interrupt(Unit &) {}
|
||||||
void Reset(Unit &);
|
void Reset(Unit &);
|
||||||
bool Update(Unit &, const uint32 &) { return true; }
|
bool Update(Unit &, const uint32 &) { return true; }
|
||||||
MovementGeneratorType GetMovementGeneratorType() { return IDLE_MOTION_TYPE; }
|
MovementGeneratorType GetMovementGeneratorType() { return IDLE_MOTION_TYPE; }
|
||||||
|
|
@ -41,6 +42,7 @@ class MANGOS_DLL_SPEC DistractMovementGenerator : public MovementGenerator
|
||||||
|
|
||||||
void Initialize(Unit& owner);
|
void Initialize(Unit& owner);
|
||||||
void Finalize(Unit& owner);
|
void Finalize(Unit& owner);
|
||||||
|
void Interrupt(Unit& ) {}
|
||||||
void Reset(Unit& owner) { Initialize(owner); }
|
void Reset(Unit& owner) { Initialize(owner); }
|
||||||
bool Update(Unit& owner, const uint32& time_diff);
|
bool Update(Unit& owner, const uint32& time_diff);
|
||||||
MovementGeneratorType GetMovementGeneratorType() { return DISTRACT_MOTION_TYPE; }
|
MovementGeneratorType GetMovementGeneratorType() { return DISTRACT_MOTION_TYPE; }
|
||||||
|
|
|
||||||
|
|
@ -434,6 +434,9 @@ void MotionMaster::Mutate(MovementGenerator *m)
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!empty())
|
||||||
|
top()->Interrupt(*i_owner);
|
||||||
}
|
}
|
||||||
m->Initialize(*i_owner);
|
m->Initialize(*i_owner);
|
||||||
push(m);
|
push(m);
|
||||||
|
|
|
||||||
|
|
@ -33,9 +33,14 @@ class MANGOS_DLL_SPEC MovementGenerator
|
||||||
public:
|
public:
|
||||||
virtual ~MovementGenerator();
|
virtual ~MovementGenerator();
|
||||||
|
|
||||||
|
// called before adding movement generator to motion stack
|
||||||
virtual void Initialize(Unit &) = 0;
|
virtual void Initialize(Unit &) = 0;
|
||||||
|
// called aftre remove movement generator from motion stack
|
||||||
virtual void Finalize(Unit &) = 0;
|
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 void Reset(Unit &) = 0;
|
||||||
|
|
||||||
virtual bool Update(Unit &, const uint32 &time_diff) = 0;
|
virtual bool Update(Unit &, const uint32 &time_diff) = 0;
|
||||||
|
|
@ -63,6 +68,11 @@ class MANGOS_DLL_SPEC MovementGeneratorMedium : public MovementGenerator
|
||||||
//u->AssertIsType<T>();
|
//u->AssertIsType<T>();
|
||||||
(static_cast<D*>(this))->Finalize(*((T*)&u));
|
(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)
|
void Reset(Unit &u)
|
||||||
{
|
{
|
||||||
//u->AssertIsType<T>();
|
//u->AssertIsType<T>();
|
||||||
|
|
@ -77,6 +87,7 @@ class MANGOS_DLL_SPEC MovementGeneratorMedium : public MovementGenerator
|
||||||
// will not link if not overridden in the generators
|
// will not link if not overridden in the generators
|
||||||
void Initialize(T &u);
|
void Initialize(T &u);
|
||||||
void Finalize(T &u);
|
void Finalize(T &u);
|
||||||
|
void Interrupt(T &u);
|
||||||
void Reset(T &u);
|
void Reset(T &u);
|
||||||
bool Update(T &u, const uint32 &time_diff);
|
bool Update(T &u, const uint32 &time_diff);
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -34,7 +34,8 @@ class MANGOS_DLL_SPEC PointMovementGenerator
|
||||||
|
|
||||||
void Initialize(T &);
|
void Initialize(T &);
|
||||||
void Finalize(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);
|
bool Update(T &, const uint32 &diff);
|
||||||
|
|
||||||
void MovementInform(T &);
|
void MovementInform(T &);
|
||||||
|
|
|
||||||
|
|
@ -33,6 +33,7 @@ class MANGOS_DLL_SPEC RandomMovementGenerator
|
||||||
void _setRandomLocation(T &);
|
void _setRandomLocation(T &);
|
||||||
void Initialize(T &);
|
void Initialize(T &);
|
||||||
void Finalize(T &) {}
|
void Finalize(T &) {}
|
||||||
|
void Interrupt(T &) {}
|
||||||
void Reset(T &);
|
void Reset(T &);
|
||||||
bool Update(T &, const uint32 &);
|
bool Update(T &, const uint32 &);
|
||||||
void UpdateMapPosition(uint32 mapid, float &x ,float &y, float &z)
|
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);
|
((Creature&)owner).AddMonsterMoveFlag(MONSTER_MOVE_FLY);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<>
|
||||||
|
void TargetedMovementGenerator<Player>::Initialize(Player &owner)
|
||||||
|
{
|
||||||
|
_setTargetLocation(owner);
|
||||||
|
}
|
||||||
|
|
||||||
template<>
|
template<>
|
||||||
void TargetedMovementGenerator<Creature>::Initialize(Creature &owner)
|
void TargetedMovementGenerator<Creature>::Initialize(Creature &owner)
|
||||||
{
|
{
|
||||||
|
|
@ -113,29 +119,25 @@ void TargetedMovementGenerator<Creature>::UpdateFinalDistance(float fDistance)
|
||||||
i_recalculateTravel = true;
|
i_recalculateTravel = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
template<>
|
template<class T>
|
||||||
void TargetedMovementGenerator<Player>::Initialize(Player &owner)
|
void TargetedMovementGenerator<T>::Finalize(T &owner)
|
||||||
{
|
{
|
||||||
_setTargetLocation(owner);
|
owner.clearUnitState(UNIT_STAT_CHASE | UNIT_STAT_FOLLOW);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class T>
|
template<class T>
|
||||||
void
|
void TargetedMovementGenerator<T>::Interrupt(T &owner)
|
||||||
TargetedMovementGenerator<T>::Finalize(T &owner)
|
|
||||||
{
|
{
|
||||||
owner.clearUnitState(UNIT_STAT_CHASE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class T>
|
template<class T>
|
||||||
void
|
void TargetedMovementGenerator<T>::Reset(T &owner)
|
||||||
TargetedMovementGenerator<T>::Reset(T &owner)
|
|
||||||
{
|
{
|
||||||
Initialize(owner);
|
Initialize(owner);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class T>
|
template<class T>
|
||||||
bool
|
bool TargetedMovementGenerator<T>::Update(T &owner, const uint32 & time_diff)
|
||||||
TargetedMovementGenerator<T>::Update(T &owner, const uint32 & time_diff)
|
|
||||||
{
|
{
|
||||||
if (!i_target.isValid() || !i_target->IsInWorld())
|
if (!i_target.isValid() || !i_target->IsInWorld())
|
||||||
return false;
|
return false;
|
||||||
|
|
@ -207,8 +209,7 @@ TargetedMovementGenerator<T>::Update(T &owner, const uint32 & time_diff)
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class T>
|
template<class T>
|
||||||
Unit*
|
Unit* TargetedMovementGenerator<T>::GetTarget() const
|
||||||
TargetedMovementGenerator<T>::GetTarget() const
|
|
||||||
{
|
{
|
||||||
return i_target.getTarget();
|
return i_target.getTarget();
|
||||||
}
|
}
|
||||||
|
|
@ -217,6 +218,8 @@ template void TargetedMovementGenerator<Player>::_setTargetLocation(Player &);
|
||||||
template void TargetedMovementGenerator<Creature>::_setTargetLocation(Creature &);
|
template void TargetedMovementGenerator<Creature>::_setTargetLocation(Creature &);
|
||||||
template void TargetedMovementGenerator<Player>::Finalize(Player &);
|
template void TargetedMovementGenerator<Player>::Finalize(Player &);
|
||||||
template void TargetedMovementGenerator<Creature>::Finalize(Creature &);
|
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<Player>::Reset(Player &);
|
||||||
template void TargetedMovementGenerator<Creature>::Reset(Creature &);
|
template void TargetedMovementGenerator<Creature>::Reset(Creature &);
|
||||||
template bool TargetedMovementGenerator<Player>::Update(Player &, const uint32 &);
|
template bool TargetedMovementGenerator<Player>::Update(Player &, const uint32 &);
|
||||||
|
|
|
||||||
|
|
@ -47,6 +47,7 @@ class MANGOS_DLL_SPEC TargetedMovementGenerator
|
||||||
|
|
||||||
void Initialize(T &);
|
void Initialize(T &);
|
||||||
void Finalize(T &);
|
void Finalize(T &);
|
||||||
|
void Interrupt(T &);
|
||||||
void Reset(T &);
|
void Reset(T &);
|
||||||
bool Update(T &, const uint32 &);
|
bool Update(T &, const uint32 &);
|
||||||
MovementGeneratorType GetMovementGeneratorType() { return TARGETED_MOTION_TYPE; }
|
MovementGeneratorType GetMovementGeneratorType() { return TARGETED_MOTION_TYPE; }
|
||||||
|
|
|
||||||
|
|
@ -82,6 +82,7 @@ public PathMovementBase<Creature, WaypointPath*>
|
||||||
u.StopMoving();
|
u.StopMoving();
|
||||||
LoadPath(u);
|
LoadPath(u);
|
||||||
}
|
}
|
||||||
|
void Interrupt(Creature &) {}
|
||||||
void Finalize(Creature &) {}
|
void Finalize(Creature &) {}
|
||||||
void Reset(Creature &u)
|
void Reset(Creature &u)
|
||||||
{
|
{
|
||||||
|
|
@ -130,6 +131,7 @@ public PathMovementBase<Player>
|
||||||
explicit FlightPathMovementGenerator(uint32 id, uint32 startNode = 0) : i_pathId(id) { i_currentNode = startNode; }
|
explicit FlightPathMovementGenerator(uint32 id, uint32 startNode = 0) : i_pathId(id) { i_currentNode = startNode; }
|
||||||
void Initialize(Player &);
|
void Initialize(Player &);
|
||||||
void Finalize(Player &);
|
void Finalize(Player &);
|
||||||
|
void Interrupt(Player &) {}
|
||||||
void Reset(Player &) {}
|
void Reset(Player &) {}
|
||||||
bool Update(Player &, const uint32 &);
|
bool Update(Player &, const uint32 &);
|
||||||
MovementGeneratorType GetMovementGeneratorType() { return FLIGHT_MOTION_TYPE; }
|
MovementGeneratorType GetMovementGeneratorType() { return FLIGHT_MOTION_TYPE; }
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
#ifndef __REVISION_NR_H__
|
#ifndef __REVISION_NR_H__
|
||||||
#define __REVISION_NR_H__
|
#define __REVISION_NR_H__
|
||||||
#define REVISION_NR "9187"
|
#define REVISION_NR "9188"
|
||||||
#endif // __REVISION_NR_H__
|
#endif // __REVISION_NR_H__
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue