#include "StdAfx.h" #include "DnMainFrame.h" #include "DnTableDB.h" #include "DNTableFile.h" #include "DnActionBase.h" #include "DnWorld.h" #include "DebugSet.h" #include "EtCollisionMng.h" #include "EtActionCoreMng.h" #ifdef PRE_FIX_MEMOPT_EXT #include "DNGameDataManager.h" #endif // ETC #include extern TGameConfig g_Config; CDnMainFrame::CDnMainFrame() { m_pTableDB = NULL; m_pUIXML = NULL; m_pResMng = CEtResourceMng::IsActive() ? CEtResourceMng::GetInstancePtr() :new CEtResourceMng( false, !g_Config.bPreLoad ); #ifdef PRE_ADD_EXCEPTIONAL_MAKESTRING m_pExceptionalUIXML = NULL; #endif // PRE_ADD_EXCEPTIONAL_MAKESTRING InitializeLocalize(); } CDnMainFrame::~CDnMainFrame() { Finalize(); FinalizeDevice(); if( CEtResourceMng::IsActive()) delete CEtResourceMng::GetInstancePtr(); } void CDnMainFrame::InitializeLocalize() { } bool CDnMainFrame::PreInitialize() { // TODO(Cussrro): 固定资源路径 std::string path = ".\\GameRes"; g_Config.szResourcePath = path; // Path 설정 std::string szResource = g_Config.szResourcePath + "\\Resource"; std::string szMapData = g_Config.szResourcePath + "\\MapData"; // 국가별 셋팅 std::string szNationStr; if( szNationStr.empty() && !g_Config.szResourceNation.empty() ) szNationStr = g_Config.szResourceNation; if( !szNationStr.empty() ) { szResource += szNationStr; szMapData += szNationStr; CEtResourceMng::GetInstance().AddResourcePath( szResource, true ); CEtResourceMng::GetInstance().AddResourcePath( szMapData, true ); szResource = g_Config.szResourcePath + "\\Resource"; szMapData = g_Config.szResourcePath + "\\MapData"; } CEtResourceMng::GetInstance().AddResourcePath( szResource, true ); CEtResourceMng::GetInstance().AddResourcePath( szMapData, true ); // DB Load if( m_pTableDB ) SAFE_DELETE( m_pTableDB ); m_pTableDB = new CDnTableDB; m_pTableDB->Initialize(); CDebugSet::Initialize( CEtResourceMng::GetInstance().GetCurrentDirectory().c_str(), true ); // UI XML String File Load m_pUIXML = new CEtUIXML; #if defined(PRE_ADD_MULTILANGUAGE) std::string strNationFileName; #ifdef PRE_ADD_UISTRING_DIVIDE std::string strNationItemFileName; #endif // #ifdef PRE_ADD_UISTRING_DIVIDE for (int i = 0; i < MultiLanguage::SupportLanguage::NationMax; i++) { strNationFileName.clear(); strNationFileName = "uistring"; if (i != 0) //0번은 디폴트 strNationFileName.append(MultiLanguage::NationString[i]); strNationFileName.append(".xml"); CStream *pStream = CEtResourceMng::GetInstance().GetStream( strNationFileName.c_str() ); m_pUIXML->Initialize( pStream, CEtUIXML::idCategory1, i ); SAFE_DELETE( pStream ); strNationFileName.clear(); #ifdef PRE_ADD_UISTRING_DIVIDE strNationItemFileName = "uistring_item"; if (i != 0) //0번은 디폴트 strNationItemFileName.append(MultiLanguage::NationString[i]); strNationItemFileName.append(".xml"); pStream = CEtResourceMng::GetInstance().GetStream( strNationItemFileName.c_str() ); m_pUIXML->Initialize( pStream, CEtUIXML::idCategory1, i, true ); SAFE_DELETE( pStream ); #endif } #else //#if defined(PRE_ADD_MULTILANGUAGE) CStream *pStream = CEtResourceMng::GetInstance().GetStream( "uistring.xml" ); m_pUIXML->Initialize( pStream, CEtUIXML::idCategory1 ); SAFE_DELETE( pStream ); #ifdef PRE_ADD_UISTRING_DIVIDE pStream = CEtResourceMng::GetInstance().GetStream( "uistring_item.xml" ); m_pUIXML->Initialize( pStream, CEtUIXML::idCategory1 ); SAFE_DELETE( pStream ); #endif // #ifdef PRE_ADD_UISTRING_DIVIDE #endif //#if defined(PRE_ADD_MULTILANGUAGE) #ifdef PRE_ADD_EXCEPTIONAL_MAKESTRING m_pExceptionalUIXML = new CEtExceptionalUIXML; if( m_pExceptionalUIXML ) m_pExceptionalUIXML->LoadXML( "uistring_exception.xml" ); #endif // PRE_ADD_EXCEPTIONAL_MAKESTRING return true; } bool CDnMainFrame::InitializeDevice() { CEtResource::Initialize( !g_Config.bPreLoad ); CEtActionCoreMng::GetInstance().Initialize( !g_Config.bPreLoad ); return true; } bool CDnMainFrame::FinalizeDevice() { return true; } bool CDnMainFrame::Initialize() { if( g_Config.bPreLoad ) { g_Log.Log(LogType::_FILELOG, L"Begin PreLoading...\n"); PreloadResource(); g_Log.Log(LogType::_FILELOG, L"Complete PreLoad.\n"); } return true; } bool CDnMainFrame::Finalize() { SAFE_DELETE( m_pTableDB ); SAFE_DELETE( m_pUIXML ); #ifdef PRE_ADD_EXCEPTIONAL_MAKESTRING SAFE_DELETE( m_pExceptionalUIXML ); #endif // PRE_ADD_EXCEPTIONAL_MAKESTRING g_ActionCoreMng.Finalize(); FinalizePreloadFile(); return true; } void CDnMainFrame::InitializeMultiCommon(int iCnt, std::vector * vList) { //InitializeMultiThread(); } void CDnMainFrame::SetMultiThreadID(unsigned int iID) { } bool CDnMainFrame::PreloadResource() { // Actor Table g_Log.Log(LogType::_FILELOG, L"PreLoad - Actor Table\n"); PreloadSkinFile( CDnTableDB::TACTOR, "_SkinName" ); PreloadAniFile( CDnTableDB::TACTOR, "_AniName" ); PreloadActFile( CDnTableDB::TACTOR, "_ActName" ); // Parts Table g_Log.Log(LogType::_FILELOG, L"PreLoad - Parts Table\n"); char szLable[64]; for( int i=0; i<10; i++ ) { sprintf_s( szLable, "_Player%d_SkinName", i + 1 ); PreloadSkinFile( CDnTableDB::TPARTS, szLable ); sprintf_s( szLable, "_Player%d_AniName", i + 1 ); PreloadAniFile( CDnTableDB::TPARTS, szLable ); sprintf_s( szLable, "_Player%d_ActName", i + 1 ); PreloadActFile( CDnTableDB::TPARTS, szLable ); } // Weapon Table g_Log.Log(LogType::_FILELOG, L"PreLoad - Weapon Table\n"); PreloadSkinFile( CDnTableDB::TWEAPON, "_SkinName" ); PreloadAniFile( CDnTableDB::TWEAPON, "_AniName" ); PreloadActFile( CDnTableDB::TWEAPON, "_ActName" ); // Item Table g_Log.Log(LogType::_FILELOG, L"PreLoad - Item Table\n"); PreloadSkinFile( CDnTableDB::TITEM, "_DropSkinName" ); PreloadAniFile( CDnTableDB::TITEM, "_DropAniName" ); PreloadActFile( CDnTableDB::TITEM, "_DropActName" ); // World char szWorldFolder[_MAX_PATH]; char szPath[_MAX_PATH]; sprintf_s( szWorldFolder, CEtResourceMng::GetInstance().GetFullPath( "MapData" ).c_str() ); sprintf_s( szPath, "%s\\Resource\\Tile", szWorldFolder ); CEtResourceMng::GetInstance().AddResourcePath( szPath, true ); sprintf_s( szPath, "%s\\Resource\\Prop", szWorldFolder ); CEtResourceMng::GetInstance().AddResourcePath( szPath, true ); sprintf_s( szPath, "%s\\Resource\\Envi", szWorldFolder ); CEtResourceMng::GetInstance().AddResourcePath( szPath, true ); sprintf_s( szPath, "%s\\Resource\\Trigger", szWorldFolder ); CEtResourceMng::GetInstance().AddResourcePath( szPath, true ); // Grid g_Log.Log(LogType::_FILELOG, L"PreLoad - Grid\n"); DNTableFileFormat* pSox = GetDNTable( CDnTableDB::TMAP ); int nItemID; char szStr[64]; char szGridPath[_MAX_PATH]; char szFullName[_MAX_PATH]; char *szInfoFileList[] = { "gridinfo.ini", "0_0\\default.ini", "0_0\\eventareainfo.ini", "0_0\\height.ini", "0_0\\heightattribute.ini", "0_0\\navigation.ini", "0_0\\propinfo.ini", "0_0\\textable.ini", "0_0\\trigger.ini", "0_0\\triggerdefine.ini", "0_0\\sectorsize.ini", "0_0\\soundinfo.ini", "0_0\\grasstable.ini", "0_0\\alphatable.ini", "0_0\\colbuild.ini", NULL }; CEtResourceMng::GetInstance().AddCacheMemoryStream( "Infomation" ); for( int i=0; iGetItemCount(); i++ ) { nItemID = pSox->GetItemID(i); for( int j=0; j<10; j++ ) { std::string szGridName; sprintf_s( szStr, "_ToolName%d", j + 1 ); szGridName = pSox->GetFieldFromLablePtr( nItemID, szStr )->GetString(); if( szGridName.empty() ) continue; sprintf_s( szGridPath, "%s\\Grid\\%s", szWorldFolder, szGridName.c_str() ); for( int k=0; ; k++ ) { if( szInfoFileList[k] == NULL ) break; sprintf_s( szFullName, "%s\\%s", szGridPath, szInfoFileList[k] ); CEtResourceMng::GetInstance().AddCacheMemoryStream( szFullName ); if( strstr( szFullName, "colbuild.ini" ) ) { CStream *pStream = CEtResourceMng::GetInstance().GetCacheMemoryStream( szFullName ); if( pStream ) CEtCollisionMng::PreLoad( pStream ); } } } } // World Prop g_Log.Log(LogType::_FILELOG, L"PreLoad - Prop\n"); std::vector szVecFileList; sprintf_s( szFullName, "%s\\Resource\\Prop", szWorldFolder ); FindFileListInDirectory( szFullName, "*.*", szVecFileList, false, true ); for( DWORD i=0; iGetItemCount(); i++ ) { int nItemID = pSox->GetItemID(i); #ifdef PRE_FIX_MEMOPT_EXT g_pDataManager->GetFileNameFromFileEXT(szFileName, pSox, nItemID, szLable, pFileNameSox); #else szFileName = pSox->GetFieldFromLablePtr( nItemID, szLable )->GetString(); #endif if( !szFileName.empty() && szFileName != "0" ) { /* hResource = EternityEngine::LoadSkin( NULL, CEtResourceMng::GetInstance().GetFullName( szFileName ).c_str() ); if( hResource ) m_hVecEngineResList.push_back( hResource ); */ PreloadSkinFile( szFileName.c_str() ); } } } void CDnMainFrame::PreloadAniFile( int nTableID, char *szLable ) { DNTableFileFormat* pSox = GetDNTable( (CDnTableDB::TableEnum)nTableID ); std::string szFileName; // EtResourceHandle hResource; #ifdef PRE_FIX_MEMOPT_EXT DNTableFileFormat* pFileNameSox = GetDNTable(CDnTableDB::TFILE); if (pSox == NULL || pFileNameSox == NULL) { _ASSERT(0); return; } #endif for( int i=0; iGetItemCount(); i++ ) { int nItemID = pSox->GetItemID(i); #ifdef PRE_FIX_MEMOPT_EXT g_pDataManager->GetFileNameFromFileEXT(szFileName, pSox, nItemID, szLable, pFileNameSox); #else szFileName = pSox->GetFieldFromLablePtr( nItemID, szLable )->GetString(); #endif if( !szFileName.empty() && szFileName != "0" ) { /* hResource = EternityEngine::LoadAni( NULL, CEtResourceMng::GetInstance().GetFullName( szFileName ).c_str() ); if( hResource ) m_hVecEngineResList.push_back( hResource ); */ PreloadAniFile( szFileName.c_str() ); } } } void CDnMainFrame::PreloadActFile( int nTableID, char *szLable ) { DNTableFileFormat* pSox = GetDNTable( (CDnTableDB::TableEnum)nTableID ); std::string szFileName; #ifdef PRE_FIX_MEMOPT_EXT DNTableFileFormat* pFileNameSox = GetDNTable(CDnTableDB::TFILE); if (pSox == NULL || pFileNameSox == NULL) { _ASSERT(0); return; } #endif // CDnActionBase *pBase = NULL; for( int i=0; iGetItemCount(); i++ ) { int nItemID = pSox->GetItemID(i); #ifdef PRE_FIX_MEMOPT_EXT g_pDataManager->GetFileNameFromFileEXT(szFileName, pSox, nItemID, szLable, pFileNameSox); #else szFileName = pSox->GetFieldFromLablePtr( nItemID, szLable )->GetString(); #endif if( !szFileName.empty() && szFileName != "0" ) { /* pBase = new CDnActionBase; if( pBase->LoadAction( CEtResourceMng::GetInstance().GetFullName( szFileName ).c_str() ) ) { m_pVecActionList.push_back( pBase ); } else { SAFE_DELETE( pBase ); } */ PreloadActFile( szFileName.c_str() ); } } } void CDnMainFrame::PreloadSkinFile( const char *szFileName ) { EtResourceHandle hResource = EternityEngine::LoadSkin( NULL, CEtResourceMng::GetInstance().GetFullName( szFileName ).c_str() ); if( hResource ) m_hVecEngineResList.push_back( hResource ); } void CDnMainFrame::PreloadAniFile( const char *szFileName ) { EtResourceHandle hResource = EternityEngine::LoadAni( NULL, CEtResourceMng::GetInstance().GetFullName( szFileName ).c_str() ); if( hResource ) m_hVecEngineResList.push_back( hResource ); } void CDnMainFrame::PreloadActFile( const char *szFileName ) { CDnActionBase *pBase = new CDnActionBase; if( pBase->LoadAction( CEtResourceMng::GetInstance().GetFullName( szFileName ).c_str() ) ) { m_pVecActionList.push_back( pBase ); } else { SAFE_DELETE( pBase ); } } void CDnMainFrame::FinalizePreloadFile() { SAFE_RELEASE_SPTRVEC( m_hVecEngineResList ); SAFE_DELETE_PVEC( m_pVecActionList ); SAFE_DELETE_PVEC( m_pVecWorldList ); }