From eecbccbfb4a7d2d32d7296f9850f9c715af28476 Mon Sep 17 00:00:00 2001 From: Per Inge Mathisen Date: Mon, 31 Dec 2007 18:37:20 +0000 Subject: [PATCH] Encapsulate time adjustment of value increments in the code and try to document the time code better. git-svn-id: svn+ssh://svn.gna.org/svn/warzone/trunk@3282 4a71c877-e1ca-e34f-864e-861f7616d084 --- lib/gamelib/gtime.c | 5 +++++ lib/gamelib/gtime.h | 33 ++++++++++++++++++++++++++++-- src/action.c | 29 ++++++++++---------------- src/advvis.c | 4 +--- src/atmos.c | 10 +++------ src/design.c | 4 ++-- src/display3d.c | 16 ++++++--------- src/droid.c | 2 -- src/effects.c | 50 +++++++++++++++++++-------------------------- src/intdisplay.c | 8 ++++---- src/keybind.c | 29 ++++++++++---------------- src/lighting.c | 7 ++----- src/move.c | 6 +++--- src/multiplay.c | 4 +--- src/visibility.c | 4 ++-- src/warcam.c | 47 ++++++++++++------------------------------ 16 files changed, 116 insertions(+), 142 deletions(-) diff --git a/lib/gamelib/gtime.c b/lib/gamelib/gtime.c index e34b89500..053003b6f 100644 --- a/lib/gamelib/gtime.c +++ b/lib/gamelib/gtime.c @@ -34,6 +34,7 @@ /* See header file for documentation */ UDWORD gameTime, frameTime, gameTime2, frameTime2; +float frameTimeFraction, frameTimeFraction2; /** The current clock modifier. Set to speed up the game. */ static float modifier; @@ -140,6 +141,10 @@ void gameTimeUpdate(void) // Store the game time gameTime2 = newTime; + + // Pre-calculate fraction used in timeAdjustedIncrement + frameTimeFraction = (float)frameTime / (float)GAME_TICKS_PER_SEC; + frameTimeFraction2 = (float)frameTime / (float)GAME_TICKS_PER_SEC; } // reset the game time modifiers diff --git a/lib/gamelib/gtime.h b/lib/gamelib/gtime.h index ac3168000..1962bf2ff 100644 --- a/lib/gamelib/gtime.h +++ b/lib/gamelib/gtime.h @@ -34,13 +34,23 @@ /** The current time in the game world. */ extern UDWORD gameTime; -/** The time for the last frame. */ +extern float frameTimeFraction; /**< Private performance calculation. Do not use. */ +extern float frameTimeFraction2; /**< Private performance calculation. Do not use. */ + +/** + * The time for the last frame. This tells you the amount of real world time + * that is spent by the current slice, or in other words, the time difference + * between the current frame and the previous frame. + */ extern UDWORD frameTime; /** The current time in the game world - never stops. */ extern UDWORD gameTime2; -/** The time for the last frame - never stops. */ +/** + * The time for the last frame - never stops. + * @see frameTime + */ extern UDWORD frameTime2; /** Initialise the game clock. */ @@ -96,4 +106,23 @@ extern UDWORD getStaticTimeValueRange(UDWORD tickFrequency, UDWORD requiredRange /** Break down given time into its constituent components. */ extern void getTimeComponents(UDWORD time, UDWORD *hours, UDWORD *minutes, UDWORD *seconds); +/** + * Return an incremental value adjusted for the time we have available this frame. Basically + * multiplies the passed value by delta time. + * @param value Amount to change something in a second. + * @param pauseTime If true, adjust also for pause of game time. Generally use true in-game, false for GUI. + * @return Amount to change this frame. + */ +static inline float timeAdjustedIncrement(float value, BOOL pauseTime) +{ + if (pauseTime) + { + return (value * frameTimeFraction); + } + else + { + return (value * frameTimeFraction2); + } +} + #endif diff --git a/src/action.c b/src/action.c index 9067075e4..cb0be32ee 100644 --- a/src/action.c +++ b/src/action.c @@ -56,22 +56,23 @@ #define VTOL_TURRET_RLIMIT 315 #define VTOL_TURRET_LLIMIT 45 -// time to pause before a droid blows up +/** Time to pause before a droid blows up. */ #define ACTION_DESTRUCT_TIME 2000 -//#define PITCH_UPPER_LIMIT 60 -//#define PITCH_LOWER_LIMIT -15 +/** Droids heavier than this rotate and pitch more slowly. */ +#define HEAVY_WEAPON_WEIGHT 50000 -#define ACTION_TURRET_ROTATION_RATE 180 +#define ACTION_TURRET_ROTATION_RATE 45 #define REPAIR_PITCH_LOWER 30 #define REPAIR_PITCH_UPPER -15 -//how long to follow a damaged droid around before giving up if don't get near +/** How long to follow a damaged droid around before giving up if don't get near. */ #define KEEP_TRYING_REPAIR 10000 -//how far away the repair droid can be from the damaged droid to function + +/** How far away the repair droid can be from the damaged droid to function. */ #define REPAIR_RANGE (TILE_UNITS * TILE_UNITS * 4) -//how many tiles to pull back +/* How many tiles to pull back. */ #define PULL_BACK_DIST 10 // data required for any action @@ -242,7 +243,6 @@ BOOL actionInsideMinRange(DROID *psDroid, BASE_OBJECT *psObj, int weapon_slot) void actionAlignTurret(BASE_OBJECT *psObj, int weapon_slot) { UDWORD rotation; - //Watermelon:multiple temp tRot, tPitch UWORD nearest = 0; UWORD tRot; UWORD tPitch; @@ -251,8 +251,7 @@ void actionAlignTurret(BASE_OBJECT *psObj, int weapon_slot) tRot = 0; //get the maximum rotation this frame - //rotation = (psDroid->turretRotRate * frameTime) / (4 * GAME_TICKS_PER_SEC); - rotation = (ACTION_TURRET_ROTATION_RATE * frameTime) / (4 * GAME_TICKS_PER_SEC); + rotation = timeAdjustedIncrement(ACTION_TURRET_ROTATION_RATE, TRUE); if (rotation == 0) { rotation = 1; @@ -351,8 +350,6 @@ void actionAlignTurret(BASE_OBJECT *psObj, int weapon_slot) } } -#define HEAVY_WEAPON_WEIGHT 50000 - /* returns true if on target */ BOOL actionTargetTurret(BASE_OBJECT *psAttacker, BASE_OBJECT *psTarget, UWORD *pRotation, UWORD *pPitch, WEAPON_STATS *psWeapStats, BOOL bInvert, int weapon_slot) @@ -417,7 +414,7 @@ BOOL actionTargetTurret(BASE_OBJECT *psAttacker, BASE_OBJECT *psTarget, UWORD *p } //get the maximum rotation this frame - rotRate = (SWORD)(rotRate * frameTime / GAME_TICKS_PER_SEC); + rotRate = timeAdjustedIncrement(rotRate, TRUE); if (rotRate > 180)//crop to 180 degrees, no point in turning more than all the way round { rotRate = 180; @@ -426,7 +423,7 @@ BOOL actionTargetTurret(BASE_OBJECT *psAttacker, BASE_OBJECT *psTarget, UWORD *p { rotRate = 1; } - pitchRate = (SWORD)(pitchRate * frameTime / GAME_TICKS_PER_SEC); + pitchRate = timeAdjustedIncrement(pitchRate, TRUE); if (pitchRate > 180)//crop to 180 degrees, no point in turning more than all the way round { pitchRate = 180; @@ -2335,10 +2332,6 @@ void actionUpdateDroid(DROID *psDroid) { // Got to destination - start repair //rotate turret to point at droid being repaired - /*if (actionTargetTurret((BASE_OBJECT*)psDroid, - psDroid->psActionTarget, &(psDroid->turretRotation), - &(psDroid->turretPitch), psDroid->turretRotRate, - (SWORD)(psDroid->turretRotRate/2), FALSE, FALSE))*/ //Watermelon:use 0 for repair droid if (actionTargetTurret((BASE_OBJECT*)psDroid, psDroid->psActionTarget[0], &(psDroid->turretRotation[0]), diff --git a/src/advvis.c b/src/advvis.c index e5b908974..bf490fc52 100644 --- a/src/advvis.c +++ b/src/advvis.c @@ -83,7 +83,6 @@ SDWORD lowerX,upperX,lowerY,upperY; // ------------------------------------------------------------------------------------ static void processAVTile(UDWORD x, UDWORD y) { - float time; MAPTILE *psTile; UDWORD newLevel; @@ -93,8 +92,7 @@ static void processAVTile(UDWORD x, UDWORD y) return; } - time = (float)frameTime / (float)GAME_TICKS_PER_SEC; - newLevel = (int)(psTile->level + (time * FADE_IN_TIME)); + newLevel = psTile->level + timeAdjustedIncrement(FADE_IN_TIME, TRUE); if (newLevel >= psTile->illumination) { psTile->level = psTile->illumination; diff --git a/src/atmos.c b/src/atmos.c index 4febcdfd3..e679fc96c 100644 --- a/src/atmos.c +++ b/src/atmos.c @@ -67,7 +67,6 @@ APS_INACTIVE, } AP_STATUS; static ATPART asAtmosParts[MAX_ATMOS_PARTICLES]; -static float fraction; static UDWORD freeParticle; static UDWORD weather; @@ -102,9 +101,6 @@ void atmosUpdateSystem( void ) UDWORD numberToAdd; Vector3i pos; - /* Establish how long the last game frame took */ - fraction = (float)frameTime / GAME_TICKS_PER_SEC; - // if(weather==WT_NONE) // { // return; @@ -170,9 +166,9 @@ void processParticle( ATPART *psPart ) if(!gamePaused()) { /* Move the particle - frame rate controlled */ - psPart->position.x += (psPart->velocity.x * fraction); - psPart->position.y += (psPart->velocity.y * fraction); - psPart->position.z += (psPart->velocity.z * fraction); + psPart->position.x += timeAdjustedIncrement(psPart->velocity.x, TRUE); + psPart->position.y += timeAdjustedIncrement(psPart->velocity.y, TRUE); + psPart->position.z += timeAdjustedIncrement(psPart->velocity.z, TRUE); /* Wrap it around if it's gone off grid... */ testParticleWrap(psPart); diff --git a/src/design.c b/src/design.c index 9bccb6b8e..3bd1492bf 100644 --- a/src/design.c +++ b/src/design.c @@ -4528,7 +4528,7 @@ static void intDisplayStatForm(WIDGET *psWidget, UDWORD xOffset, UDWORD yOffset, /* inc rotation if highlighted */ if ( Form->state & WCLICK_HILITE ) { - iRY += (BUTTONOBJ_ROTSPEED*frameTime2) / GAME_TICKS_PER_SEC; + iRY += timeAdjustedIncrement(BUTTONOBJ_ROTSPEED, FALSE); iRY %= 360; } @@ -4574,7 +4574,7 @@ static void intDisplayViewForm(WIDGET *psWidget, UDWORD xOffset, UDWORD yOffset, Rotation.z = 0; /* inc rotation */ - iRY += (BUTTONOBJ_ROTSPEED*frameTime2) / GAME_TICKS_PER_SEC; + iRY += timeAdjustedIncrement(BUTTONOBJ_ROTSPEED, FALSE); iRY %= 360; //fixed depth scale the pie diff --git a/src/display3d.c b/src/display3d.c index 53ef33239..94120bfe8 100644 --- a/src/display3d.c +++ b/src/display3d.c @@ -567,7 +567,7 @@ static void drawTiles(iView *camera, iView *player) // Animate the water texture, just cycles the V coordinate through half the tiles height. if(!gamePaused()) { - waterRealValue += (WAVE_SPEED * frameTime2) / GAME_TICKS_PER_SEC; + waterRealValue += timeAdjustedIncrement(WAVE_SPEED, FALSE); if (waterRealValue >= (1.0f / TILES_IN_PAGE_ROW) / 2) { waterRealValue = 0.0f; @@ -3595,7 +3595,7 @@ static void renderSurroundings(void) if(!gamePaused()) { - wind += 0.5f * frameTime2/GAME_TICKS_PER_SEC; + wind += timeAdjustedIncrement(0.5f, FALSE); if(wind >= 360.0f) { wind = 0.0f; @@ -3996,18 +3996,14 @@ UDWORD getSuggestedPitch( void ) static void trackHeight( float desiredHeight ) { static float heightSpeed = 0.0f; - /* What fraction of a second did last game loop take */ - float fraction = frameTime2 / (float)GAME_TICKS_PER_SEC; - /* How far are we from desired height? */ - float separation = desiredHeight - player.p.y; - /* Work out accelertion... */ - float acceleration = ACCEL_CONSTANT * separation - VELOCITY_CONSTANT * heightSpeed; + float separation = desiredHeight - player.p.y; // How far are we from desired height? + float acceleration = ACCEL_CONSTANT * separation - VELOCITY_CONSTANT * heightSpeed; // Work out accelertion /* ...and now speed */ - heightSpeed += acceleration * fraction; + heightSpeed += timeAdjustedIncrement(acceleration, FALSE); /* Adjust the height accordingly */ - player.p.y += heightSpeed * fraction; + player.p.y += timeAdjustedIncrement(heightSpeed, FALSE); } diff --git a/src/droid.c b/src/droid.c index b69d69b8d..033f48166 100644 --- a/src/droid.c +++ b/src/droid.c @@ -3345,7 +3345,6 @@ DROID* buildDroid(DROID_TEMPLATE *pTemplate, UDWORD x, UDWORD y, UDWORD player, psDroid->direction = 0; psDroid->pitch = 0; psDroid->roll = 0; - //psDroid->turretRotRate = 360; //Watermelon:initialize all weapon turrent rotation pitch info for(i = 0;i < DROID_MAXWEAPS; i++) { @@ -3485,7 +3484,6 @@ void droidSetBits(DROID_TEMPLATE *pTemplate,DROID *psDroid) psDroid->direction = 0; psDroid->pitch = 0; psDroid->roll = 0; - //psDroid->turretRotRate = 360; psDroid->numWeaps = pTemplate->numWeaps; for (inc = 0;inc < psDroid->numWeaps;inc++) { diff --git a/src/effects.c b/src/effects.c index bc9c99b81..18d064696 100644 --- a/src/effects.c +++ b/src/effects.c @@ -167,9 +167,6 @@ static BOOL validatePie( EFFECT_GROUP group, iIMDShape *pie ); static void effectStructureUpdates(void); static void effectDroidUpdates(void); -/* The fraction of a second that the last game frame took */ -static float fraction; - static void positionEffect(EFFECT *psEffect) { Vector3i dv; @@ -570,7 +567,6 @@ void processEffects(void) unsigned int i; /* Establish how long the last game frame took */ - fraction = (float)frameTime / (float)GAME_TICKS_PER_SEC; missCount = 0; /* Reset counter */ @@ -684,9 +680,9 @@ static void updateFirework(EFFECT *psEffect) UDWORD drop; /* Move it */ - psEffect->position.x += (psEffect->velocity.x * fraction); - psEffect->position.y += (psEffect->velocity.y * fraction); - psEffect->position.z += (psEffect->velocity.z * fraction); + psEffect->position.x += timeAdjustedIncrement(psEffect->velocity.x, TRUE); + psEffect->position.y += timeAdjustedIncrement(psEffect->velocity.y, TRUE); + psEffect->position.z += timeAdjustedIncrement(psEffect->velocity.z, TRUE); if(psEffect->type == FIREWORK_TYPE_LAUNCHER) { @@ -948,7 +944,7 @@ static void updateExplosion(EFFECT *psEffect) if(psEffect->type == EXPLOSION_TYPE_SHOCKWAVE) { - psEffect->size += fraction * SHOCKWAVE_SPEED; + psEffect->size += timeAdjustedIncrement(SHOCKWAVE_SPEED, TRUE); scaling = (float)psEffect->size / (float)MAX_SHOCKWAVE_SIZE; psEffect->frameNumber = scaling * EffectGetNumFrames(psEffect); @@ -996,7 +992,7 @@ static void updateExplosion(EFFECT *psEffect) /* Tesla explosions are the only ones that rise, or indeed move */ if(psEffect->type == EXPLOSION_TYPE_TESLA) { - psEffect->position.y += psEffect->velocity.y * fraction; + psEffect->position.y += timeAdjustedIncrement(psEffect->velocity.y, TRUE); } } @@ -1019,11 +1015,9 @@ static void updateBlood(EFFECT *psEffect) } } /* Move it about in the world */ - - psEffect->position.x += (psEffect->velocity.x * fraction); - psEffect->position.y += (psEffect->velocity.y * fraction); - psEffect->position.z += (psEffect->velocity.z * fraction); - + psEffect->position.x += timeAdjustedIncrement(psEffect->velocity.x, TRUE); + psEffect->position.y += timeAdjustedIncrement(psEffect->velocity.y, TRUE); + psEffect->position.z += timeAdjustedIncrement(psEffect->velocity.z, TRUE); } // ---------------------------------------------------------------------------------------- @@ -1065,11 +1059,9 @@ static void updatePolySmoke(EFFECT *psEffect) } /* Update position */ - - psEffect->position.x += (psEffect->velocity.x * fraction); - psEffect->position.y += (psEffect->velocity.y * fraction); - psEffect->position.z += (psEffect->velocity.z * fraction); - + psEffect->position.x += timeAdjustedIncrement(psEffect->velocity.x, TRUE); + psEffect->position.y += timeAdjustedIncrement(psEffect->velocity.y, TRUE); + psEffect->position.z += timeAdjustedIncrement(psEffect->velocity.z, TRUE); /* If it doesn't get killed by frame number, then by age */ if(TEST_CYCLIC(psEffect)) @@ -1113,9 +1105,9 @@ static void updateGraviton(EFFECT *psEffect) } /* Move it about in the world */ - psEffect->position.x += (psEffect->velocity.x * fraction); - psEffect->position.y += (psEffect->velocity.y * fraction); - psEffect->position.z += (psEffect->velocity.z * fraction); + psEffect->position.x += timeAdjustedIncrement(psEffect->velocity.x, TRUE); + psEffect->position.y += timeAdjustedIncrement(psEffect->velocity.y, TRUE); + psEffect->position.z += timeAdjustedIncrement(psEffect->velocity.z, TRUE); /* If it's bounced/drifted off the map then kill it */ if (map_coord(psEffect->position.x) >= mapWidth @@ -1173,12 +1165,12 @@ static void updateGraviton(EFFECT *psEffect) } /* Spin it round a bit */ - psEffect->rotation.x += (float)psEffect->spin.x * fraction; - psEffect->rotation.y += (float)psEffect->spin.y * fraction; - psEffect->rotation.z += (float)psEffect->spin.z * fraction; + psEffect->rotation.x += timeAdjustedIncrement(psEffect->spin.x, TRUE); + psEffect->rotation.y += timeAdjustedIncrement(psEffect->spin.y, TRUE); + psEffect->rotation.z += timeAdjustedIncrement(psEffect->spin.z, TRUE); /* Update velocity (and retarding of descent) according to present frame rate */ - accel = (GRAVITON_GRAVITY*fraction); + accel = timeAdjustedIncrement(GRAVITON_GRAVITY, TRUE); psEffect->velocity.y += accel; /* If it's bounced/drifted off the map then kill it */ @@ -1443,9 +1435,9 @@ static void updateConstruction(EFFECT *psEffect) /* Move it about in the world */ - psEffect->position.x += (psEffect->velocity.x * fraction); - psEffect->position.y += (psEffect->velocity.y * fraction); - psEffect->position.z += (psEffect->velocity.z * fraction); + psEffect->position.x += timeAdjustedIncrement(psEffect->velocity.x, TRUE); + psEffect->position.y += timeAdjustedIncrement(psEffect->velocity.y, TRUE); + psEffect->position.z += timeAdjustedIncrement(psEffect->velocity.z, TRUE); /* If it doesn't get killed by frame number, then by height */ diff --git a/src/intdisplay.c b/src/intdisplay.c index 3be73e196..79b4ea36b 100644 --- a/src/intdisplay.c +++ b/src/intdisplay.c @@ -778,7 +778,7 @@ void intDisplayStatusButton(WIDGET *psWidget, UDWORD xOffset, UDWORD yOffset, PI Hilight = Form->state & WCLICK_HILITE; if(Hilight) { - Buffer->ImdRotation += (UWORD) ((BUTTONOBJ_ROTSPEED*frameTime2) / GAME_TICKS_PER_SEC); + Buffer->ImdRotation += timeAdjustedIncrement(BUTTONOBJ_ROTSPEED, FALSE); } Hilight = formIsHilite(Form); // Hilited or flashing. @@ -985,7 +985,7 @@ void intDisplayObjectButton(WIDGET *psWidget, UDWORD xOffset, UDWORD yOffset, PI Hilight = Form->state & WCLICK_HILITE; if(Hilight) { - Buffer->ImdRotation += (UWORD) ((BUTTONOBJ_ROTSPEED*frameTime2) / GAME_TICKS_PER_SEC); + Buffer->ImdRotation += timeAdjustedIncrement(BUTTONOBJ_ROTSPEED, FALSE); } Hilight = formIsHilite(Form); // Hilited or flashing. @@ -1069,7 +1069,7 @@ void intDisplayStatsButton(WIDGET *psWidget, UDWORD xOffset, UDWORD yOffset, PIE Hilight = Form->state & WCLICK_HILITE; if(Hilight) { - Buffer->ImdRotation += (UWORD) ((BUTTONOBJ_ROTSPEED*frameTime2) / GAME_TICKS_PER_SEC); + Buffer->ImdRotation += timeAdjustedIncrement(BUTTONOBJ_ROTSPEED, FALSE); } Hilight = formIsHilite(Form); @@ -3165,7 +3165,7 @@ void intDisplayTransportButton(WIDGET *psWidget, UDWORD xOffset, if(Hilight) { - Buffer->ImdRotation += (UWORD) ((BUTTONOBJ_ROTSPEED*frameTime2) / GAME_TICKS_PER_SEC); + Buffer->ImdRotation += timeAdjustedIncrement(BUTTONOBJ_ROTSPEED, FALSE); } Hilight = formIsHilite(Form); diff --git a/src/keybind.c b/src/keybind.c index 53ed0b7b2..5e0970296 100644 --- a/src/keybind.c +++ b/src/keybind.c @@ -631,8 +631,8 @@ void kf_SystemClose( void ) /* Zooms out from display */ void kf_ZoomOut( void ) { - float fraction = (float)frameTime2 / (float)GAME_TICKS_PER_SEC; - float zoomInterval = fraction * (float)MAP_ZOOM_RATE; + float zoomInterval = timeAdjustedIncrement(MAP_ZOOM_RATE, FALSE); + distance += zoomInterval; if(distance > MAXDISTANCE) { @@ -675,10 +675,9 @@ void kf_RadarZoomOut( void ) /* Zooms in the map */ void kf_ZoomIn( void ) { - float fraction = (float)frameTime2 / (float)GAME_TICKS_PER_SEC; - float zoomInterval = fraction * (float)MAP_ZOOM_RATE; - distance -= zoomInterval; + float zoomInterval = timeAdjustedIncrement(MAP_ZOOM_RATE, FALSE); + distance -= zoomInterval; if (distance < MINDISTANCE) { distance = MINDISTANCE; @@ -735,8 +734,8 @@ void kf_ExpandScreen( void ) /* Spins the world round left */ void kf_RotateLeft( void ) { - float fraction = (float)frameTime2 / (float)GAME_TICKS_PER_SEC; - float rotAmount = fraction * (float)MAP_SPIN_RATE; + float rotAmount = timeAdjustedIncrement(MAP_SPIN_RATE, FALSE); + player.r.y += rotAmount; } @@ -744,8 +743,8 @@ void kf_RotateLeft( void ) /* Spins the world right */ void kf_RotateRight( void ) { - float fraction = (float)frameTime2 / (float)GAME_TICKS_PER_SEC; - float rotAmount = fraction * (float)MAP_SPIN_RATE; + float rotAmount = timeAdjustedIncrement(MAP_SPIN_RATE, FALSE); + player.r.y -= rotAmount; if (player.r.y < 0) { @@ -762,8 +761,7 @@ void kf_PitchBack( void ) //SDWORD angConcern; //#endif - float fraction = (float)frameTime2 / (float)GAME_TICKS_PER_SEC; - float pitchAmount = fraction * (float)MAP_PITCH_RATE; + float pitchAmount = timeAdjustedIncrement(MAP_PITCH_RATE, FALSE); //#ifdef ALEXM // pitch = getSuggestedPitch(); @@ -795,18 +793,13 @@ void kf_PitchBack( void ) /* Pitches camera foward */ void kf_PitchForward( void ) { - float fraction = (float)frameTime2 / (float)GAME_TICKS_PER_SEC; - float pitchAmount = fraction * (float)MAP_PITCH_RATE; + float pitchAmount = timeAdjustedIncrement(MAP_PITCH_RATE, FALSE); + player.r.x -= pitchAmount; -//#ifdef ALEXM -// if(getDebugMappingStatus() == FALSE) -//#endif -// { if (player.r.x < DEG(360 + MIN_PLAYER_X_ANGLE)) { player.r.x = DEG(360 + MIN_PLAYER_X_ANGLE); } -// } setDesiredPitch(player.r.x / DEG_1); } diff --git a/src/lighting.c b/src/lighting.c index 2d048cb7c..9b8a213b0 100644 --- a/src/lighting.c +++ b/src/lighting.c @@ -479,10 +479,7 @@ UDWORD lightVal; // sum of light vals UDWORD presVal; UDWORD tileX,tileY; UDWORD retVal; -float fraction,adjust; - - /* Establish how long the last game frame took */ - fraction = (float)frameTime / (float)GAME_TICKS_PER_SEC; + float adjust; /* See if the droid's at the edge of the map */ tileX = psDroid->pos.x/TILE_UNITS; @@ -508,7 +505,7 @@ float fraction,adjust; if(lightVal>255) lightVal = 255; presVal = psDroid->illumination; adjust = (float)lightVal - (float)presVal; - adjust *= (fraction*DROID_SEEK_LIGHT_SPEED) ; + adjust *= timeAdjustedIncrement(DROID_SEEK_LIGHT_SPEED, TRUE); retVal = presVal + adjust; if(retVal > 255) retVal = 255; psDroid->illumination = (UBYTE)retVal; diff --git a/src/move.c b/src/move.c index 70b1182f4..7ebdbf086 100644 --- a/src/move.c +++ b/src/move.c @@ -810,7 +810,7 @@ void updateDroidOrientation(DROID *psDroid) pitch = atan(pitch); newPitch = (SDWORD)((pitch * 180) / M_PI); //limit the rate the front comes down to simulate momentum - pitchLimit = PITCH_LIMIT * frameTime/GAME_TICKS_PER_SEC; + pitchLimit = timeAdjustedIncrement(PITCH_LIMIT, TRUE); dPitch = newPitch - psDroid->pitch; if (dPitch < 0) { @@ -2778,7 +2778,7 @@ static void moveUpdateVtolModel(DROID *psDroid, SDWORD speed, SDWORD direction) /* do vertical movement */ - fDZ = (float)(psDroid->sMove.iVertSpeed * (SDWORD)frameTime) / GAME_TICKS_PER_SEC; + fDZ = timeAdjustedIncrement(psDroid->sMove.iVertSpeed, TRUE); fDroidZ = psDroid->sMove.fz; fMapZ = (float) map_Height(psDroid->pos.x, psDroid->pos.y); if ( fDroidZ+fDZ < 0 ) @@ -2931,7 +2931,7 @@ moveUpdateCyborgModel( DROID *psDroid, SDWORD moveSpeed, SDWORD moveDir, UBYTE o /* do vertical movement */ if ( psPropStats->propulsionType == JUMP ) { - iDz = psDroid->sMove.iVertSpeed * (SDWORD)frameTime / GAME_TICKS_PER_SEC; + iDz = timeAdjustedIncrement(psDroid->sMove.iVertSpeed, TRUE); iDroidZ = (SDWORD) psDroid->pos.z; if ( iDroidZ+iDz < (SDWORD) iMapZ ) diff --git a/src/multiplay.c b/src/multiplay.c index cb50eb14f..b90fbb025 100644 --- a/src/multiplay.c +++ b/src/multiplay.c @@ -150,7 +150,6 @@ BOOL multiplayerWinSequence(BOOL firstCall) static Vector3i pos; Vector3i pos2; static UDWORD last=0; - float fraction; float rotAmount; STRUCTURE *psStruct; @@ -178,8 +177,7 @@ BOOL multiplayerWinSequence(BOOL firstCall) // rotate world if(!getWarCamStatus()) { - fraction = (float)frameTime / (float)GAME_TICKS_PER_SEC; - rotAmount = fraction * MAP_SPIN_RATE / 12; + rotAmount = timeAdjustedIncrement(MAP_SPIN_RATE / 12, TRUE); player.r.y += rotAmount; } diff --git a/src/visibility.c b/src/visibility.c index c6184f8e3..9deb51126 100644 --- a/src/visibility.c +++ b/src/visibility.c @@ -91,10 +91,10 @@ BOOL visInitialise(void) // update the visibility change levels void visUpdateLevel(void) { - visLevelIncAcc += (float)frameTime * (VIS_LEVEL_INC / GAME_TICKS_PER_SEC); + visLevelIncAcc += timeAdjustedIncrement(VIS_LEVEL_INC, TRUE); visLevelInc = visLevelIncAcc; visLevelIncAcc -= visLevelInc; - visLevelDecAcc += (float)frameTime * (VIS_LEVEL_DEC / GAME_TICKS_PER_SEC); + visLevelDecAcc += timeAdjustedIncrement(VIS_LEVEL_DEC, TRUE); visLevelDec = visLevelDecAcc; visLevelDecAcc -= visLevelDec; } diff --git a/src/warcam.c b/src/warcam.c index 06b85dd6d..fb72046af 100644 --- a/src/warcam.c +++ b/src/warcam.c @@ -93,10 +93,6 @@ static float radarX,radarY; /* Where we were up to (pos and rot) last update - allows us to see whether we are sufficently near our target to disable further tracking */ static Vector3i oldPosition, oldRotation; - -/* The fraction of a second that the last game frame took */ -static float fraction; - static BOOL OldViewValid; //----------------------------------------------------------------------------------- @@ -341,9 +337,6 @@ BOOL Status = TRUE; return(TRUE); } - /* Calculate fraction of a second for last game frame */ - fraction = (float)frameTime2 / (float)GAME_TICKS_PER_SEC; - /* Ensure that the camera only ever flips state within this routine! */ switch(trackingCamera.status) { @@ -873,26 +866,19 @@ SDWORD angle; static void updateCameraVelocity(UBYTE update) { - /* Get the time fraction of a second - the next two lines are present in 4 - of the next six functions. All 4 of these functions are called every frame, so - it may be an idea to calculate these higher up and store them in a static but - I've left them in for clarity for now */ - - float fraction = (float)frameTime2 / (float)GAME_TICKS_PER_SEC; - if(update & X_UPDATE) { - trackingCamera.velocity.x += (trackingCamera.acceleration.x * fraction); + trackingCamera.velocity.x += timeAdjustedIncrement(trackingCamera.acceleration.x, FALSE); } if(update & Y_UPDATE) { - trackingCamera.velocity.y += (trackingCamera.acceleration.y * fraction); + trackingCamera.velocity.y += timeAdjustedIncrement(trackingCamera.acceleration.y, FALSE); } if(update & Z_UPDATE) { - trackingCamera.velocity.z += (trackingCamera.acceleration.z * fraction); + trackingCamera.velocity.z += timeAdjustedIncrement(trackingCamera.acceleration.z, FALSE); } } @@ -901,7 +887,6 @@ static void updateCameraVelocity(UBYTE update) static void updateCameraPosition(UBYTE update) { BOOL bFlying; -float fraction; DROID *psDroid; PROPULSION_STATS *psPropStats; @@ -915,25 +900,23 @@ PROPULSION_STATS *psPropStats; bFlying = TRUE; } } - /* See above */ - fraction = (float)frameTime2 / (float)GAME_TICKS_PER_SEC; if(update & X_UPDATE) { /* Need to update position along x axis */ - trackingCamera.position.x += (trackingCamera.velocity.x * fraction); + trackingCamera.position.x += timeAdjustedIncrement(trackingCamera.velocity.x, FALSE); } if(update & Y_UPDATE) { - /* Need to update position along y axis */ - trackingCamera.position.y +=(trackingCamera.velocity.y * fraction); + /* Need to update position along y axis */ + trackingCamera.position.y += timeAdjustedIncrement(trackingCamera.velocity.y, FALSE); } if(update & Z_UPDATE) { /* Need to update position along z axis */ - trackingCamera.position.z += (trackingCamera.velocity.z * fraction); + trackingCamera.position.z += timeAdjustedIncrement(trackingCamera.velocity.z, FALSE); } } @@ -1097,19 +1080,17 @@ static void updateCameraRotationAcceleration( UBYTE update ) calculated acceleration */ static void updateCameraRotationVelocity( UBYTE update ) { - float fraction = (float)frameTime2 / (float)GAME_TICKS_PER_SEC; - if(update & Y_UPDATE) { - trackingCamera.rotVel.y += ((float)trackingCamera.rotAccel.y * fraction); + trackingCamera.rotVel.y += timeAdjustedIncrement(trackingCamera.rotAccel.y, FALSE); } if(update & X_UPDATE) { - trackingCamera.rotVel.x += ((float)trackingCamera.rotAccel.x * fraction); + trackingCamera.rotVel.x += timeAdjustedIncrement(trackingCamera.rotAccel.x, FALSE); } if(update & Z_UPDATE) { - trackingCamera.rotVel.z += ((float)trackingCamera.rotAccel.z * fraction); + trackingCamera.rotVel.z += timeAdjustedIncrement(trackingCamera.rotAccel.z, FALSE); } } @@ -1118,19 +1099,17 @@ static void updateCameraRotationVelocity( UBYTE update ) /* Move the camera around by adding the velocity */ static void updateCameraRotationPosition( UBYTE update ) { - float fraction = (float)frameTime2 / (float)GAME_TICKS_PER_SEC; - if (update & Y_UPDATE) { - trackingCamera.rotation.y += (trackingCamera.rotVel.y * fraction); + trackingCamera.rotation.y += timeAdjustedIncrement(trackingCamera.rotVel.y, FALSE); } if (update & X_UPDATE) { - trackingCamera.rotation.x += (trackingCamera.rotVel.x * fraction); + trackingCamera.rotation.x += timeAdjustedIncrement(trackingCamera.rotVel.x, FALSE); } if (update & Z_UPDATE) { - trackingCamera.rotation.z += (trackingCamera.rotVel.z * fraction); + trackingCamera.rotation.z += timeAdjustedIncrement(trackingCamera.rotVel.z, FALSE); } }