int CTrigger::Delay (void) { if (!gameStates.app.bD2XLevel) return -1; if ((m_info.nType == TT_COUNTDOWN) || (m_info.nType == TT_MESSAGE) || (m_info.nType == TT_SOUND)) return -1; if ((m_info.time < 100) || (m_info.time > 900000)) return -1; return gameData.time.xGame - m_info.tOperated < MSEC2X (m_info.time); }
int CShrapnel::Update (void) { if (m_info.xTTL <= 0) return -1; //dead Move (); if (0 < (m_info.xTTL -= (fix) (MSEC2X (gameStates.app.tick40fps.nTime) / gameStates.gameplay.slowmo [0].fSpeed))) return 1; //alive Destroy (); return 0; //kill }
void HomingMissileTurnTowardsVelocity (CObject *objP, CFixVector *vNormVel) { CFixVector vNewDir; fix frameTime; frameTime = gameStates.limitFPS.bHomers ? MSEC2X (gameStates.app.tick40fps.nTime) : gameData.time.xFrame; vNewDir = *vNormVel; vNewDir *= ((fix) (frameTime * 16 / gameStates.gameplay.slowmo [0].fSpeed)); vNewDir += objP->info.position.mOrient.FVec (); CFixVector::Normalize (vNewDir); objP->info.position.mOrient = CFixMatrix::CreateF(vNewDir); }
void CalcFrameTime (void) { if (gameData.app.bGamePaused) { gameData.time.xLast = TimerGetFixedSeconds (); gameData.time.xFrame = 0; gameData.time.xRealFrame = 0; return; } fix timerValue, xLastFrameTime = gameData.time.xFrame; GetSlowTicks (); #if EXACT_FRAME_TIME static float fSlack = 0; int nFrameTime, nMinFrameTime, nDeltaTime; if (MAXFPS <= 1) nDeltaTime = 0; else { #ifdef RELEASE if (!gameOpts->app.bExpertMode && (gameOpts->render.nMaxFPS > 1)) gameOpts->render.nMaxFPS = MAX_FRAMERATE; #endif if (!gameData.time.tLast) nDeltaTime = 0; else { nFrameTime = gameStates.app.nSDLTicks - gameData.time.tLast; nMinFrameTime = 1000 / MAXFPS; nDeltaTime = nMinFrameTime - nFrameTime; fSlack += 1000.0f / MAXFPS - nMinFrameTime; if (fSlack >= 1) { nDeltaTime += int (fSlack); fSlack -= int (fSlack); } if (0 < nDeltaTime) G3_SLEEP (nDeltaTime); } } timerValue = MSEC2X (gameStates.app.nSDLTicks); #else fix xMinFrameTime = ((MAXFPS > 1) ? I2X (1) / MAXFPS : 1); do { timerValue = TimerGetFixedSeconds (); gameData.time.xFrame = timerValue - gameData.time.xLast; if (MAXFPS < 2) break; G3_SLEEP (1); } while (gameData.time.xFrame < xMinFrameTime); #endif gameData.time.xFrame = timerValue - gameData.time.xLast; gameData.time.xRealFrame = gameData.time.xFrame; if (gameStates.app.cheats.bTurboMode) gameData.time.xFrame *= 2; gameData.time.xLast = timerValue; #if EXACT_FRAME_TIME gameData.time.tLast = gameStates.app.nSDLTicks; if (nDeltaTime > 0) gameData.time.tLast += nDeltaTime; #else gameData.time.tLast = SDL_GetTicks (); #endif if (gameData.time.xFrame < 0) //if bogus frametimed:\temp\dm_test. gameData.time.xFrame = xLastFrameTime; //d:\temp\dm_test.then use time from last frame #if Arcade_mode gameData.time.xFrame /= 2; #endif #if defined (TIMER_TEST) && defined (_DEBUG) gameData.time.xStops = gameData.time.xStarts = 0; #endif // Set value to determine whether homing missile can see target. // The lower frametime is, the more likely that it can see its target. if (gameStates.limitFPS.bHomers) xMinTrackableDot = MIN_TRACKABLE_DOT; else if (gameData.time.xFrame <= I2X (1)/64) xMinTrackableDot = MIN_TRACKABLE_DOT; // -- 3* (I2X (1) - MIN_TRACKABLE_DOT)/4 + MIN_TRACKABLE_DOT; else if (gameData.time.xFrame < I2X (1)/32) xMinTrackableDot = MIN_TRACKABLE_DOT + I2X (1)/64 - 2*gameData.time.xFrame; // -- FixMul (I2X (1) - MIN_TRACKABLE_DOT, I2X (1)-4*gameData.time.xFrame) + MIN_TRACKABLE_DOT; else if (gameData.time.xFrame < I2X (1)/4) xMinTrackableDot = MIN_TRACKABLE_DOT + I2X (1)/64 - I2X (1)/16 - gameData.time.xFrame; // -- FixMul (I2X (1) - MIN_TRACKABLE_DOT, I2X (1)-4*gameData.time.xFrame) + MIN_TRACKABLE_DOT; else xMinTrackableDot = MIN_TRACKABLE_DOT + I2X (1)/64 - I2X (1)/8; }