diff options
| author | Anghelo Carvajal <angheloalf95@gmail.com> | 2023-08-12 11:44:35 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-08-12 11:44:35 -0400 |
| commit | 656fd08ee828024f5a0e888f293ca95b7a83cd64 (patch) | |
| tree | 394a0e9870c1eb946187ef388b23596fcccde1c1 /src/code | |
| parent | 138dd55662181b7de82f003c6b46ba3d0611b258 (diff) | |
Gamestate table (#1354)
* gamestate_table.h
* move macros
* bss
* format
Diffstat (limited to 'src/code')
| -rw-r--r-- | src/code/graph.c | 30 | ||||
| -rw-r--r-- | src/code/z_game_dlftbls.c | 50 |
2 files changed, 43 insertions, 37 deletions
diff --git a/src/code/graph.c b/src/code/graph.c index 24a554dc2..fe1542f66 100644 --- a/src/code/graph.c +++ b/src/code/graph.c @@ -75,27 +75,17 @@ void Graph_SetNextGfxPool(GraphicsContext* gfxCtx) { GameStateOverlay* Graph_GetNextGameState(GameState* gameState) { GameStateFunc gameStateInit = GameState_GetInit(gameState); - if (gameStateInit == Setup_Init) { - return &gGameStateOverlayTable[0]; - } - if (gameStateInit == MapSelect_Init) { - return &gGameStateOverlayTable[1]; - } - if (gameStateInit == ConsoleLogo_Init) { - return &gGameStateOverlayTable[2]; - } - if (gameStateInit == Play_Init) { - return &gGameStateOverlayTable[3]; - } - if (gameStateInit == TitleSetup_Init) { - return &gGameStateOverlayTable[4]; - } - if (gameStateInit == FileSelect_Init) { - return &gGameStateOverlayTable[5]; - } - if (gameStateInit == DayTelop_Init) { - return &gGameStateOverlayTable[6]; + // Generates code to match gameStateInit to a gamestate entry and returns it if found +#define DEFINE_GAMESTATE_INTERNAL(typeName, enumName) \ + if (gameStateInit == typeName##_Init) { \ + return &gGameStateOverlayTable[enumName]; \ } +#define DEFINE_GAMESTATE(typeName, enumName, name) DEFINE_GAMESTATE_INTERNAL(typeName, enumName) + +#include "tables/gamestate_table.h" + +#undef DEFINE_GAMESTATE +#undef DEFINE_GAMESTATE_INTERNAL return NULL; } diff --git a/src/code/z_game_dlftbls.c b/src/code/z_game_dlftbls.c index 7336b01f6..cb3aee317 100644 --- a/src/code/z_game_dlftbls.c +++ b/src/code/z_game_dlftbls.c @@ -6,22 +6,38 @@ #include "overlays/gamestates/ovl_title/z_title.h" #include "z_title_setup.h" -#define GAMESTATE_OVERLAY(name, init, destroy, size) \ - { \ - NULL, SEGMENT_ROM_START(ovl_##name), SEGMENT_ROM_END(ovl_##name), SEGMENT_START(ovl_##name), \ - SEGMENT_END(ovl_##name), 0, init, destroy, 0, 0, 0, size \ - } -#define GAMESTATE_OVERLAY_INTERNAL(init, destroy, size) \ - { NULL, 0, 0, NULL, NULL, 0, init, destroy, 0, 0, 0, size } - -GameStateOverlay gGameStateOverlayTable[] = { - GAMESTATE_OVERLAY_INTERNAL(Setup_Init, Setup_Destroy, sizeof(SetupState)), - GAMESTATE_OVERLAY(select, MapSelect_Init, MapSelect_Destroy, sizeof(MapSelectState)), - GAMESTATE_OVERLAY(title, ConsoleLogo_Init, ConsoleLogo_Destroy, sizeof(ConsoleLogoState)), - GAMESTATE_OVERLAY_INTERNAL(Play_Init, Play_Destroy, sizeof(PlayState)), - GAMESTATE_OVERLAY(opening, TitleSetup_Init, TitleSetup_Destroy, sizeof(TitleSetupState)), - GAMESTATE_OVERLAY(file_choose, FileSelect_Init, FileSelect_Destroy, sizeof(FileSelectState)), - GAMESTATE_OVERLAY(daytelop, DayTelop_Init, DayTelop_Destroy, sizeof(DayTelopState)), +// Linker symbol declarations (used in the table below) +#define DEFINE_GAMESTATE(_typeName, _enumName, segmentName) DECLARE_OVERLAY_SEGMENT(segmentName) +#define DEFINE_GAMESTATE_INTERNAL(_typeName, _enumName) + +#include "tables/gamestate_table.h" + +#undef DEFINE_GAMESTATE +#undef DEFINE_GAMESTATE_INTERNAL + +// Gamestate Overlay Table definition +#define DEFINE_GAMESTATE_INTERNAL(typeName, _enumName) \ + { NULL, 0, 0, NULL, NULL, NULL, typeName##_Init, typeName##_Destroy, NULL, NULL, 0, sizeof(typeName##State) }, + +#define DEFINE_GAMESTATE(typeName, _enumName, segmentName) \ + { NULL, \ + (uintptr_t)SEGMENT_ROM_START(ovl_##segmentName), \ + (uintptr_t)SEGMENT_ROM_END(ovl_##segmentName), \ + SEGMENT_START(ovl_##segmentName), \ + SEGMENT_END(ovl_##segmentName), \ + NULL, \ + typeName##_Init, \ + typeName##_Destroy, \ + NULL, \ + NULL, \ + 0, \ + sizeof(typeName##State) }, + +GameStateOverlay gGameStateOverlayTable[GAMESTATE_ID_MAX] = { +#include "tables/gamestate_table.h" }; -s32 gGraphNumGameStates = ARRAY_COUNT(gGameStateOverlayTable); +#undef DEFINE_GAMESTATE +#undef DEFINE_GAMESTATE_INTERNAL + +GameStateId gGraphNumGameStates = GAMESTATE_ID_MAX; |
