bool C4ApplicationGameTimer::Execute(int iTimeout, pollfd *) { // Check timer and reset if (!CheckAndReset()) return true; C4TimeMilliseconds tNow = C4TimeMilliseconds::Now(); // Execute if (tNow >= tLastGameTick + iExtraGameTickDelay || Game.GameGo) { if (iGameTickDelay) tLastGameTick += iGameTickDelay; else tLastGameTick = tNow; // Compensate if things get too slow if (tNow > tLastGameTick + iGameTickDelay) tLastGameTick += (tNow - tLastGameTick) / 2; Application.GameTick(); } // Draw if (!Game.DoSkipFrame) { C4TimeMilliseconds tPreGfxTime = C4TimeMilliseconds::Now(); Application.Draw(); // Automatic frame skip if graphics are slowing down the game (skip max. every 2nd frame) Game.DoSkipFrame = Game.Parameters.AutoFrameSkip && (tPreGfxTime + iGameTickDelay < C4TimeMilliseconds::Now()); } else { Game.DoSkipFrame=false; } return true; }
bool C4InteractiveThreadNotifyProc::Execute(int, pollfd*) { if (CheckAndReset()) pNotify->ProcessEvents(); return true; }