#ifndef _GAMESERVER_TRIGGER_H #define _GAMESERVER_TRIGGER_H #pragma once //================================================================================================== #include #include class Player; class TriggerManagerEx; class IConditionTriggerEx; class IActionTriggerEx; typedef std::pair SATISFIED_PLAYER_PAIR; typedef STLX_VECTOR SATISFIED_PLAYER_LIST; //================================================================================================== // class Trigger : public BaseTrigger { public: Trigger(); virtual ~Trigger(); public: void OnRelease(); BOOL Update(); BOOL ActionUpdate(); //---------------------------------------------------------------------------------------------- // SatisfiedPlayer Operations BOOL AddSatisfiedPlayer(Player* pPlayer); VOID RemoveUnsatisfiedPlayer(); void RemoveAllSatisfiedPlayer(); Player* GetFirstSatisfiedPlayer(); VOID CheckUnsatisfiedPlayer(Object::Key player_key); template void ForeachSatisfiedPlayer(_OPERATOR& op) { for (SATISFIED_PLAYER_LIST::iterator it = m_SatisfiedPlayers.begin(); it != m_SatisfiedPlayers.end();) { Player* const player = it->second; if (obj_util::IsValid(player)) { op(player); ++it; } else { it = m_SatisfiedPlayers.erase(it); } } } template void ForeachSatisfiedPlayer(_FN _func, const _OBJ& _left) { for (SATISFIED_PLAYER_LIST::iterator it = m_SatisfiedPlayers.begin(); it != m_SatisfiedPlayers.end();) { Player* const player = it->second; if (obj_util::IsValid(player)) { boost::bind(_func, _left, _1)(*it); ++it; } else { it = m_SatisfiedPlayers.erase(it); } } RemoveUnsatisfiedPlayer(); } private: virtual void _createCondition(ConditionInfo* pTrigger); virtual void _createAction(ActionInfo* pTrigger); virtual void _destroyCondition(IConditionTrigger* pTrigger); virtual void _destroyAction(IActionTrigger* pTrigger); virtual void _OnAction(); private: // Á¶°ÇÀ» ¸¸Á·ÇÏ´Â Ç÷¹ÀÌ¾î ¸®½ºÆ® SATISFIED_PLAYER_LIST m_SatisfiedPlayers; STLX_VECTOR unsatisfied_players; __DECLARE_POOL(Trigger); }; #endif //_GAMESERVER_TRIGGER_H