summaryrefslogtreecommitdiff
path: root/src/code/graph.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/code/graph.c')
-rw-r--r--src/code/graph.c30
1 files changed, 10 insertions, 20 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;
}