]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - mathlib.h
redesigned csqc shared entity .Version handling, now internally uses a
[xonotic/darkplaces.git] / mathlib.h
index 2b6201dc802b4d6d7da70293ff1c2aac882e760d..76ff03cc7a3748f5f659894af5e8e06806ee1367 100644 (file)
--- a/mathlib.h
+++ b/mathlib.h
@@ -60,12 +60,15 @@ extern vec3_t vec3_origin;
 // TOCHECK: what is this function supposed to do?
 #define bit2i(n) log2i((n) << 1)
 
+// boolean XOR (why doesn't C have the ^^ operator for this purpose?)
+#define boolxor(a,b) (!(a) != !(b))
+
 // returns the smallest integer greater than or equal to "value", or 0 if "value" is too big
 unsigned int CeilPowerOf2(unsigned int value);
 
 #define DEG2RAD(a) ((a) * ((float) M_PI / 180.0f))
 #define RAD2DEG(a) ((a) * (180.0f / (float) M_PI))
-#define ANGLEMOD(a) (((int) ((a) * (65536.0f / 360.0f)) & 65535) * (360.0f / 65536.0f))
+#define ANGLEMOD(a) ((a) - 360.0 * floor((a) / 360.0))
 
 #define DotProduct4(a,b) ((a)[0]*(b)[0]+(a)[1]*(b)[1]+(a)[2]*(b)[2]+(a)[3]*(b)[3])
 #define Vector4Clear(a) ((a)[0]=(a)[1]=(a)[2]=(a)[3]=0)
@@ -212,6 +215,8 @@ void AngleVectors (const vec3_t angles, vec3_t forward, vec3_t right, vec3_t up)
 void AngleVectorsFLU (const vec3_t angles, vec3_t forward, vec3_t left, vec3_t up);
 // LordHavoc: builds a [3][4] matrix
 void AngleMatrix (const vec3_t angles, const vec3_t translate, vec_t matrix[][4]);
+// LordHavoc: calculates pitch/yaw/roll angles from forward and up vectors
+void AnglesFromVectors (vec3_t angles, const vec3_t forward, const vec3_t up, qboolean flippitch);
 
 // LordHavoc: like AngleVectors, but taking a forward vector instead of angles, useful!
 void VectorVectors(const vec3_t forward, vec3_t right, vec3_t up);