Use enum for better maintainability & error checking

This commit is contained in:
Sally Coolatta 2020-10-25 11:34:15 -04:00
parent 3469ab12ba
commit c93330bf20
4 changed files with 51 additions and 26 deletions

View file

@ -58,7 +58,7 @@ I_mutex con_mutex;
static boolean con_started = false; // console has been initialised
boolean con_startup = false; // true at game startup, screen need refreshing
UINT8 con_startup_loadprogress = 0; // Progress for startup load bar
con_loadprogress_t con_startup_loadprogress = 0; // Progress for startup load bar
static boolean con_forcepic = true; // at startup toggle console translucency when first off
boolean con_recalc; // set true when screen size has changed
@ -1907,6 +1907,22 @@ void CON_Drawer(void)
Unlock_state();
}
//
// Error handling for the loading bar, to ensure it doesn't skip any steps.
//
void CON_SetLoadingProgress(con_loadprogress_t newStep)
{
const con_loadprogress_t expectedStep = con_startup_loadprogress + 1;
if (newStep != expectedStep)
{
I_Error("Something is wrong with the loading bar! (got %d, expected %d)\n", newStep, expectedStep);
return;
}
con_startup_loadprogress = newStep;
}
//
// Draws a simple white fill at the bottom of startup for load progress
//
@ -1917,13 +1933,6 @@ void CON_DrawLoadBar(void)
Lock_state();
if (con_startup_loadprogress > CON_STARTUP_LOADSTEPS)
{
Unlock_state();
I_Error("CON_STARTUP_LOADSTEPS is too low! (is %d, got %d)\n", CON_STARTUP_LOADSTEPS, con_startup_loadprogress);
return;
}
if (!con_started || !graphics_started)
{
Unlock_state();
@ -1932,7 +1941,7 @@ void CON_DrawLoadBar(void)
CON_DrawBackpic();
barwidth = (BASEVIDWIDTH * con_startup_loadprogress) / CON_STARTUP_LOADSTEPS;
barwidth = (BASEVIDWIDTH * con_startup_loadprogress) / LOADED_ALLDONE;
V_DrawFill(0, BASEVIDHEIGHT - barheight, barwidth, barheight, 0);
Unlock_state();

View file

@ -27,8 +27,24 @@ extern boolean con_recalc;
extern boolean con_startup;
extern UINT8 con_startup_loadprogress;
#define CON_STARTUP_LOADSTEPS 12
typedef enum
{
LOADED_ZINIT = 1,
LOADED_ISTARTUPTIMER,
LOADED_IWAD,
LOADED_PWAD,
LOADED_ISTARTUPGRAPHICS,
LOADED_HULOADGRAPHICS,
LOADED_RENDERER,
LOADED_MINIT,
LOADED_RINIT,
LOADED_SINITSFXCHANNELS,
LOADED_STINIT,
LOADED_DCHECKNETGAME,
LOADED_ALLDONE = LOADED_DCHECKNETGAME,
} con_loadprogress_t;
extern con_loadprogress_t con_startup_loadprogress;
// top clip value for view render: do not draw part of view hidden by console
extern INT32 con_clipviewtop;
@ -67,4 +83,5 @@ boolean CON_Ready(void);
void CON_LogMessage(const char *msg);
// Startup loading bar
void CON_SetLoadingProgress(con_loadprogress_t newStep);
void CON_DrawLoadBar(void);

View file

@ -1281,7 +1281,7 @@ void D_SRB2Main(void)
CONS_Printf("Z_Init(): Init zone memory allocation daemon. \n");
Z_Init();
con_startup_loadprogress++;
CON_SetLoadingProgress(LOADED_ZINIT);
// Do this up here so that WADs loaded through the command line can use ExecCfg
COM_Init();
@ -1365,7 +1365,7 @@ void D_SRB2Main(void)
CONS_Printf("I_StartupTimer()...\n");
I_StartupTimer();
con_startup_loadprogress++;
CON_SetLoadingProgress(LOADED_ISTARTUPTIMER);
// Make backups of some SOCcable tables.
P_BackupTables();
@ -1429,7 +1429,7 @@ void D_SRB2Main(void)
}
}
con_startup_loadprogress++; // finished IWADs
CON_SetLoadingProgress(LOADED_IWAD);
CONS_Printf("W_InitMultipleFiles(): Adding external PWADs.\n");
W_InitMultipleFiles(startuppwads, true);
@ -1468,7 +1468,7 @@ void D_SRB2Main(void)
}
}
con_startup_loadprogress++; // finished PWADs
CON_SetLoadingProgress(LOADED_PWAD);
cht_Init();
@ -1477,7 +1477,7 @@ void D_SRB2Main(void)
CONS_Printf("I_StartupGraphics()...\n");
I_StartupGraphics();
con_startup_loadprogress++;
CON_SetLoadingProgress(LOADED_ISTARTUPGRAPHICS);
#ifdef HWRENDER
// Lactozilla: Add every hardware mode CVAR and CCMD.
@ -1503,7 +1503,7 @@ void D_SRB2Main(void)
CONS_Printf("HU_LoadGraphics()...\n");
HU_LoadGraphics();
con_startup_loadprogress++;
CON_SetLoadingProgress(LOADED_HULOADGRAPHICS);
//--------------------------------------------------------- CONFIG.CFG
M_FirstLoadConfig(); // WARNING : this do a "COM_BufExecute()"
@ -1534,7 +1534,7 @@ void D_SRB2Main(void)
// check the renderer's state
D_CheckRendererState();
}
con_startup_loadprogress++;
CON_SetLoadingProgress(LOADED_RENDERER);
wipegamestate = gamestate;
@ -1564,11 +1564,11 @@ void D_SRB2Main(void)
CONS_Printf("M_Init(): Init miscellaneous info.\n");
M_Init();
con_startup_loadprogress++;
CON_SetLoadingProgress(LOADED_MINIT);
CONS_Printf("R_Init(): Init SRB2 refresh daemon.\n");
R_Init();
con_startup_loadprogress++;
CON_SetLoadingProgress(LOADED_RINIT);
// setting up sound
if (dedicated)
@ -1604,13 +1604,13 @@ void D_SRB2Main(void)
I_InitMusic();
S_InitSfxChannels(cv_soundvolume.value);
}
con_startup_loadprogress++;
CON_SetLoadingProgress(LOADED_SINITSFXCHANNELS);
S_InitMusicDefs();
CONS_Printf("ST_Init(): Init status bar.\n");
ST_Init();
con_startup_loadprogress++;
CON_SetLoadingProgress(LOADED_STINIT);
// Set up splitscreen players before joining!
if (!dedicated && (M_CheckParm("-splitscreen") && M_IsNextParm()))
@ -1628,7 +1628,7 @@ void D_SRB2Main(void)
CONS_Printf("D_CheckNetGame(): Checking network game status.\n");
if (D_CheckNetGame())
autostart = true;
con_startup_loadprogress++;
CON_SetLoadingProgress(LOADED_DCHECKNETGAME);
if (splitscreen && !M_CheckParm("-connect")) // Make sure multiplayer & autostart is set if you have splitscreen, even after D_CheckNetGame
multiplayer = autostart = true;
@ -1844,9 +1844,9 @@ void D_SRB2Main(void)
}
#endif
if (con_startup_loadprogress < CON_STARTUP_LOADSTEPS)
if (con_startup_loadprogress != LOADED_ALLDONE)
{
I_Error("CON_STARTUP_LOADSTEPS is too high! (is %d, got %d)\n", CON_STARTUP_LOADSTEPS, con_startup_loadprogress);
I_Error("Something is wrong with the loading bar! (got %d, expected %d)\n", con_startup_loadprogress, LOADED_ALLDONE);
return;
}
}

View file

@ -38,7 +38,6 @@
#include "p_setup.h"
#include "st_stuff.h" // hud hiding
#include "fastcmp.h"
#include "console.h"
#include "lua_hud.h"