📄 triggermanager.h
字号:
#pragma once
//=============================================================================================================================
/// TriggerManager class
/**
@author Kim Min Wook < taiyo@webzen.com >
@since 2004. 12. 29
@remark
- 甘(鞘靛)俊辑 流立利栏肺 飘府芭甫 荤侩且 荐 乐霸 炼累窍绰 皋聪历 努贰胶
@note
-
@history
-
*/
//=============================================================================================================================
#include <SolarHashTable.h>
#include <ProgramCommon/WzDataType.h>
struct TRIGGER_MSG;
struct TRIGGER_LEAVE_AREA;
struct TRIGGER_ENTER_AREA;
class Trigger;
class TriggerInfo;
class TriggerGroupInfo;
class TriggerAreaHash;
class TriggerManager
{
enum { MAX_SWITCH_NUM = 255, };
friend class Trigger;
typedef util::SolarHashTable<Trigger *, WzID>::iterator TRIGGER_ITR;
public:
TriggerManager(void);
~TriggerManager(void);
// 阿辆 悸泼!!
VOID Init( TriggerGroupInfo & IN rInfo, Field * pField );
VOID Release();
VOID Update();
// 蜡历啊 飘府芭鞘靛俊辑 唱皑栏肺 秦辑 力芭秦拎具 窍绰巴甸
VOID Disconnected( DWORD dwUserKey );
// 努扼捞攫飘肺 何磐 坷绰 捞亥飘 皋技瘤
// TRIGGER_ENTER_AREA
// TRIGGER_LEAVE_AREA
// TRIGGER_CLICK_OBJECT
// 辑滚俊辑 坷绰 捞亥飘 皋技瘤
// TRIGGER_DAMAGE_OBJECT
// TRIGGER_KILL_MONSTER
VOID OnMsg( TRIGGER_MSG * pMsg );
inline BYTE GetSwitchValue( BYTE sIndex ) { ASSERT(sIndex<MAX_SWITCH_NUM); return m_SwitchValue[sIndex]; }
inline VOID SetSwitchValue( BYTE sIndex, BYTE value ) { ASSERT(sIndex<MAX_SWITCH_NUM); m_SwitchValue[sIndex] = value; }
VOID ActiveTrigger( WzID wzTriggerID, BOOL bActive );
VOID ActiveNextTrigger( WzID curWzTriggerID );
VOID SetAttribute( int iTileID, BYTE byAttr );
VOID UnsetAttribute( int iTileID, BYTE byAttr );
WzSpecialArea * GetAreaInfo( INT index ); //< 飘府芭俊辑绰 牢郸胶规侥狼 康开茫扁父阑 荤侩!!!!!
VOID CreateNPC( CODETYPE MonsterCode, DWORD dwNumberOfNPC, WzVector * pvPos, DWORD dwAreaID, DWORD dwGroupID );
VOID CreateNPC_Dir( CODETYPE MonsterCode, DWORD dwNumberOfNPC, WzVector * pvPos, DWORD dwAreaID, DWORD dwGroupID, WORD wAngle );
WzVector GetRandomPosInTile( int iTile );
INT GetTileToStand( WzVector * pvPos );
MapObject * FindMapObject( const DWORD dwObjectKey );
BOOL RemoveMapObject( const DWORD dwObjectKey );
DWORD GetPlayerNum();
VOID SendToAll( MSG_BASE_FORWARD * pMsg, WORD wSize );
template <class ObjectOperator>
VOID ForeachPlayer( ObjectOperator & Opr )
{
if( m_pField )
m_pField->ForeachPlayer( Opr );
}
template <class FUNCTOR>
VOID ForeachTrigger( FUNCTOR & func )
{
Trigger * pTrigger = NULL;
m_TriggerHash.SetFirst();
while( (pTrigger=m_TriggerHash.GetNext()) != NULL )
{
func(pTrigger);
}
}
//----------------- TRIGGER_AREA_HASH -----------------------------------
VOID CreateAreaHash( INT AreaID );
VOID OnLeaveArea( TRIGGER_LEAVE_AREA * pMsg );
VOID OnEnterArea( TRIGGER_ENTER_AREA * pMsg );
DWORD GetPlayerNumForAreaID( INT AreaID );
template <class ObjectOperator>
VOID For_EachPlayerInArea( INT AreaID, ObjectOperator & Opr )
{
TriggerAreaHash * pHash = m_TriggerAreaHash.GetData(AreaID);
pHash->For_Each( Opr );
}
protected:
VOID removeActiveTrigger( Trigger * pTrigger );
VOID addActiveTrigger( Trigger * pTrigger );
private:
Field * m_pField;
BYTE m_SwitchValue[MAX_SWITCH_NUM];
util::SolarHashTable<Trigger *, WzID> m_ActiveTriggerHash; //< 劝己拳等 飘府芭
util::SolarHashTable<Trigger *, WzID> m_TriggerHash;
util::SolarHashTable<TriggerAreaHash *, INT> m_TriggerAreaHash;
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -