From 9898ee542c7cbd26945ff0a5d8d0ccecd0020fb9 Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Sat, 22 May 2021 12:58:07 +0200 Subject: [PATCH] - route all accesses to gameaction from the backend through the sysCallbacks. gameactions are frontend specific so this needs to be decoupled. --- src/common/cutscenes/screenjob.cpp | 3 ++- src/{ => common/engine}/gamestate.h | 31 ++++------------------------- src/common/engine/i_interface.h | 1 + src/d_event.h | 24 ++++++++++++++++++++++ src/d_main.cpp | 8 +++++++- src/g_game.cpp | 1 + 6 files changed, 39 insertions(+), 29 deletions(-) rename src/{ => common/engine}/gamestate.h (62%) diff --git a/src/common/cutscenes/screenjob.cpp b/src/common/cutscenes/screenjob.cpp index b983c3e81..a3978298e 100644 --- a/src/common/cutscenes/screenjob.cpp +++ b/src/common/cutscenes/screenjob.cpp @@ -50,6 +50,7 @@ #include "c_dispatch.h" #include "s_music.h" #include "m_argv.h" +#include "i_interface.h" CVAR(Bool, inter_subtitles, false, CVAR_ARCHIVE | CVAR_GLOBALCONFIG); @@ -316,7 +317,7 @@ bool StartCutscene(CutsceneDef& cs, int flags, const CompletionFunc& completion_ } if (flags & SJ_DELAY) intermissiondelay = 10; // need to wait a bit at the start to let the timer catch up. else intermissiondelay = 0; - gameaction = (flags & SJ_BLOCKUI) ? ga_intro : ga_intermission; + if (sysCallbacks.StartCutscene) sysCallbacks.StartCutscene(flags & SJ_BLOCKUI); } catch (...) { diff --git a/src/gamestate.h b/src/common/engine/gamestate.h similarity index 62% rename from src/gamestate.h rename to src/common/engine/gamestate.h index 199618f04..edea03a69 100644 --- a/src/gamestate.h +++ b/src/common/engine/gamestate.h @@ -14,6 +14,8 @@ enum gamestate_t : int GS_STARTUP, // [RH] Console is fullscreen, and game is just starting GS_TITLELEVEL, // [RH] A combination of GS_LEVEL and GS_DEMOSCREEN GS_INTRO, + GS_CUTSCENE, + GS_MENUSCREEN = GS_DEMOSCREEN, GS_FORCEWIPE = -1, @@ -22,31 +24,6 @@ enum gamestate_t : int GS_FORCEWIPEMELT = -4 }; + extern gamestate_t gamestate; - -enum gameaction_t : int -{ - ga_nothing, - ga_loadlevel, // not used. - ga_newgame, - ga_newgame2, - ga_recordgame, - ga_loadgame, - ga_loadgamehidecon, - ga_loadgameplaydemo, - ga_autoloadgame, - ga_savegame, - ga_autosave, - ga_playdemo, - ga_completed, - ga_slideshow, - ga_worlddone, - ga_screenshot, - ga_togglemap, - ga_fullconsole, - ga_resumeconversation, - ga_intro, - ga_intermission, -}; - -extern gameaction_t gameaction; +extern int intermissiondelay; diff --git a/src/common/engine/i_interface.h b/src/common/engine/i_interface.h index dd3ea5862..ece1ea61d 100644 --- a/src/common/engine/i_interface.h +++ b/src/common/engine/i_interface.h @@ -34,6 +34,7 @@ struct SystemCallbacks void (*FontCharCreated)(FGameTexture* base, FGameTexture* untranslated); void (*ToggleFullConsole)(); void (*StartCutscene)(bool blockui); + }; extern SystemCallbacks sysCallbacks; diff --git a/src/d_event.h b/src/d_event.h index da93b75e4..15b490556 100644 --- a/src/d_event.h +++ b/src/d_event.h @@ -75,6 +75,30 @@ typedef enum // Called by IO functions when input is detected. void D_Render(std::function action, bool interpolate); +enum gameaction_t : int +{ + ga_nothing, + ga_loadlevel, // not used. + ga_newgame, + ga_newgame2, + ga_recordgame, + ga_loadgame, + ga_loadgamehidecon, + ga_loadgameplaydemo, + ga_autoloadgame, + ga_savegame, + ga_autosave, + ga_playdemo, + ga_completed, + ga_slideshow, + ga_worlddone, + ga_screenshot, + ga_togglemap, + ga_fullconsole, + ga_resumeconversation, + ga_intro, + ga_intermission, +}; extern gameaction_t gameaction; diff --git a/src/d_main.cpp b/src/d_main.cpp index 723012838..feb8fad61 100644 --- a/src/d_main.cpp +++ b/src/d_main.cpp @@ -2997,6 +2997,12 @@ static void System_ToggleFullConsole() gameaction = ga_fullconsole; } +static void System_StartCutscene(bool blockui) +{ + gameaction = blockui ? ga_intro : ga_intermission; +} + + bool CheckSkipGameOptionBlock(const char* str); //========================================================================== @@ -3048,7 +3054,7 @@ static int D_DoomMain_Internal (void) nullptr, nullptr, System_ToggleFullConsole, - nullptr, + System_StartCutscene, }; diff --git a/src/g_game.cpp b/src/g_game.cpp index da11adf1d..da982bffe 100644 --- a/src/g_game.cpp +++ b/src/g_game.cpp @@ -77,6 +77,7 @@ #include "v_palette.h" #include "s_music.h" #include "p_setup.h" +#include "d_event.h" #include "v_video.h" #include "g_hub.h"