refactor so game init is repeatable (untested)

This commit is contained in:
Eric House 2021-02-03 15:22:08 -08:00
parent ec9570ab81
commit 15ae9da08b

View file

@ -43,30 +43,16 @@ EM_JS(void, call_alert, (const char* str), {
static Globals* sGlobals; static Globals* sGlobals;
static void static void
initGlobals( Globals* globals ) initDeviceGlobals( Globals* globals )
{ {
globals->cp.showBoardArrow = XP_TRUE; globals->cp.showBoardArrow = XP_TRUE;
globals->cp.allowPeek = XP_TRUE; globals->cp.allowPeek = XP_TRUE;
// globals->cp.showRobotScores = XP_TRUE; // globals->cp.showRobotScores = XP_TRUE;
globals->cp.sortNewTiles = XP_TRUE; globals->cp.sortNewTiles = XP_TRUE;
globals->gi.serverRole = SERVER_STANDALONE;
globals->gi.phoniesAction = PHONIES_WARN;
globals->gi.nPlayers = 2;
globals->gi.boardSize = 15;
globals->gi.dictName = "myDict";
globals->gi.players[0].name = "You";
globals->gi.players[0].isLocal = XP_TRUE;
globals->gi.players[1].name = "Robot";
globals->gi.players[1].isLocal = XP_TRUE;
globals->gi.players[1].robotIQ = 99;
globals->mpool = mpool_make( "wasm" ); globals->mpool = mpool_make( "wasm" );
globals->vtMgr = make_vtablemgr( globals->mpool ); globals->vtMgr = make_vtablemgr( globals->mpool );
globals->dutil = wasm_dutil_make( globals->mpool, globals->vtMgr, globals ); globals->dutil = wasm_dutil_make( globals->mpool, globals->vtMgr, globals );
globals->util = wasm_util_make( globals->mpool, &globals->gi,
globals->dutil, globals );
globals->dict = wasm_load_dict( globals->mpool ); globals->dict = wasm_load_dict( globals->mpool );
globals->draw = wasm_draw_make( MPPARM(globals->mpool) globals->draw = wasm_draw_make( MPPARM(globals->mpool)
@ -74,25 +60,47 @@ initGlobals( Globals* globals )
} }
static void static void
makeAndDraw( Globals* globals ) makeAndDraw( Globals* globals, bool p0robot, bool p1robot )
{ {
if ( !!globals->util ) {
game_dispose( &globals->game, NULL );
wasm_util_destroy( globals->util );
globals->util = NULL;
}
globals->gi.serverRole = SERVER_STANDALONE;
globals->gi.phoniesAction = PHONIES_WARN;
globals->gi.nPlayers = 2;
globals->gi.boardSize = 15;
globals->gi.dictName = "myDict";
globals->gi.players[0].name = "Player 1";
globals->gi.players[0].isLocal = XP_TRUE;
if ( p0robot ) {
globals->gi.players[0].robotIQ = 99;
}
globals->gi.players[1].name = "Player 2";
globals->gi.players[1].isLocal = XP_TRUE;
if ( p1robot ) {
globals->gi.players[1].robotIQ = 99;
}
globals->util = wasm_util_make( globals->mpool, &globals->gi,
globals->dutil, globals );
XP_LOGFF( "calling game_makeNewGame()" ); XP_LOGFF( "calling game_makeNewGame()" );
game_makeNewGame( MPPARM(globals->mpool) NULL, game_makeNewGame( MPPARM(globals->mpool) NULL,
&globals->game, &globals->gi, &globals->game, &globals->gi,
globals->util, globals->draw, globals->util, globals->draw,
&globals->cp, &globals->procs ); &globals->cp, &globals->procs );
XP_LOGFF( "calling board_figureLayout()" );
BoardDims dims; BoardDims dims;
board_figureLayout( globals->game.board, NULL, &globals->gi, board_figureLayout( globals->game.board, NULL, &globals->gi,
WASM_BOARD_LEFT, WASM_HOR_SCORE_TOP, BDWIDTH, BDHEIGHT, WASM_BOARD_LEFT, WASM_HOR_SCORE_TOP, BDWIDTH, BDHEIGHT,
110, 150, 200, BDWIDTH-25, 16, 16, XP_FALSE, &dims ); 110, 150, 200, BDWIDTH-25, 16, 16, XP_FALSE, &dims );
XP_LOGFF( "calling board_applyLayout()" );
board_applyLayout( globals->game.board, NULL, &dims ); board_applyLayout( globals->game.board, NULL, &dims );
XP_LOGFF( "calling board_draw()" );
model_setDictionary( globals->game.model, NULL, globals->dict ); model_setDictionary( globals->game.model, NULL, globals->dict );
// model_setSquareBonuses( globals->game.model, XWBonusType* bonuses, XP_U16 nBonuses )
(void)server_do( globals->game.server, NULL ); /* assign tiles, etc. */ (void)server_do( globals->game.server, NULL ); /* assign tiles, etc. */
board_draw( globals->game.board, NULL ); board_draw( globals->game.board, NULL );
@ -256,43 +264,51 @@ button( const char* msg )
} }
#endif #endif
#ifdef NAKED_MODE static Globals*
void mainf() initOnce()
#else
int main( int argc, char** argv )
#endif
{ {
LOG_FUNC(); Globals* globals = calloc(1, sizeof(*globals));
Globals globals = {0}; sGlobals = globals;
sGlobals = &globals;
SDL_Init( SDL_INIT_EVENTS ); SDL_Init( SDL_INIT_EVENTS );
TTF_Init(); TTF_Init();
int foo = SDL_SWSURFACE;
// Do I want SDL_CreateWindow() plus something else?
SDL_CreateWindowAndRenderer( WINDOW_WIDTH, WINDOW_HEIGHT, 0, SDL_CreateWindowAndRenderer( WINDOW_WIDTH, WINDOW_HEIGHT, 0,
&globals.window, &globals.renderer ); &globals->window, &globals->renderer );
/** /* whip the canvas to background */
* Set up a white background SDL_SetRenderDrawColor( globals->renderer, 155, 155, 155, 255 );
*/ SDL_RenderClear( globals->renderer );
SDL_SetRenderDrawColor(globals.renderer, 255, 255, 50, 50);
SDL_RenderClear(globals.renderer);
initGlobals( &globals ); initDeviceGlobals( globals );
makeAndDraw( &globals );
return globals;
}
#ifdef NAKED_MODE
void
mainf()
{
LOG_FUNC();
Globals* globals = initOnce();
emscripten_set_main_loop_arg( looper, globals, -1, 1 );
}
#else
int
main( int argc, char** argv )
{
LOG_FUNC();
Globals* globals = initOnce();
makeAndDraw( globals, false, true );
/** /**
* Show what is in the renderer * Show what is in the renderer
*/ */
wasm_draw_render( globals.draw, globals.renderer ); /* wasm_draw_render( globals.draw, globals.renderer ); */
SDL_RenderPresent( globals.renderer ); /* SDL_RenderPresent( globals.renderer ); */
emscripten_set_main_loop_arg( looper, &globals, -1, 1 ); emscripten_set_main_loop_arg( looper, globals, -1, 1 );
#ifndef NAKED_MODE
return 0; return 0;
#endif
} }
#endif