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

📄 triggermanager.h

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