Sorting saved games list (#380)

dev-mp
krzys-h 2014-11-11 12:08:19 +01:00
parent ea646875a1
commit b8103963c3
4 changed files with 24 additions and 3 deletions

View File

@ -28,6 +28,7 @@
#include <time.h> #include <time.h>
#include <sstream> #include <sstream>
#include <iomanip> #include <iomanip>
#include <chrono>
// Returns a non-accented letter. // Returns a non-accented letter.
@ -254,3 +255,7 @@ void AddExt(char* filename, const char* ext)
strcat(filename, ext); strcat(filename, ext);
} }
int GetCurrentTimestamp()
{
return std::chrono::seconds(std::time(NULL)).count();
}

View File

@ -37,3 +37,4 @@ extern std::string TimeFormat(float time);
extern void AddExt(char* filename, const char* ext); extern void AddExt(char* filename, const char* ext);
extern int GetCurrentTimestamp();

View File

@ -5712,6 +5712,10 @@ bool CRobotMain::IOWriteScene(const char *filename, const char *filecbot, char *
line->AddParam("maj", new CLevelParserParam(0)); line->AddParam("maj", new CLevelParserParam(0));
line->AddParam("min", new CLevelParserParam(1)); line->AddParam("min", new CLevelParserParam(1));
level->AddLine(line); level->AddLine(line);
line = new CLevelParserLine("Created");
line->AddParam("date", new CLevelParserParam(GetCurrentTimestamp()));
level->AddLine(line);
char* name = m_dialog->GetSceneName(); char* name = m_dialog->GetSceneName();
line = new CLevelParserLine("Mission"); line = new CLevelParserLine("Mission");

View File

@ -3945,6 +3945,7 @@ void CMainDialog::IOReadName()
pe = static_cast<CEdit*>(pw->SearchControl(EVENT_INTERFACE_IONAME)); pe = static_cast<CEdit*>(pw->SearchControl(EVENT_INTERFACE_IONAME));
if ( pe == nullptr ) return; if ( pe == nullptr ) return;
//TODO: CLevelParser
sprintf(resume, "%s %d", m_sceneName, m_chap[m_index]+1); sprintf(resume, "%s %d", m_sceneName, m_chap[m_index]+1);
BuildSceneName(filename, m_sceneName, (m_chap[m_index]+1)*100); BuildSceneName(filename, m_sceneName, (m_chap[m_index]+1)*100);
sprintf(op, "Title.E"); sprintf(op, "Title.E");
@ -4004,7 +4005,10 @@ void CMainDialog::IOReadList()
std::string userSaveDir = m_savegameDir + "/" + m_main->GetGamerName(); std::string userSaveDir = m_savegameDir + "/" + m_main->GetGamerName();
auto saveDirs = CResourceManager::ListDirectories(userSaveDir); auto saveDirs = CResourceManager::ListDirectories(userSaveDir);
std::sort(saveDirs.begin(), saveDirs.end()); //std::sort(saveDirs.begin(), saveDirs.end());
std::map<int, std::string> sortedSaveDirs;
std::map<int, std::string> names;
for (auto dir : saveDirs) for (auto dir : saveDirs)
{ {
@ -4013,11 +4017,18 @@ void CMainDialog::IOReadList()
{ {
CLevelParser* level = new CLevelParser(savegameFile); CLevelParser* level = new CLevelParser(savegameFile);
level->Load(); level->Load();
pl->SetItemName(m_saveList.size(), level->Get("Title")->GetParam("text")->AsString().c_str()); int time = level->Get("Created")->GetParam("date")->AsInt();
m_saveList.push_back(userSaveDir + "/" + dir); sortedSaveDirs[time] = userSaveDir + "/" + dir;
names[time] = level->Get("Title")->GetParam("text")->AsString();
delete level; delete level;
} }
} }
for (auto dir : sortedSaveDirs)
{
pl->SetItemName(m_saveList.size(), names[dir.first].c_str());
m_saveList.push_back(dir.second);
}
// invalid index // invalid index
if ( m_phase == PHASE_WRITE || m_phase == PHASE_WRITEs ) if ( m_phase == PHASE_WRITE || m_phase == PHASE_WRITEs )