added LoopingFrameNumberFromDouble function to do this operation
authorhavoc <havoc@d7cf8633-e32d-0410-b094-e92efae38249>
Mon, 23 May 2011 15:46:32 +0000 (15:46 +0000)
committerhavoc <havoc@d7cf8633-e32d-0410-b094-e92efae38249>
Mon, 23 May 2011 15:46:32 +0000 (15:46 +0000)
correctly (using divide, floor, and multiply), since doing it the lazy
way (cast to int, use modulus operator) breaks down after a certain
amount of time in the level

git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@11163 d7cf8633-e32d-0410-b094-e92efae38249

mathlib.c
mathlib.h

index d6170d2..dae0de5 100644 (file)
--- a/mathlib.c
+++ b/mathlib.c
@@ -756,3 +756,12 @@ void BoxFromPoints(vec3_t mins, vec3_t maxs, int numpoints, vec_t *point3f)
        }
 }
 
+// LordHavoc: this has to be done right or you get severe precision breakdown
+int LoopingFrameNumberFromDouble(double t, int loopframes)
+{
+       if (loopframes)
+               return (int)(t - floor(t/loopframes)*loopframes);
+       else
+               return (int)t;
+}
+
index b3a9f7e..e1c7f64 100644 (file)
--- a/mathlib.h
+++ b/mathlib.h
@@ -291,5 +291,7 @@ int Math_atov(const char *s, vec3_t out);
 
 void BoxFromPoints(vec3_t mins, vec3_t maxs, int numpoints, vec_t *point3f);
 
+int LoopingFrameNumberFromDouble(double t, int loopframes);
+
 #endif