From 9deb571178e5d74b208788b4b9ea50071890bf76 Mon Sep 17 00:00:00 2001 From: Martin Taibr Date: Tue, 6 Nov 2018 14:18:33 +0100 Subject: [PATCH] ergonomics initiative for MAKEVECTORS --- qcsrc/client/teamradar.qc | 3 +-- qcsrc/client/view.qc | 8 +++----- qcsrc/lib/vector.qh | 25 +++++++++++++++++++++---- 3 files changed, 25 insertions(+), 11 deletions(-) diff --git a/qcsrc/client/teamradar.qc b/qcsrc/client/teamradar.qc index 26de41e724..ddc7fc3224 100644 --- a/qcsrc/client/teamradar.qc +++ b/qcsrc/client/teamradar.qc @@ -93,8 +93,7 @@ void draw_teamradar_player(vector coord3d, vector pangles, vector rgb) coord = teamradar_texcoord_to_2dcoord(teamradar_3dcoord_to_texcoord(coord3d)); - vector forward = '0 0 0', right = '0 0 0', up = '0 0 0'; - MAKEVECTORS(makevectors, pangles - '0 1 0' * teamradar_angle, forward, right, up); + MAKEVECTORS_NEW(pangles - '0 1 0' * teamradar_angle, forward, right, up); if(v_flipped) { forward.x = -forward.x; diff --git a/qcsrc/client/view.qc b/qcsrc/client/view.qc index ffab462363..a8ce62946b 100644 --- a/qcsrc/client/view.qc +++ b/qcsrc/client/view.qc @@ -141,8 +141,7 @@ void calc_followmodel_ofs(entity view) vel = view.velocity; else { - vector forward = '0 0 0', right = '0 0 0', up = '0 0 0'; - MAKEVECTORS(makevectors, view_angles, forward, right, up); + MAKEVECTORS_NEW(view_angles, forward, right, up); vel.x = view.velocity * forward; vel.y = view.velocity * right * -1; vel.z = view.velocity * up; @@ -167,8 +166,7 @@ void calc_followmodel_ofs(entity view) if (autocvar_cl_followmodel_velocity_absolute) { vector fixed_gunorg; - vector forward = '0 0 0', right = '0 0 0', up = '0 0 0'; - MAKEVECTORS(makevectors, view_angles, forward, right, up); + MAKEVECTORS_NEW(view_angles, forward, right, up); fixed_gunorg.x = gunorg * forward; fixed_gunorg.y = gunorg * right * -1; fixed_gunorg.z = gunorg * up; @@ -1946,7 +1944,7 @@ void CSQC_UpdateView(entity this, float w, float h) // Render the Scene view_origin = getpropertyvec(VF_ORIGIN); view_angles = getpropertyvec(VF_ANGLES); - MAKEVECTORS(makevectors, view_angles, view_forward, view_right, view_up); + MAKEVECTORS(view_angles, view_forward, view_right, view_up); #ifdef BLURTEST if(time > blurtest_time0 && time < blurtest_time1) diff --git a/qcsrc/lib/vector.qh b/qcsrc/lib/vector.qh index 2900a0f904..6a92bbea75 100644 --- a/qcsrc/lib/vector.qh +++ b/qcsrc/lib/vector.qh @@ -120,10 +120,11 @@ STATIC_INIT(globals) { } #endif -// TODO when raw makevectors in not used anywhere else, assert that the global vectors are NaN before calling makevectors here -// to make sure nobody is accidentally using them -#define MAKEVECTORS(f, angles, forward, right, up) MACRO_BEGIN { \ - f(angles); \ +/// 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; \ @@ -132,6 +133,22 @@ STATIC_INIT(globals) { 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; \ + vector right; \ + vector up; \ + 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 + ERASEABLE vector Rotate(vector v, float a) { -- 2.39.2