bool COptionsManager::WriteGameCfg() { FILE* pFile = fxopen("%USER%/game.cfg", "wb"); if (pFile == 0) return false; fputs("-- [Game-Configuration]\r\n",pFile); fputs("-- Attention: This file is re-generated by the system! Editing is not recommended! \r\n\r\n",pFile); CCVarSink sink (this, pFile); gEnv->pConsole->DumpCVars(&sink); fclose(pFile); return true; }
// Description: // // Arguments: // // Return: // bool CVisualLog::OpenLogs() { m_sFormat = m_pCVVisualLogImageFormat->GetString(); m_eFormat = GetFormatType( m_sFormat ); m_sLogFolder = m_pCVVisualLogFolder->GetString(); int iLogFolderLen = m_sLogFolder.length(); // Check we have good params to use if ( m_eFormat == EVLF_NONE || iLogFolderLen == 0 ) { GameWarning( "[VisualLog] File format or log folder value invalid" ); return false; } // Create base directory if necessary CryCreateDirectory( m_sLogFolder ); // Figure out next number in sequence m_sLogFolderName/m_sLogFolderNameXXXX, where XXXX is 0000, 0001, etc. int iSeqNum = 0; __finddata64_t fd; intptr_t handle = _findfirst64( PathUtil::Make( m_sLogFolder , "*.*" ), &fd ); if ( handle != -1 ) { do { // Is it a directory with our base name as a prefix? if ( fd.attrib & _A_SUBDIR && fd.name[0]!='.' && !_strnicmp( m_sLogFolder, fd.name, iLogFolderLen ) ) { iSeqNum = max( iSeqNum, atoi( fd.name + iLogFolderLen ) + 1 ); } } while (0 == _findnext64 (handle, &fd)); _findclose(handle); } // Now create directory char sLogPath[256]; _snprintf( sLogPath, sizeof(sLogPath), "%s\\%s%04d", m_sLogFolder.c_str(), m_sLogFolder.c_str(), iSeqNum ); if ( !CryCreateDirectory( sLogPath ) ) { GameWarning( "[VisualLog] Unable to create directory for log files: %s", sLogPath ); return false; } m_sLogPath = sLogPath; m_iLogFolderNum = iSeqNum; char sLogFileName[256]; _snprintf( sLogFileName, sizeof(sLogFileName), "%s\\%s%04d.log", m_sLogPath.c_str(), m_sLogFolder.c_str(), m_iLogFolderNum ); char sLogParamsFileName[256]; _snprintf( sLogParamsFileName, sizeof(sLogParamsFileName), "%s\\%s%04d_params.log", m_sLogPath.c_str(), m_sLogFolder.c_str(), m_iLogFolderNum ); // Open Log Files m_fLogFile = fxopen(sLogFileName, "w"); m_fLogParamsFile = fxopen(sLogParamsFileName, "w"); if ( !m_fLogFile || !m_fLogParamsFile ) { GameWarning( "[VisualLog] Unable to open log files [%s] [%s]", sLogFileName, sLogParamsFileName ); CloseLogs(); return false; } WriteFileHeaders( sLogFileName, sLogParamsFileName ); return true; }
//-------------------------------------------------------------------------------------------------- // Name: CFrontEndModelCache // Desc: Constructor //-------------------------------------------------------------------------------------------------- CFrontEndModelCache::CFrontEndModelCache() { #if FEMC_USE_LEVEL_HEAP SwitchToLevelHeap(); #endif // #if FEMC_USE_LEVEL_HEAP FE_LOG("Front End model cache creation"); INDENT_LOG_DURING_SCOPE(); IGameFramework* pGameFramework = g_pGame->GetIGameFramework(); if(pGameFramework) { pGameFramework->StartNetworkStallTicker(true); } m_bIsMultiplayerCache = gEnv->bMultiplayer; #if FEMC_FILE_ACCESS_LOG gEnv->pConsole->GetCVar("sys_FileAccessLog")->Set(1); #endif // #if FEMC_FILE_ACCESS_LOG #ifdef FEMC_LOG_CACHE_TIME const float startTime = gEnv->pTimer->GetAsyncCurTime(); #endif // #ifdef FEMC_LOG_CACHE_TIME #if FEMC_CACHE_FILE_ACCESSES if (g_pGameCVars->g_FEMenuCacheSaveList) { gEnv->pCryPak->RegisterFileAccessSink(this); m_recordedFiles.clear(); } int oldSaveLevelResourceList = 0; ICVar* pPakSaveLevelResourceListCvar = gEnv->pConsole->GetCVar("sys_PakSaveLevelResourceList"); if(pPakSaveLevelResourceListCvar) { oldSaveLevelResourceList = pPakSaveLevelResourceListCvar->GetIVal(); pPakSaveLevelResourceListCvar->Set(0); } m_pReasonForReportingFileOpen = "CFrontEndModelCache constructor"; #endif // #if FEMC_CACHE_FILE_ACCESSES CRY_ASSERT(s_pSingletonInstance == NULL); s_pSingletonInstance = this; // Load model list from xml, and cache each entry XmlNodeRef pRootNode = gEnv->pSystem->LoadXmlFromFile(FEMC_CACHE_LIST_FILENAME); if(pRootNode) { CGameXmlParamReader xmlParamReader(pRootNode); const char* pPakName = NULL; // Pak const char* const pGameFolder = gEnv->pCryPak->GetGameFolder(); const XmlNodeRef pPakData = xmlParamReader.FindFilteredChild("PakData"); if(pPakData && pPakData->getChildCount()) { const XmlNodeRef pPak = pPakData->getChild(0); if(pPak) { pPakName = pPak->getAttr("name"); bool bSucceeded = gEnv->pCryPak->OpenPack(pGameFolder,pPakName,ICryPak::FLAGS_FILENAMES_AS_CRC32); bSucceeded |= gEnv->pCryPak->LoadPakToMemory(pPakName,ICryPak::eInMemoryPakLocale_GPU); FE_LOG ("%s to open pack file '%s' bound to %s", bSucceeded ? "Managed" : "Failed", pPakName, pGameFolder); } // There is a pak, so reserve space for some materials in cache const uint materialCacheReserve = 64; m_materialCache.reserve(materialCacheReserve); } // Cache character models const XmlNodeRef pCharacterModelList = xmlParamReader.FindFilteredChild("CharacterModels"); if(pCharacterModelList) { const int characterModelCount = pCharacterModelList->getChildCount(); if(characterModelCount) { CreateSupportForFrontEnd3dModels(); } for(int i=0; i<characterModelCount; i++) { const XmlNodeRef pCharacterModel = pCharacterModelList->getChild(i); if(pCharacterModel) { const char* pCharacterModelName = pCharacterModel->getAttr("name"); CacheCharacterModel(pCharacterModelName); } } } // Cache item models const XmlNodeRef pItemModelsList = xmlParamReader.FindFilteredChild("ItemModels"); if(pItemModelsList) { const int itemModelCount = pItemModelsList->getChildCount(); if(itemModelCount) { CreateSupportForFrontEnd3dModels(); } for(int i=0; i<itemModelCount; i++) { const XmlNodeRef pItemModel = pItemModelsList->getChild(i); if(pItemModel) { const char* pItemModelName = pItemModel->getAttr("name"); if (strcmp(pItemModel->getTag(), "GeometryModels") == 0) { m_myGeometryCache.CacheGeometry(pItemModelName, false, IStatObj::ELoadingFlagsIgnoreLoDs); } else if (strcmp(pItemModel->getTag(), "ItemModel") == 0) { CacheItemModel(pItemModelName); } } } } // Unload pak if(pPakName) { gEnv->pCryPak->LoadPakToMemory( pPakName,ICryPak::eInMemoryPakLocale_Unload ); bool bSucceeded = gEnv->pCryPak->ClosePack( pPakName,0 ); FE_LOG ("%s to close pack file '%s'", bSucceeded ? "Managed" : "Failed", pPakName); } } #if FEMC_FILE_ACCESS_LOG gEnv->pConsole->GetCVar("sys_FileAccessLog")->Set(0); #endif // #if FEMC_FILE_ACCESS_LOG #ifdef FEMC_LOG_CACHE_TIME const float endTime = gEnv->pTimer->GetAsyncCurTime(); const float deltaTime = endTime - startTime; FE_LOG("FrontEndModelCache loading took %3.1f seconds", deltaTime); #endif // #FEMC_LOG_CACHE_TIME FE_MODEL_CACHE_LOG_CACHE_TIME #if FEMC_CACHE_FILE_ACCESSES m_pReasonForReportingFileOpen = NULL; if (g_pGameCVars->g_FEMenuCacheSaveList) { // To stop any other threads from messing gEnv->pCryPak->UnregisterFileAccessSink(this); std::set<string> fileset; // eliminate duplicate values std::vector<string>::iterator endLocation = std::unique( m_recordedFiles.begin(),m_recordedFiles.end() ); m_recordedFiles.erase( endLocation,m_recordedFiles.end() ); fileset.insert( m_recordedFiles.begin(),m_recordedFiles.end() ); string sResourceSetFilename = PathUtil::AddSlash("Levels/Multiplayer") + "mpmenu_list.txt"; { FILE* pFile = fxopen(sResourceSetFilename,"wb",true); if(pFile) { for(std::set<string>::iterator it = fileset.begin(); it != fileset.end(); ++it) { const char *pStr = it->c_str(); fprintf( pFile,"%s\n",pStr ); // Automatically add cgf->cgfm, cga->cgam, dds->dds.0 const char* const pExt = PathUtil::GetExt(pStr); if (strcmp(pExt, "cgf") == 0) { fprintf( pFile,"%sm\n",pStr ); } else if (strcmp(pExt, "cga") == 0) { fprintf( pFile,"%sm\n",pStr ); } else if (strcmp(pExt, "dds") == 0) { fprintf( pFile,"%s.0\n",pStr ); } } fclose(pFile); } } } if(pPakSaveLevelResourceListCvar) { pPakSaveLevelResourceListCvar->Set(oldSaveLevelResourceList); } #endif // #if FEMC_CACHE_FILE_ACCESSES if(pGameFramework) { pGameFramework->StopNetworkStallTicker(); } FE_LOG("Done caching items for front end"); #if FEMC_USE_LEVEL_HEAP SwitchToGlobalHeap(); #endif // #if FEMC_USE_LEVEL_HEAP }//-------------------------------------------------------------------------------------------------