// // D_DoomLoop // void D_DoomLoop (void) { while (1) { try { SV_RunTics (); // will run at least one tic } catch (CRecoverableError &error) { Printf (PRINT_HIGH, "ERROR: %s\n", error.GetMessage().c_str()); Printf (PRINT_HIGH, "sleeping for 10 seconds before map reload..."); // denis - drop clients SV_SendDisconnectSignal(); // denis - sleep to conserve server resources (in case of recurring problem) I_WaitForTic(I_GetTime() + 1000*10/TICRATE); // denis - reload with current settings G_ChangeMap (); // denis - todo - throw I_FatalError if this keeps happening } } }
void TryRunTics (void) { // get real tics static QWORD oldentertics = 0; QWORD entertic = I_WaitForTic (oldentertics); QWORD realtics = entertic - oldentertics; oldentertics = entertic; std::string cmd = I_ConsoleInput(); if (cmd.length()) { AddCommandString (cmd.c_str()); } // run the realtics tics if(!stepmode) TryStepTics(realtics); else { NetUpdate(); if(nextstep) { canceltics = 0; TryStepTics(nextstep); nextstep = 0; // debugging output extern unsigned char prndindex; if(players.size() && players[0].mo) Printf(PRINT_HIGH, "level.time %d, prndindex %d, %d %d %d\n", level.time, prndindex, players[0].mo->x, players[0].mo->y, players[0].mo->z); else Printf(PRINT_HIGH, "level.time %d, prndindex %d\n", level.time, prndindex); } } }
int I_WaitForTicSelect (int prevtic) { I_SelectTimer(); return I_WaitForTic (prevtic); }