more q3bsp work (and no it still doesn't work right)
[xonotic/darkplaces.git] / mathlib.c
index a55ab9d..3fe396b 100644 (file)
--- a/mathlib.c
+++ b/mathlib.c
@@ -112,6 +112,7 @@ float m_bytenormals[NUMVERTEXNORMALS][3] =
 {-0.587785, -0.425325, -0.688191}, {-0.688191, -0.587785, -0.425325},
 };
 
+#if 0
 qbyte NormalToByte(const vec3_t n)
 {
        int i, best;
@@ -151,7 +152,6 @@ float Q_RSqrt(float number)
        return y * (1.5f - (number * 0.5f * y * y));
 }
 
-
 // assumes "src" is normalized
 void PerpendicularVector( vec3_t dst, const vec3_t src )
 {
@@ -202,6 +202,7 @@ void PerpendicularVector( vec3_t dst, const vec3_t src )
                dst[2] = 0;
        }
 }
+#endif
 
 
 // LordHavoc: like AngleVectors, but taking a forward vector instead of angles, useful!
@@ -214,9 +215,7 @@ void VectorVectors(const vec3_t forward, vec3_t right, vec3_t up)
        right[2] = forward[1];
 
        d = DotProduct(forward, right);
-       right[0] -= d * forward[0];
-       right[1] -= d * forward[1];
-       right[2] -= d * forward[2];
+       VectorMA(right, -d, forward, right);
        VectorNormalizeFast(right);
        CrossProduct(right, forward, up);
 }
@@ -230,9 +229,7 @@ void VectorVectorsDouble(const double *forward, double *right, double *up)
        right[2] = forward[1];
 
        d = DotProduct(forward, right);
-       right[0] -= d * forward[0];
-       right[1] -= d * forward[1];
-       right[2] -= d * forward[2];
+       VectorMA(right, -d, forward, right);
        VectorNormalize(right);
        CrossProduct(right, forward, up);
 }
@@ -271,19 +268,9 @@ void RotatePointAroundVector( vec3_t dst, const vec3_t dir, const vec3_t point,
 /*-----------------------------------------------------------------*/
 
 
-void BoxOnPlaneSideClassify(mplane_t *p)
-{
-       p->signbits = 0;
-       if (p->normal[0] < 0) // 1
-               p->signbits |= 1;
-       if (p->normal[1] < 0) // 2
-               p->signbits |= 2;
-       if (p->normal[2] < 0) // 4
-               p->signbits |= 4;
-}
-
 void PlaneClassify(mplane_t *p)
 {
+       // for optimized plane comparisons
        if (p->normal[0] == 1)
                p->type = 0;
        else if (p->normal[1] == 1)
@@ -292,7 +279,14 @@ void PlaneClassify(mplane_t *p)
                p->type = 2;
        else
                p->type = 3;
-       BoxOnPlaneSideClassify(p);
+       // for BoxOnPlaneSide
+       p->signbits = 0;
+       if (p->normal[0] < 0) // 1
+               p->signbits |= 1;
+       if (p->normal[1] < 0) // 2
+               p->signbits |= 2;
+       if (p->normal[2] < 0) // 4
+               p->signbits |= 4;
 }
 
 int BoxOnPlaneSide (const vec3_t emins, const vec3_t emaxs, const mplane_t *p)
@@ -393,6 +387,7 @@ void AngleVectorsFLU (const vec3_t angles, vec3_t forward, vec3_t left, vec3_t u
        }
 }
 
+#if 0
 void AngleMatrix (const vec3_t angles, const vec3_t translate, vec_t matrix[][4])
 {
        double angle, sr, sp, sy, cr, cp, cy;
@@ -419,6 +414,7 @@ void AngleMatrix (const vec3_t angles, const vec3_t translate, vec_t matrix[][4]
        matrix[2][2] = cr*cp;
        matrix[2][3] = translate[2];
 }
+#endif
 
 
 // LordHavoc: renamed this to Length, and made the normal one a #define
@@ -518,3 +514,25 @@ void Matrix4x4_Print (const matrix4x4_t *in)
        , in->m[2][0], in->m[2][1], in->m[2][2], in->m[2][3]
        , in->m[3][0], in->m[3][1], in->m[3][2], in->m[3][3]);
 }
+
+int Math_atov(const char *s, vec3_t out)
+{
+       int i;
+       VectorClear(out);
+       if (*s == '\'')
+               s++;
+       for (i = 0;i < 3;i++)
+       {
+               while (*s == ' ' || *s == '\t')
+                       s++;
+               out[i] = atof (s);
+               if (out[i] == 0 && *s != '-' && *s != '+' && (*s < '0' || *s > '9'))
+                       break; // not a number
+               while (*s && *s != ' ' && *s !='\t' && *s != '\'')
+                       s++;
+               if (*s == '\'')
+                       break;
+       }
+       return i;
+}
+