From bdab3c00ff17ede39118e9cced732e91f60004e7 Mon Sep 17 00:00:00 2001 From: div0 Date: Fri, 13 Mar 2009 21:23:18 +0000 Subject: [PATCH] fight float inaccuracy in the animation system git-svn-id: svn://svn.icculus.org/nexuiz/trunk@6141 f962a42d-fe04-0410-a3ab-8c8b0445ebaa --- data/qcsrc/server/cl_client.qc | 9 ++++++--- data/qcsrc/server/g_subs.qc | 6 +++--- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/data/qcsrc/server/cl_client.qc b/data/qcsrc/server/cl_client.qc index 4e2825a23..8fd24ebc3 100644 --- a/data/qcsrc/server/cl_client.qc +++ b/data/qcsrc/server/cl_client.qc @@ -2186,7 +2186,8 @@ void PlayerPreThink (void) if (self.deadflag != DEAD_NO) { float button_pressed, force_respawn; - player_anim(); + if(frametime) + player_anim(); button_pressed = (self.BUTTON_ATCK || self.BUTTON_JUMP || self.BUTTON_ATCK2 || self.BUTTON_HOOK || self.BUTTON_USE); force_respawn = (g_lms || cvar("g_forced_respawn")); if (self.deadflag == DEAD_DYING) @@ -2305,11 +2306,13 @@ void PlayerPreThink (void) GrapplingHookFrame(); - W_WeaponFrame(); + if(frametime) + W_WeaponFrame(); player_powerups(); player_regen(); - player_anim(); + if(frametime) + player_anim(); if (g_minstagib) minstagib_ammocheck(); diff --git a/data/qcsrc/server/g_subs.qc b/data/qcsrc/server/g_subs.qc index 4d8d350be..42f066ff1 100644 --- a/data/qcsrc/server/g_subs.qc +++ b/data/qcsrc/server/g_subs.qc @@ -22,8 +22,8 @@ void setanim(entity e, vector anim, float looping, float override, float restart e.animstate_startframe = anim_x; e.animstate_numframes = anim_y; e.animstate_framerate = anim_z; - e.animstate_starttime = time; - e.animstate_endtime = time + e.animstate_numframes / e.animstate_framerate; + e.animstate_starttime = time - frametime * 0.1; // shift it a bit into the past to prevent float inaccuracy hiccups + e.animstate_endtime = e.animstate_starttime + e.animstate_numframes / e.animstate_framerate; e.animstate_looping = looping; e.animstate_override = override; e.frame = e.animstate_startframe; @@ -36,7 +36,7 @@ void updateanim(entity e) if (e.animstate_looping) { e.animstate_starttime = e.animstate_endtime; - e.animstate_endtime = e.animstate_endtime + e.animstate_numframes / e.animstate_framerate; + e.animstate_endtime = e.animstate_starttime + e.animstate_numframes / e.animstate_framerate; } e.animstate_override = FALSE; } -- 2.39.2