Combined all level list phases into one, removed PHASE_TERM

master
krzys-h 2015-07-19 23:07:36 +02:00
parent 347654db15
commit a2f1aa195b
5 changed files with 77 additions and 118 deletions

View File

@ -43,6 +43,8 @@
#include "sound/oalsound/alsound.h" #include "sound/oalsound/alsound.h"
#endif #endif
#include "ui/maindialog.h"
#include <boost/filesystem.hpp> #include <boost/filesystem.hpp>
#include <boost/tokenizer.hpp> #include <boost/tokenizer.hpp>
@ -586,7 +588,7 @@ bool CApplication::Create()
m_controller->StartApp(); m_controller->StartApp();
else else
{ {
m_controller->GetRobotMain()->ChangePhase(PHASE_USER); // To load userlevel list - TODO: this is ugly m_controller->GetMainDialog()->UpdateCustomLevelList(); //TODO: This should be moved out of CMainDialog
m_controller->GetRobotMain()->SetExitAfterMission(true); m_controller->GetRobotMain()->SetExitAfterMission(true);
m_controller->StartGame(m_runSceneCategory, m_runSceneRank/100, m_runSceneRank%100); m_controller->StartGame(m_runSceneCategory, m_runSceneRank/100, m_runSceneRank%100);
} }

View File

@ -577,7 +577,7 @@ void CRobotMain::ChangePhase(Phase phase)
m_sound->StopAll(); m_sound->StopAll();
if (m_endingWinRank == -1) if (m_endingWinRank == -1)
{ {
ChangePhase(PHASE_TERM); ChangePhase(PHASE_LEVEL_LIST);
} }
else else
{ {
@ -613,7 +613,7 @@ void CRobotMain::ChangePhase(Phase phase)
{ {
GetLogger()->Error("An error occured while trying to load win scene\n"); GetLogger()->Error("An error occured while trying to load win scene\n");
GetLogger()->Error("%s\n", e.what()); GetLogger()->Error("%s\n", e.what());
ChangePhase(PHASE_TERM); ChangePhase(PHASE_LEVEL_LIST);
} }
} }
} }
@ -623,7 +623,7 @@ void CRobotMain::ChangePhase(Phase phase)
m_sound->StopAll(); m_sound->StopAll();
if (m_endingLostRank == -1) if (m_endingLostRank == -1)
{ {
ChangePhase(PHASE_TERM); ChangePhase(PHASE_LEVEL_LIST);
} }
else else
{ {
@ -645,7 +645,7 @@ void CRobotMain::ChangePhase(Phase phase)
{ {
GetLogger()->Error("An error occured while trying to load lost scene\n"); GetLogger()->Error("An error occured while trying to load lost scene\n");
GetLogger()->Error("%s\n", e.what()); GetLogger()->Error("%s\n", e.what());
ChangePhase(PHASE_TERM); ChangePhase(PHASE_LEVEL_LIST);
} }
} }
} }
@ -1049,7 +1049,7 @@ bool CRobotMain::ProcessEvent(Event &event)
if (m_winTerminate) if (m_winTerminate)
ChangePhase(PHASE_INIT); ChangePhase(PHASE_INIT);
else else
ChangePhase(PHASE_TERM); ChangePhase(PHASE_LEVEL_LIST);
} }
break; break;
@ -1057,7 +1057,7 @@ bool CRobotMain::ProcessEvent(Event &event)
if (m_winTerminate) if (m_winTerminate)
ChangePhase(PHASE_INIT); ChangePhase(PHASE_INIT);
else else
ChangePhase(PHASE_TERM); ChangePhase(PHASE_LEVEL_LIST);
break; break;
@ -5300,7 +5300,7 @@ void CRobotMain::ResetCreate()
{ {
GetLogger()->Error("An error occured while trying to reset scene\n"); GetLogger()->Error("An error occured while trying to reset scene\n");
GetLogger()->Error("%s\n", e.what()); GetLogger()->Error("%s\n", e.what());
ChangePhase(PHASE_TERM); ChangePhase(PHASE_LEVEL_LIST);
} }
} }
@ -5920,7 +5920,7 @@ void CRobotMain::DisplayError(Error err, Math::Vector goal, float height, float
m_displayText->DisplayError(err, goal, height, dist, time); m_displayText->DisplayError(err, goal, height, dist, time);
} }
std::string& CRobotMain::GetCustomLevelName(int id) std::string CRobotMain::GetCustomLevelName(int id)
{ {
return m_dialog->GetCustomLevelName(id); return m_dialog->GetCustomLevelName(id);
} }

View File

@ -44,17 +44,11 @@
enum Phase enum Phase
{ {
PHASE_INIT, PHASE_INIT,
PHASE_TERM,
PHASE_NAME, PHASE_NAME,
PHASE_PERSO, PHASE_PERSO,
PHASE_TRAINER, PHASE_LEVEL_LIST,
PHASE_DEFI,
PHASE_MISSION,
PHASE_FREE,
PHASE_USER,
PHASE_LOADING, PHASE_LOADING,
PHASE_SIMUL, PHASE_SIMUL,
PHASE_MODEL,
PHASE_SETUPd, PHASE_SETUPd,
PHASE_SETUPg, PHASE_SETUPg,
PHASE_SETUPp, PHASE_SETUPp,
@ -314,7 +308,7 @@ public:
void DisplayError(Error err, CObject* pObj, float time=10.0f); void DisplayError(Error err, CObject* pObj, float time=10.0f);
void DisplayError(Error err, Math::Vector goal, float height=15.0f, float dist=60.0f, float time=10.0f); void DisplayError(Error err, Math::Vector goal, float height=15.0f, float dist=60.0f, float time=10.0f);
std::string& GetCustomLevelName(int id); std::string GetCustomLevelName(int id);
void StartMissionTimer(); void StartMissionTimer();

View File

@ -128,7 +128,6 @@ CMainDialog::CMainDialog()
m_phase = PHASE_NAME; m_phase = PHASE_NAME;
m_phaseSetup = PHASE_SETUPg; m_phaseSetup = PHASE_SETUPg;
m_phaseTerm = PHASE_TRAINER;
m_sceneRead[0] = 0; m_sceneRead[0] = 0;
m_stackRead[0] = 0; m_stackRead[0] = 0;
m_levelChap = 0; m_levelChap = 0;
@ -228,10 +227,6 @@ void CMainDialog::ChangePhase(Phase phase)
m_engine->SetOverFront(false); m_engine->SetOverFront(false);
m_engine->SetOverColor(Gfx::Color(0.0f, 0.0f, 0.0f, 0.0f), Gfx::ENG_RSTATE_TCOLOR_BLACK); // TODO: color ok? m_engine->SetOverColor(Gfx::Color(0.0f, 0.0f, 0.0f, 0.0f), Gfx::ENG_RSTATE_TCOLOR_BLACK); // TODO: color ok?
if ( phase == PHASE_TERM )
{
phase = m_phaseTerm;
}
m_phase = phase; // copy the info to CRobotMain m_phase = phase; // copy the info to CRobotMain
m_phaseTime = 0.0f; m_phaseTime = 0.0f;
@ -717,19 +712,9 @@ void CMainDialog::ChangePhase(Phase phase)
} }
} }
if ( m_phase == PHASE_TRAINER || if ( m_phase == PHASE_LEVEL_LIST )
m_phase == PHASE_DEFI ||
m_phase == PHASE_MISSION ||
m_phase == PHASE_FREE ||
m_phase == PHASE_USER )
{ {
if ( m_phase == PHASE_TRAINER ) m_category = LevelCategory::Exercises; if ( m_category == LevelCategory::FreeGame )
if ( m_phase == PHASE_DEFI ) m_category = LevelCategory::Challenges;
if ( m_phase == PHASE_MISSION ) m_category = LevelCategory::Missions;
if ( m_phase == PHASE_FREE ) m_category = LevelCategory::FreeGame;
if ( m_phase == PHASE_USER ) m_category = LevelCategory::CustomLevels;
if ( m_phase == PHASE_FREE )
{ {
m_accessChap = m_main->GetPlayerProfile()->GetChapPassed(LevelCategory::Missions); m_accessChap = m_main->GetPlayerProfile()->GetChapPassed(LevelCategory::Missions);
} }
@ -740,11 +725,11 @@ void CMainDialog::ChangePhase(Phase phase)
ddim.y = 0.80f; ddim.y = 0.80f;
pw = m_interface->CreateWindows(pos, ddim, 12, EVENT_WINDOW5); pw = m_interface->CreateWindows(pos, ddim, 12, EVENT_WINDOW5);
pw->SetClosable(true); pw->SetClosable(true);
if ( m_phase == PHASE_TRAINER ) res = RT_TITLE_TRAINER; if ( m_category == LevelCategory::Exercises ) res = RT_TITLE_TRAINER;
if ( m_phase == PHASE_DEFI ) res = RT_TITLE_DEFI; if ( m_category == LevelCategory::Challenges ) res = RT_TITLE_DEFI;
if ( m_phase == PHASE_MISSION ) res = RT_TITLE_MISSION; if ( m_category == LevelCategory::Missions ) res = RT_TITLE_MISSION;
if ( m_phase == PHASE_FREE ) res = RT_TITLE_FREE; if ( m_category == LevelCategory::FreeGame ) res = RT_TITLE_FREE;
if ( m_phase == PHASE_USER ) res = RT_TITLE_USER; if ( m_category == LevelCategory::CustomLevels ) res = RT_TITLE_USER;
GetResource(RES_TEXT, res, name); GetResource(RES_TEXT, res, name);
pw->SetName(name); pw->SetName(name);
@ -764,11 +749,11 @@ void CMainDialog::ChangePhase(Phase phase)
pos.y = oy+sy*10.5f; pos.y = oy+sy*10.5f;
ddim.x = dim.x*7.5f; ddim.x = dim.x*7.5f;
ddim.y = dim.y*0.6f; ddim.y = dim.y*0.6f;
if ( m_phase == PHASE_TRAINER ) res = RT_PLAY_CHAPt; if ( m_category == LevelCategory::Exercises ) res = RT_PLAY_CHAPt;
if ( m_phase == PHASE_DEFI ) res = RT_PLAY_CHAPd; if ( m_category == LevelCategory::Challenges ) res = RT_PLAY_CHAPd;
if ( m_phase == PHASE_MISSION ) res = RT_PLAY_CHAPm; if ( m_category == LevelCategory::Missions ) res = RT_PLAY_CHAPm;
if ( m_phase == PHASE_FREE ) res = RT_PLAY_CHAPf; if ( m_category == LevelCategory::FreeGame ) res = RT_PLAY_CHAPf;
if ( m_phase == PHASE_USER ) res = RT_PLAY_CHAPu; if ( m_category == LevelCategory::CustomLevels ) res = RT_PLAY_CHAPu;
GetResource(RES_TEXT, res, name); GetResource(RES_TEXT, res, name);
pl = pw->CreateLabel(pos, ddim, 0, EVENT_LABEL11, name); pl = pw->CreateLabel(pos, ddim, 0, EVENT_LABEL11, name);
pl->SetTextAlign(Gfx::TEXT_ALIGN_LEFT); pl->SetTextAlign(Gfx::TEXT_ALIGN_LEFT);
@ -780,18 +765,18 @@ void CMainDialog::ChangePhase(Phase phase)
pli->SetState(STATE_SHADOW); pli->SetState(STATE_SHADOW);
m_chap[m_category] = m_main->GetPlayerProfile()->GetSelectedChap(m_category)-1; m_chap[m_category] = m_main->GetPlayerProfile()->GetSelectedChap(m_category)-1;
UpdateSceneChap(m_chap[m_category]); UpdateSceneChap(m_chap[m_category]);
if ( m_phase != PHASE_USER ) pli->SetState(STATE_EXTEND); if ( m_category != LevelCategory::CustomLevels ) pli->SetState(STATE_EXTEND);
// Displays a list of missions: // Displays a list of missions:
pos.x = ox+sx*9.5f; pos.x = ox+sx*9.5f;
pos.y = oy+sy*10.5f; pos.y = oy+sy*10.5f;
ddim.x = dim.x*7.5f; ddim.x = dim.x*7.5f;
ddim.y = dim.y*0.6f; ddim.y = dim.y*0.6f;
if ( m_phase == PHASE_TRAINER ) res = RT_PLAY_LISTt; if ( m_category == LevelCategory::Exercises ) res = RT_PLAY_LISTt;
if ( m_phase == PHASE_DEFI ) res = RT_PLAY_LISTd; if ( m_category == LevelCategory::Challenges ) res = RT_PLAY_LISTd;
if ( m_phase == PHASE_MISSION ) res = RT_PLAY_LISTm; if ( m_category == LevelCategory::Missions ) res = RT_PLAY_LISTm;
if ( m_phase == PHASE_FREE ) res = RT_PLAY_LISTf; if ( m_category == LevelCategory::FreeGame ) res = RT_PLAY_LISTf;
if ( m_phase == PHASE_USER ) res = RT_PLAY_LISTu; if ( m_category == LevelCategory::CustomLevels ) res = RT_PLAY_LISTu;
GetResource(RES_TEXT, res, name); GetResource(RES_TEXT, res, name);
pl = pw->CreateLabel(pos, ddim, 0, EVENT_LABEL12, name); pl = pw->CreateLabel(pos, ddim, 0, EVENT_LABEL12, name);
pl->SetTextAlign(Gfx::TEXT_ALIGN_LEFT); pl->SetTextAlign(Gfx::TEXT_ALIGN_LEFT);
@ -803,7 +788,7 @@ void CMainDialog::ChangePhase(Phase phase)
pli->SetState(STATE_SHADOW); pli->SetState(STATE_SHADOW);
m_sel[m_category] = m_main->GetPlayerProfile()->GetSelectedRank(m_category)-1; m_sel[m_category] = m_main->GetPlayerProfile()->GetSelectedRank(m_category)-1;
UpdateSceneList(m_chap[m_category], m_sel[m_category]); UpdateSceneList(m_chap[m_category], m_sel[m_category]);
if ( m_phase != PHASE_USER ) pli->SetState(STATE_EXTEND); if ( m_category != LevelCategory::CustomLevels ) pli->SetState(STATE_EXTEND);
pos = pli->GetPos(); pos = pli->GetPos();
ddim = pli->GetDim(); ddim = pli->GetDim();
@ -827,8 +812,8 @@ void CMainDialog::ChangePhase(Phase phase)
pe->SetHighlightCap(false); pe->SetHighlightCap(false);
// Button displays the "soluce": // Button displays the "soluce":
if ( m_phase != PHASE_TRAINER && if ( m_category != LevelCategory::Exercises &&
m_phase != PHASE_FREE ) m_category != LevelCategory::FreeGame )
{ {
pos.x = ox+sx*9.5f; pos.x = ox+sx*9.5f;
pos.y = oy+sy*5.8f; pos.y = oy+sy*5.8f;
@ -842,9 +827,9 @@ void CMainDialog::ChangePhase(Phase phase)
UpdateSceneResume(m_chap[m_category]+1, m_sel[m_category]+1); UpdateSceneResume(m_chap[m_category]+1, m_sel[m_category]+1);
if ( m_phase == PHASE_MISSION || if ( m_category == LevelCategory::Missions ||
m_phase == PHASE_FREE || m_category == LevelCategory::FreeGame ||
m_phase == PHASE_USER ) m_category == LevelCategory::CustomLevels )
{ {
pos.x = ox+sx*9.5f; pos.x = ox+sx*9.5f;
pos.y = oy+sy*2; pos.y = oy+sy*2;
@ -1725,11 +1710,7 @@ void CMainDialog::ChangePhase(Phase phase)
if ( m_phase == PHASE_INIT || if ( m_phase == PHASE_INIT ||
m_phase == PHASE_NAME || m_phase == PHASE_NAME ||
m_phase == PHASE_TRAINER || m_phase == PHASE_LEVEL_LIST ||
m_phase == PHASE_DEFI ||
m_phase == PHASE_MISSION ||
m_phase == PHASE_FREE ||
m_phase == PHASE_USER ||
m_phase == PHASE_SETUPd || m_phase == PHASE_SETUPd ||
m_phase == PHASE_SETUPg || m_phase == PHASE_SETUPg ||
m_phase == PHASE_SETUPp || m_phase == PHASE_SETUPp ||
@ -1910,7 +1891,7 @@ bool CMainDialog::EventProcess(const Event &event)
} }
else else
{ {
m_main->ChangePhase(PHASE_TERM); m_main->ChangePhase(PHASE_LEVEL_LIST);
} }
} }
} }
@ -1981,23 +1962,28 @@ bool CMainDialog::EventProcess(const Event &event)
break; break;
case EVENT_INTERFACE_TRAINER: case EVENT_INTERFACE_TRAINER:
m_main->ChangePhase(PHASE_TRAINER); m_category = LevelCategory::Exercises;
m_main->ChangePhase(PHASE_LEVEL_LIST);
break; break;
case EVENT_INTERFACE_DEFI: case EVENT_INTERFACE_DEFI:
m_main->ChangePhase(PHASE_DEFI); m_category = LevelCategory::Challenges;
m_main->ChangePhase(PHASE_LEVEL_LIST);
break; break;
case EVENT_INTERFACE_MISSION: case EVENT_INTERFACE_MISSION:
m_main->ChangePhase(PHASE_MISSION); m_category = LevelCategory::Missions;
m_main->ChangePhase(PHASE_LEVEL_LIST);
break; break;
case EVENT_INTERFACE_FREE: case EVENT_INTERFACE_FREE:
m_main->ChangePhase(PHASE_FREE); m_category = LevelCategory::FreeGame;
m_main->ChangePhase(PHASE_LEVEL_LIST);
break; break;
case EVENT_INTERFACE_USER: case EVENT_INTERFACE_USER:
m_main->ChangePhase(PHASE_USER); m_category = LevelCategory::CustomLevels;
m_main->ChangePhase(PHASE_LEVEL_LIST);
break; break;
case EVENT_INTERFACE_SETUP: case EVENT_INTERFACE_SETUP:
@ -2195,11 +2181,7 @@ bool CMainDialog::EventProcess(const Event &event)
return false; return false;
} }
if ( m_phase == PHASE_TRAINER || if ( m_phase == PHASE_LEVEL_LIST )
m_phase == PHASE_DEFI ||
m_phase == PHASE_MISSION ||
m_phase == PHASE_FREE ||
m_phase == PHASE_USER )
{ {
pw = static_cast<CWindow*>(m_interface->SearchControl(EVENT_WINDOW5)); pw = static_cast<CWindow*>(m_interface->SearchControl(EVENT_WINDOW5));
if ( pw == 0 ) return false; if ( pw == 0 ) return false;
@ -2211,14 +2193,7 @@ bool CMainDialog::EventProcess(const Event &event)
m_main->ChangePhase(PHASE_INIT); m_main->ChangePhase(PHASE_INIT);
return false; return false;
} }
}
if ( m_phase == PHASE_TRAINER ||
m_phase == PHASE_DEFI ||
m_phase == PHASE_MISSION ||
m_phase == PHASE_FREE ||
m_phase == PHASE_USER )
{
switch( event.type ) switch( event.type )
{ {
case EVENT_INTERFACE_CHAP: case EVENT_INTERFACE_CHAP:
@ -2248,12 +2223,10 @@ bool CMainDialog::EventProcess(const Event &event)
case EVENT_INTERFACE_PLAY: case EVENT_INTERFACE_PLAY:
m_levelChap = m_chap[m_category]+1; m_levelChap = m_chap[m_category]+1;
m_levelRank = m_sel[m_category]+1; m_levelRank = m_sel[m_category]+1;
m_phaseTerm = m_phase;
m_main->ChangePhase(PHASE_LOADING); m_main->ChangePhase(PHASE_LOADING);
break; break;
case EVENT_INTERFACE_READ: case EVENT_INTERFACE_READ:
m_phaseTerm = m_phase;
m_main->ChangePhase(PHASE_READ); m_main->ChangePhase(PHASE_READ);
break; break;
@ -2689,7 +2662,7 @@ bool CMainDialog::EventProcess(const Event &event)
event.type == EVENT_INTERFACE_BACK || event.type == EVENT_INTERFACE_BACK ||
(event.type == EVENT_KEY_DOWN && event.key.key == KEY(ESCAPE)) ) (event.type == EVENT_KEY_DOWN && event.key.key == KEY(ESCAPE)) )
{ {
ChangePhase(m_phaseTerm); ChangePhase(PHASE_LEVEL_LIST);
return false; return false;
} }
@ -2867,11 +2840,8 @@ void CMainDialog::GlintMove()
} }
} }
if ( m_phase == PHASE_NAME || if ( m_phase == PHASE_NAME ||
m_phase == PHASE_TRAINER || m_phase == PHASE_LEVEL_LIST )
m_phase == PHASE_MISSION ||
m_phase == PHASE_FREE ||
m_phase == PHASE_USER )
{ {
pg = static_cast<CGroup*>(pw->SearchControl(EVENT_INTERFACE_GLINTl)); pg = static_cast<CGroup*>(pw->SearchControl(EVENT_INTERFACE_GLINTl));
if ( pg != 0 ) if ( pg != 0 )
@ -3091,11 +3061,7 @@ void CMainDialog::FrameParticle(float rTime)
pGlint = glintPosInit; pGlint = glintPosInit;
} }
else if ( m_phase == PHASE_NAME || else if ( m_phase == PHASE_NAME ||
m_phase == PHASE_TRAINER || m_phase == PHASE_LEVEL_LIST ||
m_phase == PHASE_DEFI ||
m_phase == PHASE_MISSION ||
m_phase == PHASE_FREE ||
m_phase == PHASE_USER ||
m_phase == PHASE_SETUPd || m_phase == PHASE_SETUPd ||
m_phase == PHASE_SETUPg || m_phase == PHASE_SETUPg ||
m_phase == PHASE_SETUPp || m_phase == PHASE_SETUPp ||
@ -3298,8 +3264,7 @@ void CMainDialog::NiceParticle(Math::Point mouse, bool bPress)
if ( !m_bRain ) return; if ( !m_bRain ) return;
if ( (m_phase == PHASE_SIMUL || if ( (m_phase == PHASE_SIMUL ||
m_phase == PHASE_WIN || m_phase == PHASE_WIN ||
m_phase == PHASE_LOST || m_phase == PHASE_LOST ) &&
m_phase == PHASE_MODEL ) &&
!m_bDialog ) return; !m_bDialog ) return;
if ( bPress ) if ( bPress )
@ -4124,6 +4089,7 @@ bool CMainDialog::IOReadScene()
{ {
m_levelChap = 0; m_levelChap = 0;
std::string dir = line->GetParam("dir")->AsString(); std::string dir = line->GetParam("dir")->AsString();
UpdateCustomLevelList();
for (unsigned int i = 0; i < m_customLevelList.size(); i++) for (unsigned int i = 0; i < m_customLevelList.size(); i++)
{ {
if (m_customLevelList[i] == dir) if (m_customLevelList[i] == dir)
@ -4164,11 +4130,7 @@ bool CMainDialog::IOReadScene()
void CMainDialog::AllMissionUpdate() void CMainDialog::AllMissionUpdate()
{ {
if ( m_phase == PHASE_TRAINER || if ( m_phase == PHASE_LEVEL_LIST )
m_phase == PHASE_DEFI ||
m_phase == PHASE_MISSION ||
m_phase == PHASE_FREE ||
m_phase == PHASE_USER )
{ {
UpdateSceneChap(m_chap[m_category]); UpdateSceneChap(m_chap[m_category]);
UpdateSceneList(m_chap[m_category], m_sel[m_category]); UpdateSceneList(m_chap[m_category], m_sel[m_category]);
@ -4196,11 +4158,9 @@ void CMainDialog::UpdateSceneChap(int &chap)
pl->Flush(); pl->Flush();
unsigned int j; unsigned int j;
if ( m_phase == PHASE_USER ) if ( m_category == LevelCategory::CustomLevels )
{ {
auto userLevelDirs = CResourceManager::ListDirectories("levels/custom/"); UpdateCustomLevelList();
std::sort(userLevelDirs.begin(), userLevelDirs.end());
m_customLevelList = userLevelDirs;
for ( j=0 ; j<m_customLevelList.size() ; j++ ) for ( j=0 ; j<m_customLevelList.size() ; j++ )
{ {
@ -4240,13 +4200,13 @@ void CMainDialog::UpdateSceneChap(int &chap)
pl->SetCheck(j, bPassed); pl->SetCheck(j, bPassed);
pl->SetEnable(j, true); pl->SetEnable(j, true);
if ( m_phase == PHASE_MISSION && !m_main->GetShowAll() && !bPassed ) if ( m_category == LevelCategory::Missions && !m_main->GetShowAll() && !bPassed )
{ {
j ++; j ++;
break; break;
} }
if ( m_phase == PHASE_FREE && j == m_accessChap ) if ( m_category == LevelCategory::FreeGame && j == m_accessChap )
{ {
j ++; j ++;
break; break;
@ -4280,8 +4240,6 @@ void CMainDialog::UpdateSceneList(int chap, int &sel)
pl->Flush(); pl->Flush();
if (chap < 0) return;
bool readAll = true; bool readAll = true;
for ( j=0 ; j<MAXSCENE ; j++ ) for ( j=0 ; j<MAXSCENE ; j++ )
{ {
@ -4311,7 +4269,7 @@ void CMainDialog::UpdateSceneList(int chap, int &sel)
pl->SetCheck(j, bPassed); pl->SetCheck(j, bPassed);
pl->SetEnable(j, true); pl->SetEnable(j, true);
if ( m_phase == PHASE_MISSION && !m_main->GetShowAll() && !bPassed ) if ( m_category == LevelCategory::Missions && !m_main->GetShowAll() && !bPassed )
{ {
readAll = false; readAll = false;
} }
@ -4340,11 +4298,7 @@ void CMainDialog::ShowSoluceUpdate()
CEdit* pe; CEdit* pe;
CCheck* pc; CCheck* pc;
if ( m_phase == PHASE_TRAINER || if ( m_phase == PHASE_LEVEL_LIST )
m_phase == PHASE_DEFI ||
m_phase == PHASE_MISSION ||
m_phase == PHASE_FREE ||
m_phase == PHASE_USER )
{ {
m_bSceneSoluce = false; m_bSceneSoluce = false;
@ -4405,7 +4359,7 @@ void CMainDialog::UpdateSceneResume(int chap, int rank)
} }
} }
if(chap == 0) return; if(chap == 0 || rank == 0) return;
try try
{ {
@ -4911,7 +4865,7 @@ void CMainDialog::SetupMemorize()
CInput::GetInstancePointer()->SaveKeyBindings(); CInput::GetInstancePointer()->SaveKeyBindings();
GetConfigFile().SetIntProperty("Setup", "DeleteGamer", m_bDeleteGamer); GetConfigFile().SetIntProperty("Setup", "DeleteGamer", m_bDeleteGamer);
GetConfigFile().Save(); GetConfigFile().Save();
} }
@ -5882,8 +5836,17 @@ bool CMainDialog::NextMission()
return true; return true;
} }
std::string& CMainDialog::GetCustomLevelName(int id) //TODO: Userlevel management should be probably moved out of CMainDialog, along with the listing of normal missions
void CMainDialog::UpdateCustomLevelList()
{ {
auto userLevelDirs = CResourceManager::ListDirectories("levels/custom/");
std::sort(userLevelDirs.begin(), userLevelDirs.end());
m_customLevelList = userLevelDirs;
}
std::string CMainDialog::GetCustomLevelName(int id)
{
if(id < 1 || id > m_customLevelList.size()) return "";
return m_customLevelList[id-1]; return m_customLevelList[id-1];
} }

View File

@ -103,7 +103,8 @@ public:
void AllMissionUpdate(); void AllMissionUpdate();
void ShowSoluceUpdate(); void ShowSoluceUpdate();
std::string& GetCustomLevelName(int id); void UpdateCustomLevelList();
std::string GetCustomLevelName(int id);
void MakeSaveScreenshot(const std::string& name); void MakeSaveScreenshot(const std::string& name);
@ -155,7 +156,6 @@ protected:
Phase m_phase; // copy of CRobotMain Phase m_phase; // copy of CRobotMain
Phase m_phaseSetup; // tab selected Phase m_phaseSetup; // tab selected
Phase m_phaseTerm; // phase trainer/scene/proto
float m_phaseTime; float m_phaseTime;
int m_apperanceTab; // perso: tab selected int m_apperanceTab; // perso: tab selected