Sorting saved games list (#380)
parent
ea646875a1
commit
b8103963c3
|
@ -28,6 +28,7 @@
|
|||
#include <time.h>
|
||||
#include <sstream>
|
||||
#include <iomanip>
|
||||
#include <chrono>
|
||||
|
||||
|
||||
// Returns a non-accented letter.
|
||||
|
@ -254,3 +255,7 @@ void AddExt(char* filename, const char* ext)
|
|||
strcat(filename, ext);
|
||||
}
|
||||
|
||||
int GetCurrentTimestamp()
|
||||
{
|
||||
return std::chrono::seconds(std::time(NULL)).count();
|
||||
}
|
|
@ -37,3 +37,4 @@ extern std::string TimeFormat(float time);
|
|||
|
||||
extern void AddExt(char* filename, const char* ext);
|
||||
|
||||
extern int GetCurrentTimestamp();
|
||||
|
|
|
@ -5712,6 +5712,10 @@ bool CRobotMain::IOWriteScene(const char *filename, const char *filecbot, char *
|
|||
line->AddParam("maj", new CLevelParserParam(0));
|
||||
line->AddParam("min", new CLevelParserParam(1));
|
||||
level->AddLine(line);
|
||||
|
||||
line = new CLevelParserLine("Created");
|
||||
line->AddParam("date", new CLevelParserParam(GetCurrentTimestamp()));
|
||||
level->AddLine(line);
|
||||
|
||||
char* name = m_dialog->GetSceneName();
|
||||
line = new CLevelParserLine("Mission");
|
||||
|
|
|
@ -3945,6 +3945,7 @@ void CMainDialog::IOReadName()
|
|||
pe = static_cast<CEdit*>(pw->SearchControl(EVENT_INTERFACE_IONAME));
|
||||
if ( pe == nullptr ) return;
|
||||
|
||||
//TODO: CLevelParser
|
||||
sprintf(resume, "%s %d", m_sceneName, m_chap[m_index]+1);
|
||||
BuildSceneName(filename, m_sceneName, (m_chap[m_index]+1)*100);
|
||||
sprintf(op, "Title.E");
|
||||
|
@ -4004,7 +4005,10 @@ void CMainDialog::IOReadList()
|
|||
std::string userSaveDir = m_savegameDir + "/" + m_main->GetGamerName();
|
||||
|
||||
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)
|
||||
{
|
||||
|
@ -4013,11 +4017,18 @@ void CMainDialog::IOReadList()
|
|||
{
|
||||
CLevelParser* level = new CLevelParser(savegameFile);
|
||||
level->Load();
|
||||
pl->SetItemName(m_saveList.size(), level->Get("Title")->GetParam("text")->AsString().c_str());
|
||||
m_saveList.push_back(userSaveDir + "/" + dir);
|
||||
int time = level->Get("Created")->GetParam("date")->AsInt();
|
||||
sortedSaveDirs[time] = userSaveDir + "/" + dir;
|
||||
names[time] = level->Get("Title")->GetParam("text")->AsString();
|
||||
delete level;
|
||||
}
|
||||
}
|
||||
|
||||
for (auto dir : sortedSaveDirs)
|
||||
{
|
||||
pl->SetItemName(m_saveList.size(), names[dir.first].c_str());
|
||||
m_saveList.push_back(dir.second);
|
||||
}
|
||||
|
||||
// invalid index
|
||||
if ( m_phase == PHASE_WRITE || m_phase == PHASE_WRITEs )
|
||||
|
|
Loading…
Reference in New Issue