Overlays/SaveStates: Add multi-slot support to controller menu

This commit is contained in:
Elad
2025-11-12 14:42:59 +02:00
parent 0bf9ee9fa5
commit e48ba283d8
3 changed files with 29 additions and 10 deletions

View File

@@ -35,18 +35,31 @@ namespace rsx
return page_navigation::exit;
});
if (!suspend_mode && boot_current_game_savestate(true, 1)) {
std::unique_ptr<overlay_element> reload_state = std::make_unique<home_menu_entry>(
get_localized_string(localized_string_id::HOME_MENU_RELOAD_SAVESTATE));
add_item(reload_state, [](pad_button btn) -> page_navigation
for (u32 save_index = 1; !suspend_mode && save_index <= 4; save_index++)
{
if (boot_current_game_savestate(true, save_index))
{
if (btn != pad_button::cross) return page_navigation::stay;
rsx_log.notice("User selected reload savestate in home menu");
Emu.CallFromMainThread([]() { boot_current_game_savestate(true, 1); });
return page_navigation::exit;
});
const localized_string_id str_id = static_cast<localized_string_id>(static_cast<usz>(localized_string_id::HOME_MENU_RELOAD_SAVESTATE) + (save_index - 1));
std::unique_ptr<overlay_element> reload_state = std::make_unique<home_menu_entry>(get_localized_string(str_id));
add_item(reload_state, [save_index](pad_button btn) -> page_navigation
{
if (btn != pad_button::cross)
{
return page_navigation::stay;
}
rsx_log.notice("User selected reload savestate(%u) in home menu", save_index);
Emu.CallFromMainThread([save_index]() { boot_current_game_savestate(false, save_index); });
return page_navigation::exit;
});
}
else
{
break;
}
}
apply_layout();
}
}

View File

@@ -274,6 +274,9 @@ enum class localized_string_id
HOME_MENU_SAVESTATE_SAVE,
HOME_MENU_SAVESTATE_AND_EXIT,
HOME_MENU_RELOAD_SAVESTATE,
HOME_MENU_RELOAD_SECOND_SAVESTATE,
HOME_MENU_RELOAD_THIRD_SAVESTATE,
HOME_MENU_RELOAD_FOURTH_SAVESTATE,
HOME_MENU_RECORDING,
HOME_MENU_TROPHIES,
HOME_MENU_TROPHY_LIST_TITLE,

View File

@@ -295,6 +295,9 @@ private:
case localized_string_id::HOME_MENU_SAVESTATE_SAVE: return tr("Save Emulation State");
case localized_string_id::HOME_MENU_SAVESTATE_AND_EXIT: return tr("Save Emulation State And Exit");
case localized_string_id::HOME_MENU_RELOAD_SAVESTATE: return tr("Reload Last Emulation State");
case localized_string_id::HOME_MENU_RELOAD_SECOND_SAVESTATE: return tr("Reload Second-To-Last Emulation State");
case localized_string_id::HOME_MENU_RELOAD_THIRD_SAVESTATE: return tr("Reload Third-To-Last Emulation State");
case localized_string_id::HOME_MENU_RELOAD_FOURTH_SAVESTATE: return tr("Reload Fourth-To-Last Emulation State");
case localized_string_id::HOME_MENU_RECORDING: return tr("Start/Stop Recording");
case localized_string_id::HOME_MENU_TROPHIES: return tr("Trophies");
case localized_string_id::HOME_MENU_TROPHY_LIST_TITLE: return tr("Trophy Progress: %0").arg(std::forward<Args>(args)...);