📄 trigger.h
字号:
#pragma once
//=============================================================================================================================
/// Trigger class
/**
@author Kim Min Wook < taiyo@webzen.com >
@since 2004. 12. 29
@remark
- 牧叼记 飘府芭客 咀记 飘府芭甫 啊瘤绊 乐绰 角力 荤侩登绰 飘府芭 努贰胶
@note
-
@history
-
*/
//=============================================================================================================================
#include <SolarHashTable.h>
#include "TriggerCommon.h"
#include "TriggerInfo.h"
#include "Player.h"
class IActionTrigger;
class IConditionTrigger;
class ActionInfo;
class ConditionInfo;
class TriggerManager;
struct TRIGGER_MSG;
// with pool
class Trigger
{
public:
enum eTRIGGER_STATE
{
INACTIVATE_STATE, // 檬扁拳绰 登菌栏唱 酒流 飘府芭啊 Active登瘤 臼疽促.
DONTUPDATE_STATE, // 诀单捞飘 窍瘤 臼绰促.
UPDATE_STATE, // 诀单捞飘 茄促.
ACTIONUPDATE_STATE, // Action Update甫 茄促.
TERMINATING_STATE, // Action饶 辆丰
};
enum ePLAYER_TRIGGER_STATE
{
ENTER_AREA_PLAYER = (1<<1), // 康开俊 甸绢 柯 敲饭捞绢
ENTER_AREA_POINT_PLAYER = (1<<2), // 康开俊 甸绢坷绊 固记 器牢飘甫 啊柳 敲饭捞绢
DAMAGE_PLAYER = (1<<3), // 单固瘤甫 涝腮 敲饭捞绢
HAVE_ITEM_PLAYER = (1<<4), // 酒捞袍阑 啊柳 敲饭捞绢
};
typedef struct
{
WORD m_State;
Player * m_pPlayer;
} PLAYER_TRIGGER_INFO;
typedef util::SolarHashTable<PLAYER_TRIGGER_INFO *>::iterator PTI_ITERATOR;
typedef util::SolarHashTable<Player *>::iterator SP_ITERATOR;
public:
Trigger(void);
~Trigger(void);
VOID Init( TriggerManager * pMGR, TriggerInfo * pInfo );
VOID Release();
BOOL Update();
// 捞蜡 : Active矫俊 OnInit(), Deactive趣篮 Destroy矫俊 OnRelease()
VOID OnInit();
VOID OnRelease();
inline const WzID TriggerID() { return m_pTriggerInfo->TriggerID(); }
eTRIGGER_STATE GetTriggerState() { return m_state; }
BOOL ActionUpdate();
VOID SetActive( BOOL bActive ) { m_bActive = bActive; }
BOOL IsActive() { return m_bActive; }
inline BOOL IsNextActive() { return m_pTriggerInfo->IsNextActive(); }
inline BOOL IsLoop() { return m_pTriggerInfo->IsLoop(); }
VOID OnMsg( TRIGGER_MSG * pMsg );
BOOL Execute();
inline DWORD GetClickedUserKey() { return m_dwClickedUserKey; }
inline VOID SetClickedUserKey( DWORD key ) { m_dwClickedUserKey = key; }
VOID AddSatisfiedPlayer( Player * pPlayer )
{
ASSERT( NULL == m_SatisfiedPlayerHash.GetData(pPlayer->GetUserKey()) );
m_SatisfiedPlayerHash.Add( pPlayer, pPlayer->GetUserKey() );
}
VOID RemoveAllSatisfiedPlayer()
{
m_SatisfiedPlayerHash.RemoveAll();
}
template <class Operator>
VOID For_EachSatisfiedPlayer( Operator op )
{
for( SP_ITERATOR itr = m_SatisfiedPlayerHash.begin() ; itr != m_SatisfiedPlayerHash.end() ; ++itr )
{
op( *itr);
}
}
private:
BOOL _ConditionCheck();
VOID _ConditionReset();
VOID _Action();
inline TriggerInfo * _getInfo() { return m_pTriggerInfo; }
inline VOID _setInfo( TriggerInfo * pInfo ) { m_pTriggerInfo = pInfo; }
VOID _createCondition( ConditionInfo * pTrigger );
VOID _createAction( ActionInfo * pTrigger );
VOID _destroyCondition( IConditionTrigger * pTrigger );
VOID _destroyAction( IActionTrigger * pTrigger );
public:
PLAYER_TRIGGER_INFO m_PlayerTriggerInfo[MAX_PARTYMEMBER_NUM];
private:
BOOL m_bActive; //< 泅犁狼 劝己拳 惑怕
TriggerInfo * m_pTriggerInfo;
TriggerManager * m_pMGR;
eTRIGGER_STATE m_state;
util::SolarHashTable<IConditionTrigger *> m_ConditionHash;
util::SolarHashTable<IActionTrigger *> m_ActionHash;
// 飘府芭 肺流俊辑 鞘夸茄 干滚
DWORD m_dwClickedUserKey;
// 炼扒阑 父练窍绰 敲饭捞绢 府胶飘
util::SolarHashTable<Player *> m_SatisfiedPlayerHash;
__DECLARE_POOL(Trigger)
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -