wip
authorMartin Taibr <taibr.martin@gmail.com>
Sat, 10 Nov 2018 14:55:06 +0000 (15:55 +0100)
committerMartin Taibr <taibr.martin@gmail.com>
Sat, 10 Nov 2018 14:55:06 +0000 (15:55 +0100)
qcsrc/client/csqcmodel_hooks.qc
qcsrc/common/weapons/weapon/shockwave.qc
qcsrc/dpdefs/post.qh
qcsrc/lib/static.qh
qcsrc/lib/vector.qh

index 86c672c..0b62704 100644 (file)
@@ -542,7 +542,6 @@ void CSQCModel_Effects_Apply(entity this)
        {
                this.renderflags |= RF_USEAXIS;
                makevectors(this.angles + '0 100 0' * fmod(time, 3.6));
-               //MAKEVECTORS(makevectors, this.angles + '0 100 0' * fmod(time, 3.6), v_forward, v_right, v_up);
        }
        if(this.csqcmodel_modelflags & MF_TRACER)
                tref = EFFECT_TR_WIZSPIKE.m_id;
index 7e60667..26e5587 100644 (file)
@@ -663,9 +663,10 @@ void Draw_Shockwave(entity this)
        // WEAPONTODO: trace to find what we actually hit
        vector endpos = (this.sw_shotorg + (this.sw_shotdir * this.sw_distance));
 
-       vectorvectors(this.sw_shotdir);
-       vector right = v_right; // save this for when we do makevectors later
-       vector up = v_up; // save this for when we do makevectors later
+       //vectorvectors(this.sw_shotdir);
+       //vector right = v_right; // save this for when we do makevectors later
+       //vector up = v_up; // save this for when we do makevectors later
+       VECTOR_VECTORS_NEW(this.sw_shotdir, _forward, right, up);
 
        // WEAPONTODO: combine and simplify these calculations
        vector min_end = ((this.sw_shotorg + (this.sw_shotdir * SW_DISTTOMIN)) + (up * this.sw_spread_min));
index 70e5f37..73c51dd 100644 (file)
 #else
        #define NULL (RVALUE, world)
 #endif
+
+#include "lib/accumulate.qh"
+#include "lib/misc.qh"
+#include "lib/static.qh"
+#include "lib/vector.qh"
+
+void(vector) _vectorvectors;
+
+#ifdef GAMEQC
+STATIC_INIT(globals) {
+       _vectorvectors = vectorvectors;
+
+       // set to NaN to more easily detect uninitialized use
+       v_forward = VEC_NAN;
+       v_right = VEC_NAN;
+       v_up = VEC_NAN;
+}
+
+/// Same as the `makevectors` builtin but uses the provided locals instead of the `v_*` globals.
+/// Always use this instead of raw `makevectors` to make the data flow clear.
+/// It's 2018, they even teach that globals are bad at my uni... though for some reason they never explained why. Sigh.
+#define MAKEVECTORS(angles, forward, right, up) MACRO_BEGIN { \
+       makevectors(angles); \
+       forward = v_forward; \
+       right = v_right; \
+       up = v_up; \
+       v_forward = VEC_NAN; \
+       v_right = VEC_NAN; \
+       v_up = VEC_NAN; \
+} MACRO_END
+
+// Same as `MAKEVECTORS` but also creates the locals for convenience.
+#define MAKEVECTORS_NEW(angles, forward, right, up) \
+       vector forward = '0 0 0'; \
+       vector right = '0 0 0'; \
+       vector up = '0 0 0'; \
+       MAKEVECTORS(angles, forward, right, up);
+
+#define VECTOR_VECTORS(forward_in, forward, right, up) MACRO_BEGIN { \
+       _vectorvectors(forward_in); \
+       forward = v_forward; \
+       right = v_right; \
+       up = v_up; \
+       v_forward = VEC_NAN; \
+       v_right = VEC_NAN; \
+       v_up = VEC_NAN; \
+} MACRO_END
+
+#define VECTOR_VECTORS_NEW(forward_in, forward, right, up) \
+       vector forward = '0 0 0'; \
+       vector right = '0 0 0'; \
+       vector up = '0 0 0'; \
+       VECTOR_VECTORS(forward_in, forward, right, up);
+
+#define vectorvectors DO_NOT_USE_GLOBALS
+
+// FIXME find a good place for this
+// FIXME MAKE_VECTORS because current naming sucks
+// FIXME ban vectorvectors
+
+// TODO when raw makevectors and similar functions are not used anywhere else anymore,
+// assert that the global vectors are NaN before calling makevectors in MAKEVECTORS
+// to make sure nobody (even builtins) is accidentally using them - NaN is the most liekly value to expose values clearly
+// also uncomment these:
+//#define makevectors DO_NOT_USE_GLOBALS
+//#define v_forward DO_NOT_USE_GLOBALS
+//#define v_right DO_NOT_USE_GLOBALS
+//#define v_up DO_NOT_USE_GLOBALS
+// FIXME ^ won't work
+#endif
index e0ec96b..bc456f1 100644 (file)
@@ -1,5 +1,8 @@
 #pragma once
 
+#include "lib/macro.qh"
+#include "lib/log.qh"
+
 #define GETTIME_REALTIME 1
 #ifdef MENUQC
 float(int tmr) _gettime = #67;
index 5c016e1..eae8d43 100644 (file)
@@ -1,22 +1,6 @@
 #pragma once
 
 #include "lib/float.qh"
-#include "lib/misc.qh"
-#include "lib/static.qh"
-
-//pseudo prototypes:
-// vector vec2(vector v); // returns a vector with just the x and y components of the given vector
-// vector vec2(float x, float y); // returns a vector with the given x and y components
-
-noref vector _vec2;
-#define vec2(...) EVAL(OVERLOAD(vec2, __VA_ARGS__))
-#define vec2_1(v) (_vec2 = (v), _vec2.z = 0, _vec2)
-#define vec2_2(x, y) (_vec2_x = (x), _vec2_y = (y), _vec2)
-
-noref vector _vec3;
-#define vec3(_x, _y, _z) (_vec3.x = (_x), _vec3.y = (_y), _vec3.z = (_z), _vec3)
-
-#define VEC_NAN vec3(FLOAT_NAN, FLOAT_NAN, FLOAT_NAN);
 
 noref vector _vlen2;
 #define vlen2(v) (_vlen2 = (v), dotproduct(_vlen2, _vlen2))
@@ -111,43 +95,19 @@ float boxinsidebox(vector smins, vector smaxs, vector bmins, vector bmaxs) { ret
 #define YAW(v) ((v).y)
 #define ROLL(v) ((v).z)
 
-#ifdef GAMEQC
-STATIC_INIT(globals) {
-       // set to NaN to more easily detect uninitialized use
-       v_forward = VEC_NAN;
-       v_right = VEC_NAN;
-       v_up = VEC_NAN;
-}
-#endif
+//pseudo prototypes:
+// vector vec2(vector v); // returns a vector with just the x and y components of the given vector
+// vector vec2(float x, float y); // returns a vector with the given x and y components
+
+noref vector _vec2;
+#define vec2(...) EVAL(OVERLOAD(vec2, __VA_ARGS__))
+#define vec2_1(v) (_vec2 = (v), _vec2.z = 0, _vec2)
+#define vec2_2(x, y) (_vec2_x = (x), _vec2_y = (y), _vec2)
 
-/// Same as the `makevectors` builtin but uses the provided locals instead of the `v_*` globals.
-/// Always use this instead of raw `makevectors` to make the data flow clear.
-/// It's 2018, they even teach that globals are bad at my uni... though for some reason they never explained why. Sigh.
-#define MAKEVECTORS(angles, forward, right, up) MACRO_BEGIN { \
-       makevectors(angles); \
-       forward = v_forward; \
-       right = v_right; \
-       up = v_up; \
-       v_forward = VEC_NAN; \
-       v_right = VEC_NAN; \
-       v_up = VEC_NAN; \
-} MACRO_END
-
-// Same as `MAKEVECTORS` but also creates the locals for convenience.
-#define MAKEVECTORS_NEW(angles, forward, right, up) \
-       vector forward = '0 0 0'; \
-       vector right = '0 0 0'; \
-       vector up = '0 0 0'; \
-       MAKEVECTORS(angles, forward, right, up);
-
-// TODO when raw makevectors and similar functions are not used anywhere else anymore,
-// assert that the global vectors are NaN before calling makevectors in MAKEVECTORS
-// to make sure nobody (even builtins) is accidentally using them - NaN is the most liekly value to expose values clearly
-// also uncomment these:
-//#define makevectors DO_NOT_USE_GLOBALS
-//#define v_forward DO_NOT_USE_GLOBALS
-//#define v_right DO_NOT_USE_GLOBALS
-//#define v_up DO_NOT_USE_GLOBALS
+noref vector _vec3;
+#define vec3(_x, _y, _z) (_vec3.x = (_x), _vec3.y = (_y), _vec3.z = (_z), _vec3)
+
+#define VEC_NAN vec3(FLOAT_NAN, FLOAT_NAN, FLOAT_NAN);
 
 ERASEABLE
 vector Rotate(vector v, float a)