From f22bfcd9baa8e850cd358cd2dc5b4220a8903ad6 Mon Sep 17 00:00:00 2001 From: jdflyer Date: Sun, 26 Jul 2026 00:25:59 -0700 Subject: [PATCH] Add restart to prelaunch button to settings, remove gamemodeStub functions --- src/d/d_bright_check.cpp | 2 +- src/d/d_s_name.cpp | 2 +- src/d/d_save.cpp | 2 +- src/dusk/gamemode.cpp | 4 +-- src/dusk/gamemode.hpp | 57 ++++++++++++++++++++++++++++++++------- src/dusk/ui/menu_bar.cpp | 5 +++- src/dusk/ui/modal.cpp | 1 - src/dusk/ui/prelaunch.cpp | 8 +++--- src/dusk/ui/settings.cpp | 14 +++++++++- src/f_ap/f_ap_game.cpp | 2 +- src/m_Do/m_Do_Reset.cpp | 4 +-- 11 files changed, 77 insertions(+), 24 deletions(-) diff --git a/src/d/d_bright_check.cpp b/src/d/d_bright_check.cpp index 01a3441eea..ee4ab6260a 100644 --- a/src/d/d_bright_check.cpp +++ b/src/d/d_bright_check.cpp @@ -189,7 +189,7 @@ void dBrightCheck_c::modeMove() { if (!dusk::getSettings().game.hideTvSettingsScreen) { const dusk::gamemode::Gamemode* gamemode = dusk::gamemode::getGamemodeManager().getCurrentGamemode(); if (gamemode) { - gamemode->mOnSaveLoadedFunction(); + gamemode->invokeOnSaveLoadedFunction(); } } diff --git a/src/d/d_s_name.cpp b/src/d/d_s_name.cpp index 6136353e16..e67e407a64 100644 --- a/src/d/d_s_name.cpp +++ b/src/d/d_s_name.cpp @@ -425,7 +425,7 @@ void dScnName_c::changeGameScene() { if (dusk::getSettings().game.hideTvSettingsScreen) { const dusk::gamemode::Gamemode* gamemode = dusk::gamemode::getGamemodeManager().getCurrentGamemode(); if (gamemode) { - gamemode->mOnSaveLoadedFunction(); + gamemode->invokeOnSaveLoadedFunction(); } } diff --git a/src/d/d_save.cpp b/src/d/d_save.cpp index 3bbf73caea..53d45a10e4 100644 --- a/src/d/d_save.cpp +++ b/src/d/d_save.cpp @@ -1541,7 +1541,7 @@ void dSv_save_c::init() { #ifdef TARGET_PC const dusk::gamemode::Gamemode* gamemode = dusk::gamemode::getGamemodeManager().getCurrentGamemode(); if (gamemode) { - gamemode->mOnNewSaveFunction(); + gamemode->invokeOnNewSaveFunction(); } #endif } diff --git a/src/dusk/gamemode.cpp b/src/dusk/gamemode.cpp index c3b62d7c75..2bfaf07e7e 100644 --- a/src/dusk/gamemode.cpp +++ b/src/dusk/gamemode.cpp @@ -72,7 +72,7 @@ void GamemodeManager::setCurrentGamemode(const GamemodeId& id) { } const Gamemode* currentGamemode = getCurrentGamemode(); if (currentGamemode) { - currentGamemode->mOnDeactivatedFunction(); + currentGamemode->invokeOnDeactivatedFunction(); } if (mRegisteredGamemodes.find(id) == mRegisteredGamemodes.end()) { DuskGamemodeLog.warn("Attempting to set current game mode to {} when it hasn't been registered!", id); @@ -86,7 +86,7 @@ void GamemodeManager::setCurrentGamemode(const GamemodeId& id) { if (currentGamemode) { // Set the loaded save file to our gamemode's save name mDoMemCd_SetFileName(currentGamemode->mSaveName); - currentGamemode->mOnActivatedFunction(); + currentGamemode->invokeOnActivatedFunction(); } } diff --git a/src/dusk/gamemode.hpp b/src/dusk/gamemode.hpp index 6a48807d56..9aa39ebe59 100644 --- a/src/dusk/gamemode.hpp +++ b/src/dusk/gamemode.hpp @@ -21,16 +21,55 @@ public: std::string mFullName; std::string mSaveName; - std::function mOnActivatedFunction = gamemodeStub; - std::function mOnDeactivatedFunction = gamemodeStub; - std::function mOnPlayFunction = gamemodeStub; - std::function mOnSaveLoadedFunction = gamemodeStub; - std::function mOnNewSaveFunction = gamemodeStub; - std::function mOnGameResetFunction = gamemodeStub; - std::function mOnTickFunction = gamemodeStub; + void invokeOnActivatedFunction() const { + if (mOnActivatedFunction) { + mOnActivatedFunction(); + } + } -private: - static void gamemodeStub() {} + void invokeOnDeactivatedFunction() const { + if (mOnDeactivatedFunction) { + mOnDeactivatedFunction(); + } + } + + void invokeOnPlayFunction() const { + if (mOnPlayFunction) { + mOnPlayFunction(); + } + } + + void invokeOnSaveLoadedFunction() const { + if (mOnSaveLoadedFunction) { + mOnSaveLoadedFunction(); + } + } + + void invokeOnNewSaveFunction() const { + if (mOnNewSaveFunction) { + mOnNewSaveFunction(); + } + } + + void invokeOnGameResetFunction() const { + if (mOnGameResetFunction) { + mOnGameResetFunction(); + } + } + + void invokeOnTickFunction() const { + if (mOnTickFunction) { + mOnTickFunction(); + } + } + + std::function mOnActivatedFunction; + std::function mOnDeactivatedFunction; + std::function mOnPlayFunction; + std::function mOnSaveLoadedFunction; + std::function mOnNewSaveFunction; + std::function mOnGameResetFunction; + std::function mOnTickFunction; }; class GamemodeManager { diff --git a/src/dusk/ui/menu_bar.cpp b/src/dusk/ui/menu_bar.cpp index 018f02e47e..28f51e1e6a 100644 --- a/src/dusk/ui/menu_bar.cpp +++ b/src/dusk/ui/menu_bar.cpp @@ -95,7 +95,10 @@ MenuBar::MenuBar() dismiss(modal); return; } - prelaunch_state().showPrelaunchOnReset = true; + if (gamemode::getGamemodeManager().getRegisteredGamemodes().size() > 1) { + // If we have gamemodes registered, show pre-launch on a menubar reset + prelaunch_state().showPrelaunchOnReset = true; + } JUTGamePad::C3ButtonReset::sResetSwitchPushing = true; dismiss(modal); Document::hide(true); diff --git a/src/dusk/ui/modal.cpp b/src/dusk/ui/modal.cpp index db4e04ba88..8c8dcd5a3b 100644 --- a/src/dusk/ui/modal.cpp +++ b/src/dusk/ui/modal.cpp @@ -27,7 +27,6 @@ Modal::Modal(Props props) : WindowSmall("modal", "modal-dialog"), mProps(std::mo actions->SetClass("modal-actions", true); if (props.isVertical) { actions->SetClass("modal-actions-vertical", true); - }else{ } for (auto& action : mProps.actions) { diff --git a/src/dusk/ui/prelaunch.cpp b/src/dusk/ui/prelaunch.cpp index 0f278a3e94..41d9f9f334 100644 --- a/src/dusk/ui/prelaunch.cpp +++ b/src/dusk/ui/prelaunch.cpp @@ -701,7 +701,7 @@ void Prelaunch::rebuild_menu_buttons() { } } -static std::string getPlayButtonText() { +static std::string get_playbutton_text() { auto& state = prelaunch_state(); const bool activeDiscLoaded = !state.activeDiscPath.empty(); if (activeDiscLoaded == false) { @@ -765,7 +765,7 @@ void Prelaunch::build_menu_buttons() { // Set the gamemode to the last used before showing the play button dusk::gamemode::getGamemodeManager().setGamemodeToPrevious(); - mMenuButtons.push_back(std::make_unique