- implement new cvar save_sort_order - for now options are only 0 or 1 - 0 is alphabetical, 1 is descending by time (most recent first)

This commit is contained in:
Rachael Alexanderson 2024-12-28 14:32:58 -05:00 committed by Rachael Alexanderson
parent aebabd2307
commit 902bf03c47
3 changed files with 27 additions and 1 deletions

View file

@ -51,6 +51,7 @@
CVAR(String, save_dir, "", CVAR_ARCHIVE | CVAR_GLOBALCONFIG);
FString SavegameFolder;
CVAR(Int, save_sort_order, 0, CVAR_ARCHIVE | CVAR_GLOBALCONFIG)
//=============================================================================
//
@ -136,7 +137,19 @@ int FSavegameManagerBase::InsertSaveNode(FSaveGameNode *node)
//if (SaveGames[0] == &NewSaveNode) i++; // To not insert above the "new savegame" dummy entry.
for (; i < SaveGames.Size(); i++)
{
if (SaveGames[i]->bOldVersion || node->SaveTitle.CompareNoCase(SaveGames[i]->SaveTitle) <= 0)
bool sortcmp = false;
switch(save_sort_order)
{
case 1:
sortcmp = node->CreationTime.CompareNoCase(SaveGames[i]->CreationTime) > 0;
break;
default:
case 0:
sortcmp = node->SaveTitle.CompareNoCase(SaveGames[i]->SaveTitle) <= 0;
break;
}
if (SaveGames[i]->bOldVersion || sortcmp)
{
break;
}

View file

@ -11,6 +11,7 @@ struct FSaveGameNode
{
FString SaveTitle;
FString Filename;
FString CreationTime;
bool bOldVersion = false;
bool bMissingWads = false;
bool bNoDelete = false;

View file

@ -50,6 +50,8 @@
// Save name length limit for old binary formats.
#define OLDSAVESTRINGSIZE 24
EXTERN_CVAR(Int, save_sort_order)
//=============================================================================
//
// M_ReadSaveStrings
@ -60,6 +62,14 @@
void FSavegameManager::ReadSaveStrings()
{
// re-read list if forced to sort again
static int old_save_sort_order = 0;
if (old_save_sort_order != save_sort_order)
{
ClearSaveGames();
old_save_sort_order = save_sort_order;
}
if (SaveGames.Size() == 0)
{
FString filter;
@ -91,6 +101,7 @@ void FSavegameManager::ReadSaveStrings()
FString engine = arc.GetString("Engine");
FString iwad = arc.GetString("Game WAD");
FString title = arc.GetString("Title");
FString creationtime = arc.GetString("Creation Time");
if (engine.Compare(GAMESIG) != 0 || savever > SAVEVER)
@ -120,6 +131,7 @@ void FSavegameManager::ReadSaveStrings()
node->bOldVersion = oldVer;
node->bMissingWads = missing;
node->SaveTitle = title;
node->CreationTime = creationtime;
InsertSaveNode(node);
}
}