// managerwzunitloader.h #ifndef _3DRENDERER_MANAGERWZUNITLOADER_H_ #define _3DRENDERER_MANAGERWZUNITLOADER_H_ #include "managerbase.h" #include // ÅØ½ºÃÄ ·Îµå ½ºÅ¸ÀÏ #define ULS_DEFAULT (0x00000000) #define ULS_HALFSIZE_TEXTURE (0x00000001) // ·Îµå½Ã ÅØ½ºÃ³ Å©±â¸¦ ¹ÝÀ¸·Î #define ULS_INSTANCING (0x00000002) // ÀνºÅÏ½Ì °¡´É #define ULS_UNIT_LIGHTMAP (0x00000004) // À¯´Ö ¶óÀÌÆ®¸Ê °¡´É #define ULS_CHECK_VALID_ANIMATION (0x00000008) // »ç¿ë ¾ÈÇÔ #define ULS_NO_MULTITHREAD (0x00000010) // ¸ÖƼ ½º·¹µå ·Îµù ¾ÈÇÔ class CWzUnit; struct St_WzUnitContainer { CWzUnit* m_pUnit; short m_nReference; // ÂüÁ¶ Ä«¿îÆ® }; //------------------------------------------------------------------------------ /** @class CManagerWzUnitLoader */ class CManagerWzUnitLoader : public CManagerBase { public: // »ý¼ºÀÚ/¼Ò¸êÀÚ CManagerWzUnitLoader(); virtual ~CManagerWzUnitLoader(); // »ý¼º/ÆÄ±« virtual BOOL Create( CDrawBase* pParentDraw, void* pParam ); virtual void Destroy(); // À¯´Ö ·Îµù virtual WzID LoadWzUnit( WzID widType, const char* lpszFilePath, BOOL bAutoLoadWzd = TRUE, // »ç¿ë ¾ÈÇÔ DWORD dwLoadStyle = ULS_DEFAULT, float fTextureRate = -1.0f ); // À¯´Ö Ãß°¡ (¿ÜºÎ¿¡¼­ Á÷Á¢ È£ÃâÇÏ´Â °æ¿ì) virtual WzID AddWzUnit( CWzUnit* pUnit, BOOL bAutoLoadWzd = TRUE, // »ç¿ë ¾ÈÇÔ DWORD dwLoadStyle = ULS_DEFAULT ); // À¯´Ö ÆÄ±« virtual void DestroyWzUnit( WzID widType ); // À¯´Ö ¾ò±â CWzUnit* GetWzUnit( WzID widType ); // wzm °æ·Î ¼³Á¤ void SetFolderToLoadWzm( const char* lpszFolder ); protected: // ±âÁ¸¿¡ ÀÖÀ¸¸é ÂüÁ¶ Ä«¿îÅÍ Áõ°¡ BOOL AddRefCountIfExist( WzID widType ); // À¯´Ö Á¤º¸ Ãß°¡ WzID AddWzUnitInfo( CWzUnit* pUnit, DWORD dwLoadStyle ); // À¯´Ö ÆÄ±« void DestroyWzUnitPtr( CWzUnit* pUnit); void DestroyAllWzUnit(); // À¯´Ö µ¥ÀÌŸ ·Îµù/ÆÄ±« BOOL LoadWzUnitData( CWzUnit* pUnit, DWORD dwLoadStyle ); void DestroyWzUnitData( CWzUnit* pUnit ); // ¸Þ½Ã µ¥ÀÌŸ ·Îµù/ÆÄ±« BOOL LoadMeshData( CWzUnit* pUnit, DWORD dwLoadStyle ); void DestroyMeshData( CWzUnit* pUnit ); // ¸ÊÇÎ µ¥ÀÌŸ ·Îµù/ÆÄ±« BOOL LoadMapData( CWzUnit* pUnit, DWORD dwLoadStyle ); void DestroyMapData( CWzUnit* pUnit ); // ¾Ö´Ï¸ÞÀÌ¼Ç µ¥ÀÌŸ ·Îµù/ÆÄ±« BOOL LoadAnimData( CWzUnit* pUnit, DWORD dwLoadStyle ); void DestroyAnimData( CWzUnit* pUnit ); // ÅØ½ºÃ³ ·Îµù ¿É¼Ç¿¡ ·Îµù ½ºÅ¸ÀÏ Àû¿ë void ApplyLoadStyleToTexLoadOpt( DWORD& dwTexOpt, DWORD dwLoadStyle ); #ifdef _DEBUG public: virtual long GetMemorySize(); #endif private: // º¯¼ö ÃʱâÈ­ void InitVariables(); // ÇØÁ¦ void ReleaseContents(); protected: CWzHashTable m_htWzUnit; char m_szWzdPath[MAX_PATH]; float m_fTextureRate; }; //------------------------------------------------------------------------------ /** */ inline CWzUnit* CManagerWzUnitLoader::GetWzUnit( WzID widType ) { St_WzUnitContainer* pwuc = m_htWzUnit.Get( widType ); if( pwuc ) { return pwuc->m_pUnit; } return NULL; } //------------------------------------------------------------------------------ /** */ inline void CManagerWzUnitLoader::SetFolderToLoadWzm( const char* lpszFolder ) { WzAssert( lpszFolder ); strcpy( m_szWzdPath, lpszFolder ); } #endif // _3DRENDERER_MANAGERWZUNITLOADER_H_