#ifndef TRIGGERPARSER_H #define TRIGGERPARSER_H #pragma once #include #include #include #include #include #include enum eTRIGGER_TYPE; struct sTRIGGER_CONTAINER; struct sTRIGGERLIST; struct sTRIGGERCATEGORY; struct sTRIGGERGROUP; #define MAX_TRIGGER_GROUPNAME_LENGTH 256 #define MAX_TRIGGER_CATEGORYNAME_LENGTH 256 typedef std::vector TriggerType_vector; typedef TriggerType_vector::iterator TriggerType_iterator; typedef std::vector TriggerList_vector; typedef TriggerList_vector::iterator TriggerList_iterator; typedef std::vector TriggerCategory_vector; typedef TriggerCategory_vector::iterator TriggerCategory_iterator; typedef std::vector TriggerGroup_vector; typedef TriggerGroup_vector::iterator TriggerGroup_iterator; //--------------------------------------------------------------------------------------- // Æ®¸®°Å µ¥ÀÌÅÍ //--------------------------------------------------------------------------------------- struct sTRIGGER_CONTAINER { WzID m_TriggerListID; WORD m_wTriggerListAtt; WORD m_wNumConTrigger; TriggerType_vector m_ConditionTrigger; WORD m_wNumActTrigger; TriggerType_vector m_ActionTrigger; void Load(CWzArchive *pArchive); void Destroy(); }; struct sTRIGGERLIST { CODETYPE m_TriggerCode; WORD m_wNumberOfTriggerContainer; TriggerList_vector m_TriggerListVector; }; struct sTRIGGERCATEGORY { char m_szName[MAX_TRIGGER_CATEGORYNAME_LENGTH]; WORD m_wNumberOfTriggerList; TriggerList_vector m_TriggerListVector; void Load(CWzArchive *pArchive); void Destroy(); }; struct sTRIGGERGROUP { char m_szName[MAX_TRIGGER_GROUPNAME_LENGTH]; WORD m_wNumberOfTriggerCategory; TriggerCategory_vector m_TriggerCategoryList; void Load(CWzArchive *pArchive); void Destroy(); }; class MapTrigger { public: MapTrigger(); ~MapTrigger(); void Init(); void Destroy(); int GetGroupNum(); void Load(CWzArchive *pArchive); sTRIGGERGROUP *GetGroup(int iGroupIndex); protected: WORD m_wGroupNum; TriggerGroup_vector m_TriggerGroupList; }; //--------------------------------------------------------------------------------------- // Æ®¸®°Å ÆÄ¼­( ·Î´õ ) //--------------------------------------------------------------------------------------- class TriggerParser : public util::Singleton { enum { _MAX_TRIGGERLIST_SIZE = 30, }; public: TriggerParser(); virtual ~TriggerParser(); BOOL Init(); void Release( void ); BOOL Load( char * pszRootDir, char *pTriggerScriptFileName ); sTRIGGERLIST * GetTriggerList( CODETYPE tcode ) { return m_TriggerListForMap.GetData( tcode ); } MapTrigger * Load(CWzArchive *pArchive); static BYTE* SetTriggerType( WORD Type, DWORD * pdwSize, eTRIGGER_TYPE eCondition = eTRIGGER_CONDITION ); protected: BOOL Load( char * pTriggerFileName, sTRIGGERLIST * pTriggerList ); private: util::SolarHashTable m_TriggerListForMap; }; #endif // TRIGGERPARSER_H