⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 trigger.h

📁 奇迹世界 部分源代码奇迹世界 部分源代码奇迹世界 部分源代码
💻 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 + -