diff --git a/src/server/game/Movement/MotionMaster.cpp b/src/server/game/Movement/MotionMaster.cpp index f76c79696fe..4c508a38b59 100644 --- a/src/server/game/Movement/MotionMaster.cpp +++ b/src/server/game/Movement/MotionMaster.cpp @@ -97,7 +97,7 @@ void MotionMaster::Initialize() { if (HasFlag(MOTIONMASTER_FLAG_UPDATE)) { - std::function action = [this]() + DelayedActionDefine action = [this]() { Initialize(); }; @@ -324,7 +324,7 @@ void MotionMaster::Add(MovementGenerator* movement, MovementSlot slot/* = MOTION if (HasFlag(MOTIONMASTER_FLAG_UPDATE)) { - std::function action = [this, movement, slot]() + DelayedActionDefine action = [this, movement, slot]() { Add(movement, slot); }; @@ -341,7 +341,7 @@ void MotionMaster::Remove(MovementGenerator* movement, MovementSlot slot/* = MOT if (HasFlag(MOTIONMASTER_FLAG_UPDATE)) { - std::function action = [this, movement, slot]() + DelayedActionDefine action = [this, movement, slot]() { Remove(movement, slot); }; @@ -379,7 +379,7 @@ void MotionMaster::Remove(MovementGeneratorType type, MovementSlot slot/* = MOTI if (HasFlag(MOTIONMASTER_FLAG_UPDATE)) { - std::function action = [this, type, slot]() + DelayedActionDefine action = [this, type, slot]() { Remove(type, slot); }; @@ -417,7 +417,7 @@ void MotionMaster::Clear() { if (HasFlag(MOTIONMASTER_FLAG_UPDATE)) { - std::function action = [this]() + DelayedActionDefine action = [this]() { Clear(); }; @@ -436,7 +436,7 @@ void MotionMaster::Clear(MovementSlot slot) if (HasFlag(MOTIONMASTER_FLAG_UPDATE)) { - std::function action = [this, slot]() + DelayedActionDefine action = [this, slot]() { Clear(slot); }; @@ -464,7 +464,7 @@ void MotionMaster::Clear(MovementGeneratorMode mode) { if (HasFlag(MOTIONMASTER_FLAG_UPDATE)) { - std::function action = [this, mode]() + DelayedActionDefine action = [this, mode]() { Clear(mode); }; @@ -486,7 +486,7 @@ void MotionMaster::Clear(MovementGeneratorPriority priority) { if (HasFlag(MOTIONMASTER_FLAG_UPDATE)) { - std::function action = [this, priority]() + DelayedActionDefine action = [this, priority]() { Clear(priority); }; diff --git a/src/server/game/Movement/MotionMaster.h b/src/server/game/Movement/MotionMaster.h index 5d2b6164095..65f4dcbc540 100644 --- a/src/server/game/Movement/MotionMaster.h +++ b/src/server/game/Movement/MotionMaster.h @@ -87,23 +87,26 @@ static bool EmptyValidator() return true; } -class MotionMasterDelayedAction -{ - public: - explicit MotionMasterDelayedAction(std::function&& action, std::function&& validator, MotionMasterDelayedActionType type) : Action(std::move(action)), Validator(std::move(validator)), Type(type) { } - explicit MotionMasterDelayedAction(std::function&& action, MotionMasterDelayedActionType type) : Action(std::move(action)), Validator(EmptyValidator), Type(type) { } - ~MotionMasterDelayedAction() { } - - void Resolve() { if (Validator()) Action(); } - - std::function Action; - std::function Validator; - uint8 Type; -}; - class TC_GAME_API MotionMaster { public: + typedef std::function DelayedActionDefine; + typedef std::function DelayedActionValidator; + + class DelayedAction + { + public: + explicit DelayedAction(DelayedActionDefine&& action, DelayedActionValidator&& validator, MotionMasterDelayedActionType type) : Action(std::move(action)), Validator(std::move(validator)), Type(type) { } + explicit DelayedAction(DelayedActionDefine&& action, MotionMasterDelayedActionType type) : Action(std::move(action)), Validator(EmptyValidator), Type(type) { } + ~DelayedAction() { } + + void Resolve() { if (Validator()) Action(); } + + DelayedActionDefine Action; + DelayedActionValidator Validator; + uint8 Type; + }; + explicit MotionMaster(Unit* unit); ~MotionMaster(); @@ -214,7 +217,7 @@ class TC_GAME_API MotionMaster MovementGeneratorPointer _defaultGenerator; MotionMasterContainer _generators; MotionMasterUnitStatesContainer _baseUnitStatesMap; - std::deque _delayedActions; + std::deque _delayedActions; uint8 _flags; };