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 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; } }
int main( int argc, char *argv[] ) #endif { #ifdef WIN32 if (IsDebuggerPresent()) { // turn on floating-point exceptions unsigned int prev; _controlfp_s(&prev, 0, /*_EM_ZERODIVIDE|*/_EM_INVALID); // enable debug heap in a debug build _CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF|_CRTDBG_CHECK_EVERY_1024_DF|_CRTDBG_CHECK_CRT_DF|_CRTDBG_LEAK_CHECK_DF ); _CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_FILE | _CRTDBG_MODE_DEBUG); _CrtSetReportFile(_CRT_WARN, _CRTDBG_FILE_STDOUT); // default to output debug DEBUGPRINT_OUTPUTDEBUG = true; } #endif // read preferences ReadPreferences("preferences.xml"); #if !defined(USE_SDL) && defined(WIN32) int argc = 1; char *argv[64] = { NULL }; int argsize = strlen(lpCmdLine) + 1; char *argdata = static_cast<char *>(_alloca(argsize)); memcpy(argdata, lpCmdLine, argsize); { for (char *ptr = strtok(argdata, " \t"); ptr != NULL; ptr = strtok(NULL, " \t")) { argv[argc++] = ptr; } } #endif // process command-line arguments for (int i = 1; i < argc; ++i) { // if the argument is a command... if (argv[i][0] == '-' || argv[i][0] == '/') { // get command hash unsigned int command = Hash(argv[i]+1); // scan for next command int count = 0; for (int j = i+1; j < argc; j++) { if (argv[j][0] == '-' || argv[j][0] == '/') { break; } ++count; } ProcessCommand(command, argv+i+1, count); i += count; } } // initialize if( !Init() ) return 1; // run game state machine while (GameStateUpdate()); // clean up Done(); // done return 0; }