X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Flib%2Fvector.qh;h=0a887cfebb03c4544df88a8d0316bd6f8aa4ab8d;hp=adb6d6a95b272fdfc59f6c650e318411ad3738c3;hb=b41154774b47ce0d8ea139f5ca48ac1a10055a61;hpb=fc15d72b041c9a748b605ba28735380fbe5b5b01 diff --git a/qcsrc/lib/vector.qh b/qcsrc/lib/vector.qh index adb6d6a95b..0a887cfebb 100644 --- a/qcsrc/lib/vector.qh +++ b/qcsrc/lib/vector.qh @@ -34,6 +34,13 @@ vector cross(vector a, vector b) } #endif +noref vector _vmul_a, _vmul_b; +#define vmul(a, b) \ + (_vmul_a = (a), _vmul_b = (b), \ + '1 0 0' * (_vmul_a.x * _vmul_b.x) \ + + '0 1 0' * (_vmul_a.y * _vmul_b.y) \ + + '0 0 1' * (_vmul_a.z * _vmul_b.z)) + const vector eX = '1 0 0'; const vector eY = '0 1 0'; const vector eZ = '0 0 1'; @@ -94,7 +101,7 @@ noref vector _vec2; noref vector _vec3; #define vec3(_x, _y, _z) (_vec3.x = (_x), _vec3.y = (_y), _vec3.z = (_z), _vec3) -vector rotate(vector v, float a) +vector Rotate(vector v, float a) { float a_sin = sin(a), a_cos = cos(a); vector r = '0 0 0'; @@ -124,7 +131,18 @@ vector vec_reflect(vector vel, vector norm, float bounce) return vel - (1 + bounce) * (vel * norm) * norm; } -#ifndef MENUQC +vector vec_epsilon(vector this, float eps) +{ + if (this.x > -eps && this.x < eps) this.x = 0; + if (this.y > -eps && this.y < eps) this.y = 0; + if (this.z > -eps && this.z < eps) this.z = 0; + return this; +} + +#define ClipVelocity(in, normal, out, overbounce) \ + (out = vec_epsilon(vec_reflect(in, normal, (overbounce) - 1), 0.1)) + +#ifdef GAMEQC vector get_corner_position(entity box, int corner) { switch (corner)