int WINAPI WinMain(HINSTANCE instanceH, HINSTANCE prevInstanceH, LPSTR command_line, int show) { // Initialize the system AESysInit (instanceH, show); GameStateMgrInit(GS_ASTEROIDS); while(gGameStateCurr != GS_QUIT) { // reset the system modules AESysReset(); // If not restarting, load the gamestate if(gGameStateCurr != GS_RESTART) { GameStateMgrUpdate(); GameStateLoad(); } else gGameStateNext = gGameStateCurr = gGameStatePrev; // Initialize the gamestate GameStateInit(); while(gGameStateCurr == gGameStateNext) { AESysFrameStart(); AEInputUpdate(); GameStateUpdate(); GameStateDraw(); AESysFrameEnd(); // check if forcing the application to quit if ((gAESysWinExists == false) || AEInputCheckTriggered(DIK_ESCAPE)) gGameStateNext = GS_QUIT; } GameStateFree(); if(gGameStateNext != GS_RESTART) GameStateUnload(); gGameStatePrev = gGameStateCurr; gGameStateCurr = gGameStateNext; } // free the system AESysExit(); }
void GameStateMgrInit(unsigned int gameStateInit) { // set the initial game state gGameStateInit = gameStateInit; // reset the current, previoud and next game gGameStateCurr = gGameStatePrev = gGameStateNext = gGameStateInit; // call the update to set the function pointers GameStateMgrUpdate(); }
void GSM_MainLoop(void) { while (gGameStateCurr != QUIT) { // reset the system modules AESysReset(); // If not restarting, load the gamestate if (gGameStateCurr != RESTART) { GameStateMgrUpdate(); GameStateLoad(); } else gGameStateNext = gGameStateCurr = gGameStatePrev; // Initialize the gamestate GameStateInit(); while (gGameStateCurr == gGameStateNext) { AESysFrameStart(); AEInputUpdate(); GameStateUpdate(); GameStateDraw(); AESysFrameEnd(); // check if forcing the application to quit if ((0 == AESysDoesWindowExist()) || AEInputCheckTriggered(VK_ESCAPE)) gGameStateNext = QUIT; } GameStateFree(); if (gGameStateNext != RESTART) GameStateUnload(); gGameStatePrev = gGameStateCurr; gGameStateCurr = gGameStateNext; } }