// effectmanager.h #ifndef _EFFECT_EFFECTMANAGER_H_ #define _EFFECT_EFFECTMANAGER_H_ // xxx: ¿ÜºÎ¿¡¼­ º» ÆÄÀÏÀ» Á÷Á¢ includeÇÏ´Â °æ¿ì°¡ À־ // typedef.h¸¦ includeÇß´Ù. #include "typedef.h" #include #include #include #include #include "createinfo/bodycreate.h" #include "loadmanager.h" #include #ifndef LAST_RELEASE #include "effectdebuginfo.h" extern WZEFF_API St_EffDbgInfo g_effDbgInfo; #endif #define DIST_FROM_NEAR 56.0f class CDrawBase; class CWorldBase; class CEffectBody; class CMemoryManager; class CSoundInfoManager; //------------------------------------------------------------------------------ /** @class CEffectManager */ class CEffectManager : public CWzSingleton { struct sEffectTexture { WzID m_TextureID; std::string m_TexturePath; HANDLE m_TextureHandle; }; std::vector m_TextureArray; public: // »ý¼ºÀÚ/¼Ò¸êÀÚ CEffectManager(); virtual ~CEffectManager(); // »ý¼º/ÆÄ±« WZEFF_API bool Create( CDrawBase* pDraw, CWorldBase* pWorld ); WZEFF_API void Destroy(); // ÅØ½ºÃ³ ÆÄÀÏ ¸ñ·ÏÀ» ·Îµå WZEFF_API bool LoadTextureFiles( const char* pszDefaultFolder, const char* pszFileName, EENUM_LOAD_TYPE eLoadType = EELT_ADD ); // ·ÎµåµÈ ÀÌÆåÆ® ÅØ½ºÃĸ¦ Á¦°Å WZEFF_API void ReleaseEffectTexture(); // ¸Þ½Ã ÆÄÀÏ ·Îµù WZEFF_API bool LoadMeshFiles( const char* pszDefaultFolder, const char* pszFileName, EENUM_LOAD_TYPE eLoadType = EELT_ADD ); // ÀÌÆåÆ® »ý¼º Á¤º¸µé µî·Ï (¸ñ·Ï ÆÄÀϷκÎÅÍ) WZEFF_API bool LoadEffectFromFile( const char* pszListFilePath, const char* pszEffFolderPath, EENUM_LOAD_TYPE eLoadType = EELT_ADD, int nLevel = 0 ); // ÇØ´ç ¸ñ·ÏÀÇ ÀÌÆåÆ®µé Á¦°Å WZEFF_API void UnLoadEffectFromFile( const char* pszListFilePath ); // ÆÄÀÏ ·Îµù WZEFF_API St_BodyCreate* Load( DA_FILE hf, WzID wzId = 0 ); WZEFF_API St_BodyCreate* Load( const char* pszFilePath, WzID wzID ); // ÆÄÀÏ ÀúÀå WZEFF_API bool Save( DA_FILE hf, WzID wzId ); WZEFF_API bool Save( const char* pszFilePath, WzID wzId ); // ele Á¤º¸ ·Îµå/ÀúÀå/Á¦°Å WZEFF_API St_Ele_Node* LoadEleInfo( DA_FILE hf ); WZEFF_API void SaveEleInfo( DA_FILE hf, St_Ele_Node* pEleinfo ); WZEFF_API void DeleteEleInfo( St_Ele_Node* pNodeinfo ); // ÀÌÆåÆ® »ý¼º Á¤º¸ µî·Ï WZEFF_API void RegisterEffectInfo( const St_BodyCreate* pEffectBody ); // ºó ÀÌÆåÆ® »ý¼º Á¤º¸ Ãß°¡ WZEFF_API bool AddEffectInfo( WzID wzID ); // ÀÌÆåÆ® Á¤º¸ ¾ò±â WZEFF_API St_BodyCreate* GetEffectInfo( WzID wzID ); // ÀÌÆåÆ® »ý¼º Á¤º¸ Á¦°Å WZEFF_API void ReleaseAllEffectInfo(); WZEFF_API void ReleaseAtEffectInfo( WzID wzID ); // ÀÌÆåÆ® »ý¼º WZEFF_API HANDLE CreateEffect( WzID wzEffID, const WzVector& wvPos, const WzVector& wvScale, const WzVector& wvRot, int iRate = 100 ); WZEFF_API HANDLE CreateEffect( WzID wzEffID, const WzVector& wvPos, int iRate = 100 ); WZEFF_API HANDLE CreateEffect( WzID wzEffID, const WzVector& wvPos, const WzVector& wvScale, int iRate = 100 ); // ¼±ÅÃµÈ element¸¸ »ý¼º(Àç»ý) - Åø¿¡¼­ »ç¿ë WZEFF_API HANDLE CreateSelectedElements( WzID wzEffID, const WzVector& wvPos, std::list* pSelList ); // ÇÚµé·Î EffectBody Æ÷ÀÎÅÍ ¾ò±â WZEFF_API CEffectBody* GetEffectPtrHandle( HANDLE hHandle ); // »ý¼ºµÈ ÀÌÆåÆ® ÆÄ±« WZEFF_API void DestroyAllEffect(); WZEFF_API void RemoveEffectPtr( HANDLE hHandle ); // ÀÌÆåÆ® ó¸®/·£´õ¸µ (ÇÁ·¹ÀÓ´ç Çѹø È£Ãâ) WZEFF_API void Move( DWORD dwTick ); WZEFF_API void Render(); // ¸Þ¸ð¸®Ç® Àç»ý¼º WZEFF_API void ShrinkMemoryPool(); // »ç¿îµå Á¤º¸ ÃʱâÈ­ WZEFF_API void ClearSoundInfos(); // ÀÚµ¿ »ý¼º ·¹º§ Á¶Àý ÆÄ¶ó¹ÌÅÍ ¸®½ºÆ® ÃʱâÈ­ WZEFF_API void ClearAutoLvlCtlParams(); // ÀÚµ¿ »ý¼º ·¹º§ Á¶Àý ÆÄ¶ó¹ÌÅÍ Ãß°¡ WZEFF_API void AddAutoLvlCtlParam( int iFrame, int iLvl ); // ÀÚµ¿ »ý¼º ºñÀ² Á¶Àý ÆÄ¶ó¹ÌÅÍ ¸®½ºÆ® ÃʱâÈ­ WZEFF_API void ClearAutoRateCtlParams(); // ÀÚµ¿ »ý¼º ºñÀ² Á¶Àý ÆÄ¶ó¹ÌÅÍ Ãß°¡ WZEFF_API void AddAutoRateCtlParam( int iFrame, int iRate ); // ÀÌÆåÆ® LOD ÆÄ¶ó¹ÌÅÍ ¸®½ºÆ® ÃʱâÈ­ WZEFF_API void ClearEffectLODParams(); // ÀÌÆåÆ® LOD ÆÄ¶ó¹ÌÅÍ Ãß°¡ WZEFF_API void AddEffectLODParam( float fDist, int iRate ); // ÀÌÆåÆ® ·£´õ Äѱâ/²ô±â WZEFF_API void SetRenderEffect(bool bRender); // ÀÌÆåÆ® ·£´õ »óÅ ¾ò±â WZEFF_API bool IsRenderEffect(); #ifdef _DEBUG // MILKY µð¹ö±×¿ë WZEFF_API long GetTotalMemorySize(); WZEFF_API long GetTotalFreeMemorySize(); WZEFF_API long GetEffectCount(); #endif // ÅØ½ºÃ³ ÆÄÀÏ ¸ñ·Ï ¾ò±â const CLoadBaseManager& GetLoadTextureMG() const; // ¸Þ½Ã ÆÄÀÏ ¸ñ·Ï ¾ò±â const CLoadBaseManager& GetLoadMeshMG() const; // ¸Þ¸ð¸® ¸Å´ÏÀú ¾ò±â CMemoryManager* GetMemoryManager(); // »ç¿îµå Á¤º¸ ¸Å´ÏÀú ¾ò±â CSoundInfoManager* GetSoundInfoManager(); // CDiscAccess ¼³Á¤/¾ò±â void SetDiscAccess( CDiscAccess* pDiscAccess ); CDiscAccess* GetDiscAccess(); // ¿ùµå ¼³Á¤/¾ò±â void SetWorld( CWorldBase* pWorld ); CWorldBase* GetWorld(); // CDrawBase ¾ò±â CDrawBase* GetDraw(); // ÀÌÆåÆ® º£À̽º ·¹º§ ¼³Á¤ void SetBaseEffectLevel( int lvel ); int GetBaseEffectLevel(); // »ý¼ºµÈ ÀÌÆåÆ® ¼ö int GetNumCreatedEffects() const; // ¿É¼Ç ÃʱâÈ­ void ClearOption(); // ¿É¼Ç ¼³Á¤ void SetOption( DWORD flag ); // ¿É¼Ç Á¦°Å void UnsetOption( DWORD flag ); // ¿É¼Ç °Ë»ç bool CheckOption( DWORD flag ) const; // HANDLE GetEffectTexture( WzID EffectTextureID ); private: // ÃʱâÈ­ void Initialize(); // ·ÎµùµÈ ÅØ½ºÃ³/¸Þ½Ã ÆÄÀÏ Á¦°Å void RemoveTextureFiles(); void RemoveMeshFiles(); // Body »ý¼º Á¤º¸ ·Îµù/ÀúÀå void LoadBodyInfoOld( DA_FILE hf, St_BodyCreate* pInfo ); void LoadBodyInfo( DA_FILE hf, St_BodyCreate* pInfo ); void SaveBodyInfo( DA_FILE hf, St_BodyCreate* pInfo ); // Element »ý¼º Á¤º¸ ·Îµù/ÀúÀå void LoadElementInfo( DA_FILE hf, St_ElementCreate* pInfo ); void SaveElementInfo( DA_FILE hf, St_ElementCreate* pInfo ); // »ý¼º Á¤º¸/ÀúÀå void LoadCreateInfo( DA_FILE hf, St_Create_Info* pInfo ); void SaveCreateInfo( DA_FILE hf, St_Create_Info* pInfo ); // À̵¿ Á¤º¸/ÀúÀå void LoadMoveInfo( DA_FILE hf, St_Move_Info* pInfo ); void SaveMoveInfo( DA_FILE hf, St_Move_Info* pInfo ); // Change Á¤º¸/ÀúÀå void LoadChangeInfo( DA_FILE hf, St_Change_Info* pInfo ); void SaveChangeInfo( DA_FILE hf, St_Change_Info* pInfo ); // Visual Á¤º¸/ÀúÀå void LoadVisualInfo( DA_FILE hf, St_Visual_Info* pInfo ); void SaveVisualInfo( DA_FILE hf, St_Visual_Info* pInfo ); // element »ý¼º (½ÇÁ¦ ÀÌÆåÆ® »ý¼º) bool CreateElement( CEffectBody* pEffBody, const St_BodyCreate* pBodyCreate, int iRate = 100 ); // »ý¼º ÀÌÆåÆ® ·¹º§ Á¶Àý void AdjustCreateEffectLevel(); // ÀÌÆåÆ® ºñÀ² Á¶Àý void AdjustEffectRate(); public: typedef stdext::hash_map stdBodyCreateMap; typedef stdext::hash_map stdEffectBodyMap; typedef std::vector stdAutoCtlParams; typedef std::vector stdEffLODParams; CDrawBase* m_pDrawRef; CWorldBase* m_pWorldRef; CDiscAccess* m_pDiscAccess; CMemoryManager* m_pMemManager; CSoundInfoManager* m_pSoundInfoManager; CLoadBaseManager m_cLoadTextureMG; CLoadBaseManager m_cLoadMeshMG; CWzHandleManager m_hmEffect; stdBodyCreateMap m_htEffSaveData; stdEffectBodyMap m_hmEffectMG; char m_szEffectVer[10]; CWzFlag m_optFlag; stdAutoCtlParams m_autoLvlCtlParams; stdAutoCtlParams m_autoRateCtlParams; stdEffLODParams m_effLODParams; int m_nBaseEffectLvl; int m_nCreateEffectLvl; int m_nEffectRate; bool m_bRenderEffet; public: WZEFF_API stdEffectBodyMap& GetEffectBodyMap() { return m_hmEffectMG; } const stdBodyCreateMap& GetEffSaveData() const { return m_htEffSaveData; } #ifdef _USE_ENGINE_MEMORY_POOL_ template T* AllocNew(); template void AllocDelete(T* ptr); void CopyBody(St_BodyCreate* rhs, St_BodyCreate* lhs); void ReleaseBody(St_BodyCreate* pBody); #endif //_USE_ENGINE_MEMORY_POOL_ }; //------------------------------------------------------------------------------ /** */ inline void CEffectManager::DeleteEleInfo( St_Ele_Node* pNodeinfo ) { SAFE_DELETE( pNodeinfo ); } //------------------------------------------------------------------------------ /** */ inline HANDLE CEffectManager::CreateEffect( WzID wzEffID, const WzVector& wvPos, int iRate ) { static WzVector wvScale = { 1.0f, 1.0f, 1.0f }; static WzVector wvRot = { 0.0f, 0.0f, 0.0f }; return CreateEffect( wzEffID, wvPos, wvScale, wvRot, iRate ); } //------------------------------------------------------------------------------ /** */ inline HANDLE CEffectManager::CreateEffect( WzID wzEffID, const WzVector& wvPos, const WzVector& wvScale, int iRate ) { static WzVector wvRot = { 0.0f, 0.0f, 0.0f }; return CreateEffect( wzEffID, wvPos, wvScale, wvRot, iRate ); } //------------------------------------------------------------------------------ /** */ inline const CLoadBaseManager& CEffectManager::GetLoadTextureMG() const { return m_cLoadTextureMG; } //------------------------------------------------------------------------------ /** */ inline const CLoadBaseManager& CEffectManager::GetLoadMeshMG() const { return m_cLoadMeshMG; } //------------------------------------------------------------------------------ /** */ inline CMemoryManager* CEffectManager::GetMemoryManager() { return m_pMemManager; } //------------------------------------------------------------------------------ /** */ inline CSoundInfoManager* CEffectManager::GetSoundInfoManager() { return m_pSoundInfoManager; } //------------------------------------------------------------------------------ /** */ inline void CEffectManager::SetDiscAccess( CDiscAccess* pDiscAccess ) { WzAssert( pDiscAccess ); m_pDiscAccess = pDiscAccess; } //------------------------------------------------------------------------------ /** */ inline CDiscAccess* CEffectManager::GetDiscAccess() { return m_pDiscAccess; } //------------------------------------------------------------------------------ /** */ inline void CEffectManager::SetWorld( CWorldBase* pWorld ) { // »ý¼ºµÈ ÀÌÆåÆ® ¸ðµÎ ÆÄ±« DestroyAllEffect(); m_pWorldRef = pWorld ; } //------------------------------------------------------------------------------ /** */ inline CWorldBase* CEffectManager::GetWorld() { return m_pWorldRef; } //------------------------------------------------------------------------------ /** */ inline CDrawBase* CEffectManager::GetDraw() { return m_pDrawRef; } //------------------------------------------------------------------------------ /** */ inline void CEffectManager::SetBaseEffectLevel( int lvl ) { m_nBaseEffectLvl = lvl; } //------------------------------------------------------------------------------ /** */ inline int CEffectManager::GetBaseEffectLevel() { return m_nBaseEffectLvl; } //------------------------------------------------------------------------------ /** */ inline int CEffectManager::GetNumCreatedEffects() const { return (int)m_hmEffectMG.size(); } //------------------------------------------------------------------------------ /** */ inline void CEffectManager::ClearOption() { m_optFlag.Clear(); } //------------------------------------------------------------------------------ /** */ inline void CEffectManager::SetOption( DWORD flag ) { m_optFlag.Set( flag ); } //------------------------------------------------------------------------------ /** */ inline void CEffectManager::UnsetOption( DWORD flag ) { m_optFlag.Unset( flag ); } //------------------------------------------------------------------------------ /** */ inline bool CEffectManager::CheckOption( DWORD flag ) const { return m_optFlag.Check( flag ); } //------------------------------------------------------------------------------ /** */ inline void CEffectManager::SetRenderEffect(bool bRender) { m_bRenderEffet = bRender; } //------------------------------------------------------------------------------ /** */ inline bool CEffectManager::IsRenderEffect() { return m_bRenderEffet; } #endif // _EFFECT_EFFECTMANAGER_H_