From 230d37ccedf987921f7937cf2a394d718f9c7d5f Mon Sep 17 00:00:00 2001 From: Martin Taibr Date: Tue, 13 Nov 2018 22:23:03 +0100 Subject: [PATCH] wrap some more stuff, cleanup --- .../sv_spawn_near_teammate.qc | 4 +- qcsrc/dpdefs/csprogsdefs.qh | 13 ++- qcsrc/dpdefs/dpextensions.qh | 3 + qcsrc/lib/deglobalization.qh | 81 +++++++++---------- 4 files changed, 53 insertions(+), 48 deletions(-) diff --git a/qcsrc/common/mutators/mutator/spawn_near_teammate/sv_spawn_near_teammate.qc b/qcsrc/common/mutators/mutator/spawn_near_teammate/sv_spawn_near_teammate.qc index b7e91b797..523254770 100644 --- a/qcsrc/common/mutators/mutator/spawn_near_teammate/sv_spawn_near_teammate.qc +++ b/qcsrc/common/mutators/mutator/spawn_near_teammate/sv_spawn_near_teammate.qc @@ -103,9 +103,7 @@ MUTATOR_HOOKFUNCTION(spawn_near_teammate, PlayerSpawn) vector horiz_vel = vec2(it.velocity); // when walking slowly sideways, we assume the player wants a clear shot ahead - spawn behind him according to where he's looking // when running fast, spawn behind him according to his direction of movement to prevent colliding with the newly spawned player - vector forward = '0 0 0'; - vector right = '0 0 0'; - vector up = '0 0 0'; + NEW_VECS(forward, right, up); if (vdist(horiz_vel, >, autocvar_sv_maxspeed + 50)) { FIXED_MAKE_VECTORS(vectoangles(horiz_vel), forward, right, up); diff --git a/qcsrc/dpdefs/csprogsdefs.qh b/qcsrc/dpdefs/csprogsdefs.qh index 7259b905d..0bd5c328e 100644 --- a/qcsrc/dpdefs/csprogsdefs.qh +++ b/qcsrc/dpdefs/csprogsdefs.qh @@ -49,10 +49,6 @@ void(vector ang) _makevectors_hidden = #1; //#define makevectors DO_NOT_USE_GLOBALS_PREFER_MAKE_VECTORS_MACRO_INSTEAD -void(vector dir) _vectorvectors_hidden = #432; - -#define vectorvectors DO_NOT_USE_GLOBALS_PREFER_VECTOR_VECTORS_MACRO_INSTEAD - #define skel_get_bonerel DO_NOT_USE_GLOBALS // not used anywhere so not wrapped vector(float skel, float bonenum) _skel_get_boneabs_hidden = #270; @@ -64,3 +60,12 @@ void(float skel, float bonenum, vector org) _skel_set_bone_hidden = #271; #define skel_mul_bone DO_NOT_USE_GLOBALS // not used anywhere so not wrapped #define skel_mul_bones DO_NOT_USE_GLOBALS // not used anywhere so not wrapped + +void(vector dir) _vectorvectors_hidden = #432; +#define vectorvectors DO_NOT_USE_GLOBALS_PREFER_VECTOR_VECTORS_MACRO_INSTEAD + +vector(entity ent, float tagindex) _gettaginfo_hidden = #452; +//#define gettaginfo DO_NOT_USE_GLOBALS_PREFER_GET_TAG_INFO_MACRO_INSTEAD + +#define getentity DO_NOT_USE_GLOBALS // not used anywhere so not wrapped +#define getentityvec DO_NOT_USE_GLOBALS // not used anywhere so not wrapped diff --git a/qcsrc/dpdefs/dpextensions.qh b/qcsrc/dpdefs/dpextensions.qh index 1976c3327..d6f6a072a 100644 --- a/qcsrc/dpdefs/dpextensions.qh +++ b/qcsrc/dpdefs/dpextensions.qh @@ -77,3 +77,6 @@ void(float skel, float bonenum, vector org) _skel_set_bone_hidden = #271; #define skel_mul_bone DO_NOT_USE_GLOBALS // not used anywhere so not wrapped #define skel_mul_bones DO_NOT_USE_GLOBALS // not used anywhere so not wrapped + +vector(entity ent, float tagindex) _gettaginfo_hidden = #452; +//#define gettaginfo DO_NOT_USE_GLOBALS_PREFER_GET_TAG_INFO_MACRO_INSTEAD diff --git a/qcsrc/lib/deglobalization.qh b/qcsrc/lib/deglobalization.qh index c4969f5fc..a95f1367a 100644 --- a/qcsrc/lib/deglobalization.qh +++ b/qcsrc/lib/deglobalization.qh @@ -13,8 +13,14 @@ // - e.camera_transform / CL_VM_TransformView (in engine) // - adddynamiclight // - makestatic -// - gettaginfo -// - getentity + +#define NEW_VECS(...) EVAL(OVERLOAD(NEW_VECS, __VA_ARGS__)) +#define NEW_VECS_3(forward, right, up) vector forward = '0 0 0'; vector right = '0 0 0'; vector up = '0 0 0'; +#define NEW_VECS_4(forward, right, up, origin) NEW_VECS_3(forward, right, up); vector origin = '0 0 0'; + +#define CLEAR_V_GLOBALS() v_forward = VEC_NAN; v_right = VEC_NAN; v_up = VEC_NAN; +#define GET_V_GLOBALS(forward, right, up) forward = v_forward; right = v_right; up = v_up; +#define SET_V_GLOBALS(forward, right, up) v_forward = forward; v_right = right; v_up = up; #ifdef GAMEQC STATIC_INIT(globals) { @@ -31,9 +37,7 @@ STATIC_INIT(globals) { //LOG_INFOF("%f\n", x == x); //LOG_INFOF("%f\n", x != x); - v_forward = VEC_NAN; - v_right = VEC_NAN; - v_up = VEC_NAN; + CLEAR_V_GLOBALS(); } #endif @@ -41,54 +45,49 @@ STATIC_INIT(globals) { /// Always use this instead of raw `makevectors` to make the data flow clear. #define MAKE_VECTORS(angles, forward, right, up) MACRO_BEGIN { \ _makevectors_hidden(angles); \ - forward = v_forward; \ - right = v_right; \ - up = v_up; \ - v_forward = VEC_NAN; \ - v_right = VEC_NAN; \ - v_up = VEC_NAN; \ + GET_V_GLOBALS(forward, right, up); \ + CLEAR_V_GLOBALS(); \ } MACRO_END /// Same as `MAKE_VECTORS` but also creates the locals for convenience. #define MAKE_VECTORS_NEW(angles, forward, right, up) \ - vector forward = '0 0 0'; \ - vector right = '0 0 0'; \ - vector up = '0 0 0'; \ + NEW_VECS(forward, right, up); \ MAKE_VECTORS(angles, forward, right, up); +/// Returns all 4 vectors by assigning to them (instead of returning a value) for consistency (and sanity) +#define SKEL_GET_BONE_ABS(skel, bonenum, forward, right, up, origin) MACRO_BEGIN { \ + origin = _skel_get_boneabs_hidden(skel, bonenum) \ + GET_V_GLOBALS(forward, right, up); \ + CLEAR_V_GLOBALS(); \ +} MACRO_END + +#define SKEL_GET_BONE_ABS_NEW(skel, bonenum, forward, right, up, origin) \ + NEW_VECS(forward, right, up, origin); \ + SKEL_GET_BONE_ABS(skel, bonenum, forward, right, up, origin) + +#define SKEL_SET_BONE(skel, bonenum, org, forward, right, up) MACRO_BEGIN { \ + SET_V_GLOBALS(forward, right, up); \ + _skel_set_bone_hidden(skel, bonenum, org); \ + CLEAR_V_GLOBALS(); \ +} MACRO_END + #define VECTOR_VECTORS(forward_in, forward, right, up) MACRO_BEGIN { \ _vectorvectors_hidden(forward_in); \ - forward = v_forward; \ - right = v_right; \ - up = v_up; \ - v_forward = VEC_NAN; \ - v_right = VEC_NAN; \ - v_up = VEC_NAN; \ + GET_V_GLOBALS(forward, right, up); \ + CLEAR_V_GLOBALS(); \ } 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'; \ + NEW_VECS(forward, right, up); \ VECTOR_VECTORS(forward_in, forward, right, up); -/// Returns all 4 vectors by assigning to them (instead of returning a value) for consistency (and sanity) -#define SKEL_GET_BONE_ABS(skel, bonenum, forward, right, up, origin) MACRO_BEGIN { \ - origin = _skel_get_boneabs_hidden(skel, bonenum) \ - forward = v_forward; \ - right = v_right; \ - up = v_up; \ - v_forward = VEC_NAN; \ - v_right = VEC_NAN; \ - v_up = VEC_NAN; \ +/// Note that this only avoids the v_* globals, not the gettaginfo_* ones +#define GET_TAG_INFO(ent, tagindex, forward, right, up, origin) MACRO_BEGIN { \ + origin = _gettaginfo_hidden(ent, tagindex); \ + GET_V_GLOBALS(forward, right, up); \ + CLEAR_V_GLOBALS(); \ } MACRO_END -#define SKEL_SET_BONE(skel, bonenum, org, forward, right, up) MACRO_BEGIN { \ - v_forward = forward; \ - v_right = right; \ - v_up = up; \ - _skel_set_bone_hidden(skel, bonenum, org); \ - v_forward = VEC_NAN; \ - v_right = VEC_NAN; \ - v_up = VEC_NAN; \ -} MACRO_END +#define GET_TAG_INFO_NEW(ent, tagindex, forward, right, up, origin) \ + NEW_VECS(forward, right, up, origin); \ + GET_TAG_INFO(ent, tagindex, forward, right, up, origin); -- 2.39.2