From 9c6a5d3fed934c584bb864d01ccb951b93089a33 Mon Sep 17 00:00:00 2001 From: div0 Date: Sat, 5 Sep 2009 10:26:50 +0000 Subject: [PATCH] increase float accuracy for race time accumulation git-svn-id: svn://svn.icculus.org/nexuiz/trunk@7634 f962a42d-fe04-0410-a3ab-8c8b0445ebaa --- data/qcsrc/server/cl_physics.qc | 6 +++++- data/qcsrc/server/race.qc | 4 ++-- data/qcsrc/server/race.qh | 5 ++++- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/data/qcsrc/server/cl_physics.qc b/data/qcsrc/server/cl_physics.qc index 877384d25..84b03febf 100644 --- a/data/qcsrc/server/cl_physics.qc +++ b/data/qcsrc/server/cl_physics.qc @@ -549,7 +549,11 @@ void SV_PlayerPhysics() } } - self.race_movetime += frametime; + self.race_movetime_frac += frametime; + f = floor(self.race_movetime_frac); + self.race_movetime_frac -= f; + self.race_movetime_count += f; + self.race_movetime = self.race_movetime_frac + self.race_movetime_count; buttons = self.BUTTON_ATCK + 2 * self.BUTTON_JUMP + 4 * self.BUTTON_ATCK2 + 8 * self.BUTTON_ZOOM + 16 * self.BUTTON_CROUCH + 32 * self.BUTTON_HOOK + 64 * self.BUTTON_USE + 128 * (self.movement_x < 0) + 256 * (self.movement_x > 0) + 512 * (self.movement_y < 0) + 1024 * (self.movement_y > 0); diff --git a/data/qcsrc/server/race.qc b/data/qcsrc/server/race.qc index 35738b95e..c17aebf93 100644 --- a/data/qcsrc/server/race.qc +++ b/data/qcsrc/server/race.qc @@ -288,7 +288,7 @@ void race_ClearTime(entity e) { e.race_checkpoint = -1; e.race_laptime = 0; - e.race_movetime = 0; + e.race_movetime = e.race_movetime_frac = e.race_movetime_count = 0; e.race_penalty_accumulator = 0; e.race_lastpenalty = world; @@ -392,7 +392,7 @@ void checkpoint_passed() if(!self.race_checkpoint) // start line { other.race_laptime = time; - other.race_movetime = 0; + other.race_movetime = other.race_movetime_frac = other.race_movetime_count = 0; other.race_penalty_accumulator = 0; other.race_lastpenalty = world; } diff --git a/data/qcsrc/server/race.qh b/data/qcsrc/server/race.qh index a20a698a8..99f7d04f6 100644 --- a/data/qcsrc/server/race.qh +++ b/data/qcsrc/server/race.qh @@ -19,4 +19,7 @@ float race_timelimit; float race_completing; void race_ImposePenaltyTime(entity pl, float penalty, string reason); void race_StartCompleting(); -.float race_movetime; + +.float race_movetime; // for reading +.float race_movetime_frac; // fractional accumulator for higher accuracy (helper for writing) +.float race_movetime_count; // integer accumulator -- 2.39.2