void COptionsManager::UpdateFlashOptions() { std::map<string,SOptionEntry>::const_iterator it = m_profileOptions.begin(); std::map<string,SOptionEntry>::const_iterator end = m_profileOptions.end(); CFlashMenuScreen *pMainMenu = SAFE_MENU_FUNC_RET(GetMenuScreen(CFlashMenuObject::MENUSCREEN_FRONTENDSTART)); CFlashMenuScreen *pInGameMenu = SAFE_MENU_FUNC_RET(GetMenuScreen(CFlashMenuObject::MENUSCREEN_FRONTENDINGAME)); CFlashMenuScreen *pCurrentMenu = NULL; if(pMainMenu && pMainMenu->IsLoaded()) pCurrentMenu = pMainMenu; else if(pInGameMenu && pInGameMenu->IsLoaded()) pCurrentMenu = pInGameMenu; if(!pCurrentMenu) return; for(;it!=end;++it) { if(!strcmp(it->first.c_str(),"pb_client")) { SFlashVarValue option[3] = {"pb_client", m_pbEnabled, true}; pCurrentMenu->Invoke("Root.MainMenu.Options.SetOption", option, 3); } else if(!stricmp(it->first.c_str(), "fsaa_mode")) { if(g_pGame->GetMenu()) { if(!gEnv->pConsole->GetCVar("r_FSAA")->GetIVal()) { SFlashVarValue option[3] = {"fsaa_mode", "0", true}; pCurrentMenu->Invoke("Root.MainMenu.Options.SetOption", option, 3); } else { int samples = gEnv->pConsole->GetCVar("r_FSAA_samples")->GetIVal(); int quality = gEnv->pConsole->GetCVar("r_FSAA_quality")->GetIVal(); SFlashVarValue option[3] = {"fsaa_mode", g_pGame->GetMenu()->GetFSAAMode(samples, quality).c_str(), true}; pCurrentMenu->Invoke("Root.MainMenu.Options.SetOption", option, 3); } } } else { ICVar *pCVar = gEnv->pConsole->GetCVar(it->first); if(pCVar) { const char* name = pCVar->GetName(); const char* value = pCVar->GetString(); bool bIsValid = pCVar->GetIVal()==pCVar->GetRealIVal(); if(!stricmp(name, "r_fsaa_samples")) //fsaa workaround for RnD { ICVar *pFSAA = gEnv->pConsole->GetCVar("r_fsaa"); if(pFSAA && pFSAA->GetIVal() == 0) value = pFSAA->GetString(); } SFlashVarValue option[3] = {name, value, bIsValid}; pCurrentMenu->Invoke("Root.MainMenu.Options.SetOption", option, 3); } } } pCurrentMenu->CheckedInvoke("_root.Root.MainMenu.Options.updateOptions"); }
void CFlashMenuObject::UpdateSaveGames() { CFlashMenuScreen* pScreen = m_pCurrentFlashMenuScreen; if(!pScreen) return; //************************************************************************* std::vector<SaveGameMetaData> saveGameData; //************************************************************************* pScreen->CheckedInvoke("resetSPGames"); // TODO: find a better place for this as it needs to be set only once -- CW gEnv->pSystem->SetFlashLoadMovieHandler(this); if(!m_pPlayerProfileManager) return; IPlayerProfile *pProfile = m_pPlayerProfileManager->GetCurrentProfile(m_pPlayerProfileManager->GetCurrentUser()); if(!pProfile) return; ILocalizationManager* pLocMgr = gEnv->pSystem->GetLocalizationManager(); ISaveGameEnumeratorPtr pSGE = pProfile->CreateSaveGameEnumerator(); ISaveGameEnumerator::SGameDescription desc; //get the meta data into the struct for (int i=0; i<pSGE->GetCount(); ++i) { pSGE->GetDescription(i, desc); int kills = 0; float levelPlayTimeSec = 0.0f; float gamePlayTimeSec = 0.0f; int difficulty = g_pGameCVars->g_difficultyLevel; desc.metaData.xmlMetaDataNode->getAttr("sp_kills", kills); desc.metaData.xmlMetaDataNode->getAttr("sp_levelPlayTime", levelPlayTimeSec); desc.metaData.xmlMetaDataNode->getAttr("sp_gamePlayTime", gamePlayTimeSec); desc.metaData.xmlMetaDataNode->getAttr("sp_difficulty", difficulty); SaveGameMetaData data; data.name = desc.name; data.buildVersion = desc.metaData.buildVersion; data.description = desc.description; data.fileVersion = desc.metaData.fileVersion; data.gamePlayTimeSec = gamePlayTimeSec; data.gameRules = desc.metaData.gameRules; data.humanName = desc.humanName; data.levelName = g_pGame->GetMappedLevelName(desc.metaData.levelName); data.levelPlayTimeSec = levelPlayTimeSec; data.saveTime = desc.metaData.saveTime; data.kills = kills; data.difficulty = difficulty; saveGameData.push_back(data); } if(saveGameData.size()) { //sort by the set sorting rules std::sort(saveGameData.begin(), saveGameData.end(), SaveGameDataCompare(m_eSaveGameCompareMode)); //send sorted data to flash int start = (m_bSaveGameSortUp)?0:saveGameData.size()-1; int end = (m_bSaveGameSortUp)?saveGameData.size():-1; int inc = (m_bSaveGameSortUp)?1:-1; for(int i = start; i != end; i+=inc) { SaveGameMetaData data = saveGameData[i]; wstring levelPlayTimeString; pLocMgr->LocalizeDuration((int)data.levelPlayTimeSec, levelPlayTimeString); wstring gamePlayTimeSecString; pLocMgr->LocalizeDuration((int)data.gamePlayTimeSec, gamePlayTimeSecString); wstring dateString; pLocMgr->LocalizeDate(data.saveTime, true, true, true, dateString); wstring timeString; pLocMgr->LocalizeTime(data.saveTime, true, false, timeString); dateString+=L" "; dateString+=timeString; bool levelStart = (ValidateName(data.name))?true:false; SFlashVarValue args[12] = { data.name, data.description, data.humanName, data.levelName, data.gameRules, data.fileVersion, data.buildVersion, levelPlayTimeString.c_str(), dateString.c_str(), levelStart, data.kills, data.difficulty }; pScreen->CheckedInvoke("addGameToList", args, sizeof(args) / sizeof(args[0])); } } pScreen->CheckedInvoke("updateGameList"); }