// loadhelper.h #ifndef _3DTERRAIN_LOADHELPER_H_ #define _3DTERRAIN_LOADHELPER_H_ //------------------------------------------------------------------------------ /** ÆÄÀÏ·Î ºÎÅÍ ¸Ê»ó¿¡ Á¸ÀçÇÏ´Â ¿©·¯°¡Áö ¿ÀºêÁ§Æ®µéÀ» ·ÎµåÇϱâ À§ÇØ »ç¿ëÇϴ Ŭ·¡½ºÀÌ´Ù. ¿ÀºêÁ§Æ®/SpeedTree/Grass/LocalLightµîÀÇ ·Îµå¸¦ µ½´Â ¸ñÀûÀÏ »ÓÀ̱⠶§¹®¿¡ ·ÎµùÀÌÈÄ¿¡ À̸¦ Á¢±ÙÇØ¼­ »ç¿ëÇÏÁö ¾Êµµ·Ï ÇÑ´Ù. @modify @2006.3.7 ~ 4.19 : Script¸¦ ÀÌ¿ëÇÑ ¿ÀºêÁ§Æ® ·Îµå Áö¿ø. @2006.4.24 : Sun/Wiki StudioÀÇ ¸Ê ¿ÀºêÁ§Æ® ·Îµù ºÎºÐ¿¡ LoadHelper »ç¿ë. @author: ¹æ¿ø¿µ, ¿ø½Å¿¬(3D Engine Team) Copyright 2004 WEBZEN All rights. */ #include #include #include #include #include #include // Àüó¸® ¼±¾ð¹® #ifdef CLIENT_ONLY class CDrawBase; #endif class CWorldBase; /// ¿ÀºêÁ§Æ® °ü·Ã Á¤º¸¸¦ ´ã´Â ±¸Á¶Ã¼. struct St_LHObjectWZU { char* m_pszFileName; WzID m_WzID; BYTE m_Attr[4]; ///< 0: WZUÆÄÀÏÀÇ ÀνºÅÏ½Ì »ç¿ëÀ¯¹« 1: È­¸é¿¡¼­ ÀÛ°Ô º¸ÀÏ °æ¿ì ·£´õ¸µ ¾ÈÇÔ ///< 2: ¿¹¾à 3: ¿¹¾à // ÆíÁý°ú °ü·ÃµÈ ¿µ¿ª int m_iID; ///< ·ÎµåµÉ WZMÀÇ ½Äº° À妽º °ª. }; struct St_LHObjectSpecialTexture { char* m_pszFileName; WzID m_WzID; int m_iID; ///< ·ÎµåµÉ WZMÀÇ ½Äº° À妽º °ª. }; struct St_LHAtdEffect { WzID m_wzID; ///< ¿ÀºêÁ§Æ®¿¡ ºÙ¾î ÀÖ´Â Loop EffectÀÇ WzID short m_iRotAngle[3]; ///< X,Y,Z Ãà¿¡ ´ëÇÑ È¸Àü°ª(0 ~ 360µµ) float m_fScale; ///< EffectÀÇ Àüü Scale¿¡ ´ëÇÑ ½ºÄ®¶ó°ª }; struct St_LHObject { WzID m_WzID; DWORD m_dwAttribute; WzVector m_wvPos; WzVector m_wvScale; WzVector m_wvRot; WzBoundingVolume m_wzBV; WzID m_wiUser; ///< À¯Àú°¡ ÀÔ·ÂÇÑ WZID. DWORD m_dwExtraAttibue[3]; ///< ??? ÀÌÀü ÀÛ¾÷ÀÚ°¡ ÇØ³õÀº ºÎºÐ. ¿ëµµ¸¦ ¸ð¸£°í ÀÖ´Ù. DWORD m_dwParam[4]; ///< ¸ÊÅø¿¡¼­ ÀÔ·ÂÇÑ Ãß°¡ Á¤º¸¸¦ À§ÇÑ ÆÄ¶ó¹ÌÅÍ. St_LHAtdEffect m_AtdEffect[4]; int m_iID; ///< ·ÎµåµÉ WZMÀÇ ½Äº° À妽º °ª. WzColor m_wcDraw; //_YJ_EDIT_OBJ_COLOR int m_iCollision; //_GS_OBJ_COLLISION }; /// Ç® ¿ÀºêÁ§Æ® ±¸Á¶Ã¼ struct St_LHGrass { WzVector m_wvPos; WzVector m_wvRot; WzVector m_wvScale; BYTE m_byAttribute; // ÆíÁýÀ» À§ÇÑ µ¥ÀÌÅÍ. int m_iID; }; /// Ç® ¿ÀºêÁ§Æ®¸¦ À§ÇÑ WZUÆÄÀÏ Á¤º¸ ±¸Á¶Ã¼ struct St_LHGrassWZU { WzID m_WzID; int m_nNumGrass; St_LHGrass* m_pGrass; // ÆíÁýÀ» À§ÇÑ µ¥ÀÌÅÍ. int m_iLastIndex; }; /// ½ºÇÇµå Æ®¸® ±¸Á¶Ã¼ struct St_LHSpeedTree { WzID m_WzID; DWORD m_dwAttribute; WzVector m_wvPos; WzVector m_wvScale; WzColor m_wcDraw; //_YJ_EDIT_OBJ_COLOR // ÆíÁýÀ» À§ÇÑ µ¥ÀÌÅÍ. int m_iID; }; /// ½ºÇÇµå Æ®¸® ÆÄÀÏ Á¤º¸ ±¸Á¶Ã¼ struct St_LHSpeedTreeFile { char* m_pszFileName; WzID m_WzID; // ÆíÁýÀ» À§ÇÑ µ¥ÀÌÅÍ. int m_iID; }; /// ½ºÇÇµå Æ®¸® Çì´õ Á¤º¸ ±¸Á¶Ã¼ struct St_LHSpeedTreeHeader { char m_szCompositeTexture[256]; char m_szCompositeShadowTexture[256]; }; /// ¶óÀÌÆ® Á¤º¸ ±¸Á¶Ã¼ struct St_LHLight { WzVector m_wvPos; WzColor m_wc; float m_fRange; float m_fIntensity; BYTE m_byIrradianceRef; // ÆíÁýÀ» À§ÇÑ µ¥ÀÌÅÍ. int m_iID; }; /// Mesh¿¡ ´ëÇÑ ¶óÀÌÆ®¸Ê Á¤º¸¸¦ ´ã±â À§ÇÑ ±¸Á¶Ã¼ /// @author ÀåÁø¸¸ typedef struct St_LHMeshGroupLM { int NumObj; //¿ÀºêÁ§Æ® ¹øÈ£ char WZU_Filename[MAX_PATH]; //WZUÆÄÀÏ À̸§ int NumMeshGroup; //¸Þ½¬±×·ì ¹øÈ£ char LM_Filename[MAX_PATH]; //¶óÀÌÆ®¸Ê ÆÄÀÏ À̸§ int NumLMVertex; //¶óÀÌÆ®¸Ê ¹öÅØ½º °³¼ö int *FaceTextureNum; //ÇØ´ç Face°¡ ¾²´Â ¶óÀÌÆ®¸Ê ÅØ½ºÃÄ ¹øÈ£ WzUVVert *ListLMVertex; //¶óÀÌÆ®¸Ê ¹öÅØ½º ¸®½ºÆ® } LMMeshGroup; typedef struct St_LHTerrainLM { char TerrainLMName[MAX_PATH]; //ÁöÇü LM À̸§ } TerrainLM; struct St_LHUnitPath { WzVector wvStartPos; WzVector wvPath; BYTE byWalkState; // 0 °È±â, 1 ´Þ¸®±â }; typedef CWzArray LHPathList; // Structure : St_LHUnit // // ¹öÀü º° ¼öÁ¤ »çÇ×: // 1) 0x0002: ´ÙÁß ÆÐ½º Á¤º¸ Ãß°¡. // 2) 0x0003: Æ®¸®°Å ¿¬µ¿ À¯´Ö¿¡ ´ëÇÑ Á¤º¸ Ãß°¡. // 3) 0x0004: ·£´ý ¸®Á¨ °ü·Ã Á¤º¸ Ãß°¡. // 4) 0x0005: °¢ ÆÐÆ®·Ñ °æ·Î»ó¿¡¼­ °È±â/´Þ¸®±â Á¤º¸ Ãß°¡ #define VERSION_UNITDATAFORMAT (0x0005) #define NUM_REGENUNITTYPE (5) struct St_LHUnit { WORD wVersion; // ÀúÀåµÇ´Â µ¥ÀÌÅÍ ¿µ¿ª char name[128]; // À̸§ char wzufilename[128]; // À¯´ÖÀÌ ÂüÁ¶ÇÏ´Â WZU ÆÄÀϸí int category; WzID wID; float radian; // À¯´ÖÀÇ ½Ã¼±¹æÇâ BYTE unit_type; // ¹èÄ¡ ŸÀÔ BYTE ai_type; // AI Á¾·ù /// À¯´ÖÀÇ ¸®Á¨Å¸ÀÔ (0:ÀϹݸ®Á¨, 1:·£´ý¸®Á¨ 2:Áö¿¬»ý¼ºÅ¸ÀÔ - ºñƮüũÇÏ¿© »ç¿ë, ÇöÀç 0,1 ÀÇ °æ¿ì »ç¿ëÇÏÁö ¾ÊÀ½) BYTE ucRegenType; /// À¯´ÖÀÇ Å°°ªÀÇ °¹¼ö(1º¸´Ù Å«°æ¿ì ·£´ý¸®Á¨Å¸ÀÔ À¯´ÖÀ¸·Î ÇÑ´Ù) BYTE ucNumKey; bool bRefTrigger; // À¯´ÖÀÌ Æ®¸®°Å ½Ã½ºÅÛ¿¡ ¿¬°áµÇ¾îÀÖ´Ù. DWORD regentime; // Àç»ý ½Ã°£ float regenProbability; // Àç»ý È®·ü LHPathList PathList; // À¯´ÖÀÌ À§Ä¡ÇÒ ¼ö ÀÖ´Â À§Ä¡°ªµé. int iKeyList[NUM_REGENUNITTYPE]; // ·£´ý ¸®Á¨ À¯´Ö float fRegenRate[NUM_REGENUNITTYPE]; // ·£´ý È®·ü DWORD userdata[2]; }; #define VERSION_UNITGROUPDATAFORMAT (0x0001) struct St_LHUnitGroup { WzID wID; WzID leader; // ¸®´õ À¯´ÖÀÇ ID DWORD userdata[2]; // »ç¿ëÀ¯¹« ¹ÌÁ¤ // À¯´Ö ±×·ì¿¡ ¼ÓÇÑ À¯´Öµé¿¡ ´ëÇÑ Æ÷ÀÎÅÍ ¸ñ·Ï. CWzArray unitlist; }; typedef struct St_LHMapOption { WzVector vPosition; WzVector vLookAt; // °ø½Ä float fBrightArg[3]; // Brightness Function¿¡ ´ëÇÑ Arguments(ÇöÀç »ç¿ë¾ÈÇÔ) WzColor wcShadow; // Projection params... float fFov; float fNear; float fFar; // Sight params... float fVisibleRange; // °¡½Ã ¹üÀ§ float fAlphaRange; // Alpha°ªÀÌ Àû¿ëµÇ¾î ·£´õ¸µÀÌ µÇ´Â ¹üÀ§ float fVisibleRate; // ´ë»óÀÇ ºÒÅõ¸í ºñÀ² // Render option float fBrightness; // ÁöÇü ·£´õ¸µ½Ã ¹à±â Á¶ÀýÀ» À§ÇÑ °ª. // Params for bloom... int iBlurCount; // ºí·¯ Ƚ¼ö float fMinLuminance; // Àû¿ëÇÒ ÃÖ¼Ò Èñµµ 0.0~1.0 float fSelectHighLight; // ¼±ÅÃµÈ »ö±ò HighLight·® WzColor wcSelectColor; // Àû¿ëÇÒ »ö»ó float fFinalColorBlend; // ¿¬»ê ¸¶Á÷¸·¿¡ ¾ó¸¶¸¸Å­ Àû¿ë ÇÒ²«Áö. float fOriginalColorBlend; // ¿øº»À̹ÌÁö Àû¿ë ºñÀ² WzID WeatherEffect; // ³¯¾¾È¿°ú ÀÌÆåÆ®ÀÇ WzID float fDOF_Rate; float fDOF_Range; } LHMapOption; typedef struct St_LHFileHeader { char cIdentify[4]; WORD wFirstVersion; WORD wSecondVersion; DWORD dwCheckSum; } LHFileHeader; enum Enum_FileType { FILETYPE_MAP, FILETYPE_MAPOBJECT, FILETYPE_MAPSOUND, FILETYPE_MAPUNIT, FILETYPE_MAPOPTION, }; class CLoadHelper : public CWzSingleton { public: CLoadHelper(); virtual ~CLoadHelper(); /** ·ÎµåµÈ Á¤º¸¸¦ »èÁ¦Çϰí ÇÒ´çµÈ ¸ðµç ¸Þ¸ð¸®¸¦ ÇØÁ¦ÇÑ´Ù. */ virtual void DeleteAll(); /** @name Object * * SpeedTree¿¡ °ü·ÃµÈ ÇÔ¼öµé. * @{ */ virtual BOOL LoadObj(CWzArchive* pArchive); virtual int GetObjWzuCount(); virtual St_LHObjectWZU *GetObjWzu(); virtual int GetSpecialTextureCount(); virtual St_LHObjectSpecialTexture* GetSpecialTexture(); virtual int GetObjectCount(); virtual St_LHObject *GetObject(); /** ¿ÀºêÁ§Æ®¿¡ ´ëÇÑ Á¤º¸¸¦ »èÁ¦ÇÏ°í ¸Þ¸ð¸®¸¦ ¹ÝȯÇÑ´Ù. */ virtual void DeleteObject(); virtual int GetLastIndexObjWzu() { return m_iLastIndexObjWZU; } virtual int GetLastIndexSpecTex() { return m_iLastIndexSpecTex; } virtual int GetLastIndexObj() { return m_iLastIndexObj; } /** ¿ÀºêÁ§Æ® ÀνºÅϽºµéÀ» À§ÇÑ ¸Þ¸ð¸® °ø°£À» ÇÒ´çÇÑ´Ù */ virtual void AllocateArrayForWzu(int size); virtual void AllocateArrayForSpecailTexture(int size); virtual void AllocateArrayForObject(int size); virtual void ExpandArrayForObject(int size); /** ¿ÀºêÁ§Æ®¸¦ ·ÎµåÇÑ´Ù. */ virtual void LoadWzu(int index, LPSTR lpFilename, WzID wID); virtual void LoadSpecailTexture(int index, LPSTR lpFilename, WzID wID); virtual int ReallocateArrayForWzu(int size); /** * ÁÖ¾îÁø À̸§°ú WzIDÀÇ WZU object°¡ ÀÖ´ÂÁö ã´Â´Ù. * @return : 0ÀÌ»óÀÎ °æ¿ì ÇöÀç ¸ñ·Ï¿¡¼­ Wzu objectÀÇ À妽ºÀÌ´Ù. */ virtual int FindObjectWzu(LPSTR lpFilename, WzID wID); /** * ÁÖ¾îÁø À̸§°ú WzIDÀÇ SpecialTexture°¡ ÀÖ´ÂÁö ã´Â´Ù. * @return : 0ÀÌ»óÀÎ °æ¿ì ÇöÀç ¸ñ·Ï¿¡¼­ SpecialTextureÀÇ À妽ºÀÌ´Ù. */ virtual int FindSpecailTexture(LPSTR lpFilename, WzID wID); /** @} */ // end of Object /** @name Grass * * Grass¿¡ °ü·ÃµÈ ÇÔ¼öµé. * @{ */ /** MapÆÄÀÏÀÇ Grass Á¤º¸¸¦ ·ÎµåÇÑ´Ù. */ virtual BOOL LoadGrass(CWzArchive* pArchive); virtual int GetGrassWZUCount(); virtual int GetGrassCount(int iWZU); virtual St_LHGrassWZU *GetGrassWZU(); virtual int GetTotalGrassCount(); /** Grass¿¡ ´ëÇÑ Á¤º¸¸¦ »èÁ¦ÇÏ°í ¸Þ¸ð¸®¸¦ ¹ÝȯÇÑ´Ù. */ virtual void DeleteGrass(); virtual BOOL CreateGrassWzuList(int nGrassTotal, int nGrassWZU); virtual BOOL CreateGrassList(int iWZU, WzID wID, int nNumGrass, int iLastGrass); /** * ÇØ´ç À妽ºÀÇ ÀνºÅϽº¿¡ ´ëÇÑ Á¤º¸¸¦ ¼³Á¤ÇÑ´Ù. * @param index : ¹è¿­ÀÇ À妽º * @param iWzu : Grass °´Ã¼°¡ »ç¿ëÇÏ´Â Wzu ÆÄÀÏÀÇ À妽º°ª * @param iID : ½Äº° À妽º * @param vPos : * @param sRot : * @param sScale : * @param byAttrubte : */ virtual void SetGrass(int index, int iWZU, int iID, WzVector *vPos, short sRot, short sScale, BYTE byAttribute); /** * ÇöÀç ·ÎµåµÈ Grass ¸ñ·ÏÀÇ ÇØ´ç ÀνºÅϽº¿¡ ´ëÇÑ Á¤º¸¸¦ ¼öÁ¤ÇÑ´Ù. * @param index : ¹è¿­ÀÇ À妽º * @param iWzu : Grass °´Ã¼°¡ »ç¿ëÇÏ´Â Wzu ÆÄÀÏÀÇ À妽º°ª * @param vPos : * @param sRot : * @param sScale : * @param byAttrubte : */ virtual void ModifyGrass(int index, int iWZU, WzVector *vPos, short sRot, short sScale, BYTE byAttribute); virtual int FindGrassWzu(WzID wID); virtual int FindGrass(int iGrassWZU, int iID, WzVector *vPos, WzVector *vRot, WzVector *vScale); /** ÁÖ¾îÁø Å©±â·Î Grass¿¡ »ç¿ëµÇ´Â Wzu ¸ñ·Ï¿¡ ´ëÇÑ ¸Þ¸ð¸®¸¦ ÀçÇÒ´çÇÑ´Ù. */ virtual int ReallocGrassWzu(int size); /** ÁÖ¾îÁø Å©±â·Î Grass¿¡ ´ëÇÑ ¸Þ¸ð¸®¸¦ ÀçÇÒ´çÇÑ´Ù. */ virtual int ReallocGrass(int iGrassWZU, int size); /** @} */ // end of Grass /** @name SpeedTree * * SpeedTree¿¡ °ü·ÃµÈ ÇÔ¼öµé. * @{ */ /** MapÆÄÀϷκÎÅÍ SpeedTree Á¤º¸¸¦ Àд´Ù. */ virtual BOOL LoadSpeedTree(CWzArchive* pArchive); virtual St_LHSpeedTreeHeader* GetSpeedTreeHeader(); virtual int GetSpeedTreeCount(); virtual St_LHSpeedTree* GetSpeedTree(); virtual int GetSpeedTreeFileCount(); virtual St_LHSpeedTreeFile* GetSpeedTreeFile(); /** SpeedTree¿¡ ´ëÇÑ Á¤º¸¸¦ »èÁ¦ÇÏ°í ¸Þ¸ð¸®¸¦ ¹ÝȯÇÑ´Ù. */ virtual void DeleteSpeedTree(); virtual BOOL CreateSpeedTreeHeader(LPSTR lpCompositeTexture, LPSTR lpCompositeShadowTexture); virtual BOOL CreateSpeedTreeFileList(int nSpeedTreeFile, int iLastSpeedTreeFile); virtual void SetSpeedTreeFile(int index, int iID, LPSTR filename, WzID wID); virtual BOOL CreateSpeedTreeList(int nSpeedTree, int iLastSpeedTree); virtual void SetSpeedTree(int index, int iID, WzID wID, DWORD dwAttr, WzVector *vPos, WzVector *vScale); virtual void ModifySpeedTree(int index, DWORD dwAttr, WzVector *vPos, WzVector *vScale); virtual int GetLastIndexSpeedTreeFile() { return m_iLastSpeedTreeFile; } virtual int GetLastIndexSpeedTree() { return m_iLastSpeedTree; } bool FindIndexSpeedTreeFile(int iID); /** ÁÖ¾îÁø Á¤º¸¸¦ °¡Áø Æ®¸® ÆÄÀÏÀÌ ÀÖ´ÂÁö È®ÀÎÇÑ´Ù. */ virtual bool FindSpeedTreeFile(LPSTR filename, WzID wID); bool FindIndexSpeedTree(int iID); /** ÁÖ¾îÁø Á¤º¸¸¦ °¡Áø Æ®¸®°¡ ÀÖ´ÂÁö È®ÀÎÇÑ´Ù. */ virtual bool FindSpeedTree(WzID wID, WzVector *vPos, WzVector *vScale); /** ½ºÇÇµå Æ®¸® ÆÄÀÏ ¸ñ·ÏÀ» ÀçÇÒ´çÇÑ´Ù. */ virtual int ReallocSpeedTreeFileList(int size); /** ½ºÇÇµå Æ®¸® ¸ñ·ÏÀ» ÀçÇÒ´çÇÑ´Ù. */ virtual int ReallocSpeedTreeList(int size); /** @} */ // end of SpeedTree /** @name Light * * ¶óÀÌÆ®¿¡ °ü·ÃµÈ ÇÔ¼öµé. * @{ */ /** MapÆÄÀϷκÎÅÍ Light Á¤º¸¸¦ Àд´Ù. */ virtual BOOL LoadLight(CWzArchive* pArchive); virtual int GetLightCount(); virtual St_LHLight* GetLight(); /** LightÁ¤º¸¸¦ »èÁ¦ÇÏ°í ¸Þ¸ð¸®¸¦ ÇØÁ¦ÇÑ´Ù. */ virtual void DeleteLight(); virtual bool CreateLocalLightList(int nLight); /** * Áö¿ª±¤ÀÇ ¹è¿­¿¡ Áö¿ª±¤¿¡ ´ëÇÑ Á¤º¸¸¦ ¼³Á¤ÇÑ´Ù. * @param index : ¹è¿­ÀÇ À妽º * @param iID : ½Äº° À妽º * @param wc : »ö»ó°ª * @param vPos : À§Ä¡°ª * @param fRange : * @paranm byIrradianceRef : * @param fIntensity : */ virtual void SetLocalLight(int index, int iID, WzColor wc, WzVector *vPos, float fRange, BYTE byIrradianceRef, float fIntensity); /** * ÇØ´ç Áö¿ª±¤ÀÇ Á¤º¸¸¦ ¼öÁ¤ÇÑ´Ù. * @param index : ´ë»ó Áö¿ª±¤ÀÇ ¹è¿­ À妽º * @param wc : »ö»ó°ª * @param vPos : À§Ä¡°ª * @param fRange : * @paranm byIrradianceRef : * @param fIntensity : */ virtual void ModifyLocalLight(int index, WzColor wc, WzVector *vPos, float fRange, BYTE byIrradianceRef, float fIntensity); virtual int GetLastLight() { return m_iLastLight; } virtual bool FindLocalLight(const int iID, WzVector *vPos, const float fRange); /** ÁÖ¾îÁø Å©±â·Î Áö¿ª±¤¿¡ ´ëÇÑ ¸Þ¸ð¸®¸¦ ÀçÇÒ´çÇÑ´Ù. */ virtual int ReallocLocalLight(int size); /** @} */ // end of Light /** @name Light * * ¶óÀÌÆ®¿¡ °ü·ÃµÈ ÇÔ¼öµé. * @{ */ /** * WLU ÆÄÀÏ Á¤º¸¸¦ Àаí MeshÀÇ LIghtMapÁ¤º¸µé¿¡ ´ëÇÑ ¸ñ·ÏÀ» »ý¼ºÇÑ´Ù. * * @param Filename : Lightmap Á¤º¸ ÆÄÀÏÀ̸§(*.wlu) - I * @param ppLMUV : ¸Þ½¬ÀÇ ¶óÀÌÆ®¸Ê Á¤º¸¸¦ ´ãÀº ¹öÆÛ¿¡ ´ëÇÑ Æ÷ÀÎÅ͸¦ ¾ò´Â´Ù. - O * @param NumLMMeshGroup : ÃÑ ¸Þ½¬ ±×·ìÀÇ °¹¼ö - O * @param pTLM : ÁöÇüÀÇ ¶óÀÌÆ®¸Ê Á¤º¸¸¦ ´ãÀº ¹öÆÛ¿¡ ´ëÇÑ Æ÷ÀÎÅ͸¦ ¾ò´Â´Ù. - O * @param NumTLM : ÁöÇü ¶óÀÌÆ®¸Ê °¹¼ö - O */ #ifdef CLIENT_ONLY virtual BOOL ParseWLU(char *FileName, St_LHMeshGroupLM **ppLMUV, DWORD &NumLMMeshGroup, TerrainLM** ppTLM, DWORD &NumTLM, CDrawBase *pDrawBase ); #endif virtual void ReleaseTerrainWLU(); virtual void ReleaseUnitWLU(); virtual St_LHMeshGroupLM *GetMeshGroupLM() { return m_LMUV; } virtual DWORD GetNumMeshGroupLM() { return m_NumLMMeshGroup; } /** @} */ // end of Light /** @name unit * * À¯´Ö Á¤º¸¸¦ Àд´Ù. * @{ */ private: void ReadUnitData(CWzArchive *pArchive, St_LHUnit *pUnit); void ReadUnitGroupData(CWzArchive *pArchive, St_LHUnitGroup *pUnitGroup); BOOL ReadMapSubFileHeader(Enum_FileType type, CWzArchive *pArchive, St_LHFileHeader &fhInfo); public: /** À¯´Ö Á¤º¸¸¦ Àд´Ù. */ virtual BOOL LoadUnit(CWzArchive *pArchive, St_LHFileHeader &fhInfo); /** À¯´Ö Á¤º¸¸¦ »èÁ¦ÇÑ´Ù. */ virtual void DestroyUnit(); CWzArray< St_LHUnit* > *GetUnits() { return &m_Units; } CWzArray< St_LHUnitGroup* > *GetUnitGroups() { return &m_UnitGroups; } /** @} */ // end of unit /** @name MapOption * * ¸ÊÆÄÀÏÀÇ ¿É¼Ç ºÎºÐ¿¡ ÇØ´çÇÏ´Â Á¤º¸¸¦ Àд´Ù. * @{ */ virtual BOOL LoadMapOption(CWzArchive *pArchive, St_LHFileHeader &fhInfo); virtual St_LHMapOption *GetMapOption(); /** @} */ // end of MapOption virtual BOOL LoadMapObjectInfoFromMem(CWorldBase *pWorld, CWzArchive *pArchive); int GetReference() { return m_iRef; } void AddReference() { ++m_iRef; } void SubReference() { --m_iRef; } //------------------------------------------------------ // Data. // private: static int m_iRef; protected: St_LHObjectWZU* m_pObjectWZU; // ¿ÀºêÁ§Æ®¸¦ À§ÇÑ WZU ÆÄÀÏ ¸ñ·Ï St_LHObjectSpecialTexture* m_pObjectSpecialTexture; // ¿ÀºêÁ§Æ® ÅØ½ºÃÄ¿¡ ´ëÇÑ ¸ñ·Ï St_LHObject* m_pObject; // ¿ÀºêÁ§Æ® ÆÄÀÏ¿¡ ´ëÇÑ ¸ñ·Ï St_LHGrassWZU* m_pGrassWZU; // Ç®À» À§ÇÑ WZU ÆÄÀÏ ¸ñ·Ï St_LHSpeedTreeHeader* m_pSpeedTreeHeader; // SpeedTree¿¡ ´ëÇÑ Çì´õ Á¤º¸ St_LHSpeedTree* m_pSpeedTree; // SpeedTree ÆÄÀÏ ¸ñ·Ï St_LHSpeedTreeFile* m_pSpeedTreeFile; // SpeedTree ÆÄÀÏ ¸ñ·Ï St_LHLight* m_pLight; // ¶óÀÌÆ® Á¤º¸ ¸ñ·Ï St_LHTerrainLM* m_TLM; // ÁöÇü ¶óÀÌÆ® ¸Ê Á¤º¸ ¸ñ·Ï St_LHMeshGroupLM* m_LMUV; // ¸Þ½¬ÀÇ ¶óÀÌÆ®¸Ê Á¤º¸ CWzArray< St_LHUnit* > m_Units; // À¯´ÖÀÇ ¸ñ·Ï¿¡ ´ëÇÑ ¹è¿­ CWzArray< St_LHUnitGroup* > m_UnitGroups; // À¯´Ö ±×·ì¿¡ ´ëÇÑ ¹è¿­ St_LHMapOption m_MapOption; // ¸Ê ¿É¼Ç Á¤º¸ ±¸Á¶Ã¼ int m_nObjectWZU; // WZU ÆÄÀÏ °¹¼ö int m_nObjectSpecialTexture; // ¿ÀºêÁ§Æ®¸¦ À§ÇÑ ÅØ½ºÃÄ °¹¼ö int m_nObject; // ¿ÀºêÁ§Æ® °¹¼ö int m_nGrassWZU; // Ç®¿¡ ´ëÇÑ WZU ÆÄÀÏ °¹¼ö int m_nGrassTotal; // Ç®ÀÇ ÃÑ ÀνºÅϽº °¹¼ö int m_nSpeedTree; // SpeedTree °¹¼ö int m_nSpeedTreeFile; // SpeedTree ÆÄÀÏ °¹¼ö int m_nLight; // ¶óÀÌÆ® °¹¼ö DWORD m_NumLMMeshGroup; // ¸Þ½¬ ±×·ì¿¡ ´ëÇÑ ¶óÀÌÆ® ¸ÊÁ¤º¸ °¹¼ö. int m_iLastIndexObjWZU; // WZU¿¡ ÇÒ´çµÈ ¸¶Áö¸· À妽º int m_iLastIndexSpecTex; // ÅØ½ºÃÄ¿¡ ÇÒ´çµÈ ¸¶Áö¸· À妽º int m_iLastIndexObj; // ¿ÀºêÁ§Æ®¿¡ ÇÒ´çµÈ ¸¶Áö¸· À妽º int m_iLastSpeedTreeFile; // ½ºÇÇµå Æ®¸® ÆÄÀÏ¿¡ ÇÒ´çµÈ ¸¶Áö¸· À妽º int m_iLastSpeedTree; // ½ºÇÇµå Æ®¸®¿¡ ÇÒ´çµÈ ¸¶Áö¸· À妽º int m_iLastLight; // ¶óÀÌÆ®¿¡ ´ëÇÑ ¸¶Áö¸· À妽º }; // ¸ÅÅ©·Î #define WZMAPLOADER CLoadHelper::GetSingleton() #endif // _3DTERRAIN_LOADHELPER_H_