// managerwzdloader.h #ifndef _3DRENDERER_MANAGERWZDLOADER_H_ #define _3DRENDERER_MANAGERWZDLOADER_H_ #include "managerbase.h" #include // Wzd Á¤º¸ struct St_WzdContainer { // Wzd ·Îµù »óÅ enum ENUM_LOAD_STATE { ELS_NONE = 0, ELS_LOADING, ELS_LOADED }; CWzdBase* m_pWzd; // Wzd Æ÷ÀÎÅÍ char* m_lpszFileName; // ÆÄÀϸí short m_nReference; // ÂüÁ¶ Ƚ¼ö DWORD m_dwLoadOption; // ·Îµù ¿É¼Ç DWORD m_dwDisc; // Disc ¹øÈ£ DWORD m_dwParam1; // Param1 DWORD m_dwParam2; // Param2 int m_iType; // WZD ŸÀÔ(¸Þ½Ã, ¾Ö´Ï¸ÞÀÌ¼Ç µî) ENUM_LOAD_STATE m_eLoadState; }; //------------------------------------------------------------------------------ /** @class CManagerWzdLoader */ class CManagerWzdLoader : public CManagerBase, protected CWzHandleManager { public: // »ý¼ºÀÚ/¼Ò¸êÀÚ CManagerWzdLoader(); virtual ~CManagerWzdLoader(); // »ý¼º/ÆÄ±« virtual BOOL Create( CDrawBase* pParentDraw, void* pParam ); virtual void Destroy(); // ÀåÄ¡ ¼Ò½Ç/º¹±¸½Ã virtual void OnLostDevice(); virtual void OnResetDevice(); // Wzd ·Îµù virtual HANDLE LoadWzd( const char* lpszFilePath, int iType, DWORD dwLoadOption = 0, float fTextureRate = 1.0f, BOOL bQuick = FALSE, DWORD dwParam1 = 0, DWORD dwParam2 = 0 ); // ½ÇÁ¦ ·Îµù virtual BOOL LoadReally( HANDLE hHandle ); // Wzd ÆÄ±« virtual void DestroyWzd( HANDLE hHandle ); // Wzd Á¤º¸ ÇÚµé ã±â HANDLE FindWzd( const char* lpszFilePath ); // Wzd Á¤º¸ ¾ò±â St_WzdContainer* GetWzdInfo( HANDLE hHandle ); // Wzd µ¥ÀÌŸ ¾ò±â CWzdBase* GetWzd( HANDLE hHandle ); protected: // Wzd Á¤º¸ ÆÄ±« void DestroyWzdInfoPtr( St_WzdContainer* pwc ); // Wzd ÀüºÎ ÆÄ±« void DestroyAllWzd(); // ½ÇÁ¦ ·Îµù BOOL LoadReally( St_WzdContainer* pwc ); // ¸Þ½Ã ÅØ½ºÃ³ ·Îµù/ÆÄ±« void LoadMeshTexture( CWzdBase* pWzd ); void DestroyMeshTexture( CWzdBase* pWzd ); // ¸ðµç Wzd ¹öÅØ½º ¹öÆÛ º¹±¸ void RestoreAllWzdVertexBuffers(); private: // º¯¼ö ÃʱâÈ­ void InitVariables(); // ÇØÁ¦ void ReleaseContents(); protected: CWzHashTableStr m_htsWzd; // Wzd Á¤º¸ ÇÚµé Å×À̺í, ÆÄÀϸíÀ¸·Î ºü¸£°Ô °Ë»ö float m_fTextureRate; // ÅØ½ºÃ³ Å©±â ºñÀ² WzDeclare_Sync( Wzd ); WzDeclare_Sync( WzdLoading ); }; //------------------------------------------------------------------------------ /** */ inline HANDLE CManagerWzdLoader::FindWzd( const char* lpszFilePath ) { WzSync_This( Wzd ); WzAssert( lpszFilePath ); HANDLE hFind = m_htsWzd.GetC( lpszFilePath ); return ( hFind == 0 ? INVALID_HANDLE_VALUE : hFind ); } //------------------------------------------------------------------------------ /** */ inline St_WzdContainer* CManagerWzdLoader::GetWzdInfo( HANDLE hHandle ) { WzSync_This( Wzd ); St_WzdContainer* pwc = GetData( hHandle ); if( pwc && pwc->m_eLoadState == St_WzdContainer::ELS_LOADED ) { return pwc; } return NULL; } //------------------------------------------------------------------------------ /** */ inline CWzdBase* CManagerWzdLoader::GetWzd( HANDLE hHandle ) { WzSync_This( Wzd ); St_WzdContainer* pwc = GetData( hHandle ); if( pwc && pwc->m_pWzd && pwc->m_pWzd->CheckFlag( WZDF_LOADED ) ) { return pwc->m_pWzd; } return NULL; } #endif // _3DRENDERER_MANAGERWZDLOADER_H_