Xonotic QuakeC
The free, fast arena FPS with crisp movement and a wide array of weapons
anglestransform.qc File Reference
#include "anglestransform.qh"
Include dependency graph for anglestransform.qc:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Functions

vector AnglesTransform_Apply (vector transform, vector v)
 angles transforms angles in fixedmakevectors/fixedvectoangles space
vector AnglesTransform_ApplyToAngles (vector transform, vector v)
vector AnglesTransform_ApplyToVAngles (vector transform, vector v)
vector AnglesTransform_CancelRoll (vector t)
vector AnglesTransform_FromAngles (vector v)
vector AnglesTransform_FromVAngles (vector v)
vector AnglesTransform_Invert (vector transform)
vector AnglesTransform_LeftDivide (vector from_transform, vector to_transform)
vector AnglesTransform_Multiply (vector t1, vector t2)
vector AnglesTransform_Multiply_GetPostShift (vector t0, vector st0, vector t1, vector st1)
vector AnglesTransform_Normalize (vector t, float minimize_roll)
vector AnglesTransform_PrePostShift_GetPostShift (vector sf, vector t, vector st)
vector AnglesTransform_RightDivide (vector to_transform, vector from_transform)
vector AnglesTransform_ToAngles (vector v)
vector AnglesTransform_ToVAngles (vector v)
vector AnglesTransform_TurnDirectionFR (vector transform)
vector AnglesTransform_TurnDirectionFU (vector transform)

Function Documentation

◆ AnglesTransform_Apply()

vector AnglesTransform_Apply ( vector transform,
vector v )

angles transforms angles in fixedmakevectors/fixedvectoangles space

Definition at line 5 of file anglestransform.qc.

6{
7 // optimize code for common horizontal warpzone transform angles
8 if (transform.x == 0 && transform.z == 0)
9 {
10 // NOTE since transform.x is 0 this code works regardless of POSITIVE_PITCH_IS_DOWN
11 switch(transform.y)
12 {
13 case 0: return v;
14 case 90: case -270: return vec3(-v.y, v.x, v.z);
15 case 180: case -180: return vec3(-v.x, -v.y, v.z);
16 case 270: case -90: return vec3(v.y, -v.x, v.z);
17 }
18 }
19 vector forward, right, up;
20 FIXED_MAKE_VECTORS(transform, forward, right, up);
21 return forward * v.x + right * -v.y + up * v.z;
22}
#define FIXED_MAKE_VECTORS(angles, forward, right, up)
vector
Definition self.qh:96
#define vec3(_x, _y, _z)
Definition vector.qh:100

References FIXED_MAKE_VECTORS, vec3, and vector.

Referenced by AnglesTransform_Multiply(), AnglesTransform_Multiply_GetPostShift(), AnglesTransform_PrePostShift_GetPostShift(), Portal_ApplyTransformToPlayerAngle(), Portal_TeleportPlayer(), skel_set_boneabs(), WarpZone_TransformOrigin(), WarpZone_TransformVelocity(), WarpZone_UnTransformOrigin(), and WarpZone_UnTransformVelocity().

◆ AnglesTransform_ApplyToAngles()

vector AnglesTransform_ApplyToAngles ( vector transform,
vector v )

Definition at line 178 of file anglestransform.qc.

179{
180 v = AnglesTransform_Multiply(transform, v);
181 return v;
182}
vector AnglesTransform_Multiply(vector t1, vector t2)

References AnglesTransform_Multiply(), and vector.

Referenced by CheatCommand(), Portal_TeleportPlayer(), WarpZone_TransformAngles(), and WarpZone_UnTransformAngles().

◆ AnglesTransform_ApplyToVAngles()

vector AnglesTransform_ApplyToVAngles ( vector transform,
vector v )

Definition at line 183 of file anglestransform.qc.

184{
185 v.x = -v.x;
186 v = AnglesTransform_Multiply(transform, v);
187 v.x = -v.x;
188 return v;
189}

References AnglesTransform_Multiply(), and vector.

Referenced by WarpZone_TransformVAngles(), and WarpZone_UnTransformVAngles().

◆ AnglesTransform_CancelRoll()

vector AnglesTransform_CancelRoll ( vector t)

Definition at line 114 of file anglestransform.qc.

115{
116 const float epsilon = 30;
117 float f;
118
119 // constraints:
120 // forward vector (NOT SO important)
121 // right vector, up vector: screen rotation (MORE important)
122 // choose best match among all pitch-yaw only rotations
123
124 // FIXME find a better method
125
126 f = fabs(t.x - (-90)) / epsilon;
127 if (f < 1)
128 {
129 //t.x = -90;
130 t.y += t.z;
131 t.z = 0;
132 }
133 else
134 {
135 f = fabs(t.x - 90) / epsilon;
136 if (f < 1)
137 {
138 //t.x = 90;
139 t.y -= t.z;
140 t.z = 0;
141 }
142 }
143 return t;
144}
float fabs(float f)

References fabs(), and vector.

Referenced by WarpZone_TransformVAngles(), and WarpZone_UnTransformVAngles().

◆ AnglesTransform_FromAngles()

vector AnglesTransform_FromAngles ( vector v)

Definition at line 190 of file anglestransform.qc.

191{
192 return v;
193}

References vector.

Referenced by attach_sameorigin(), Projectile_Draw(), spiderbot_frame(), turret_track(), and vehicle_aimturret().

◆ AnglesTransform_FromVAngles()

vector AnglesTransform_FromVAngles ( vector v)

Definition at line 198 of file anglestransform.qc.

199{
200 v.x = -v.x;
201 return v;
202}

References vector.

Referenced by attach_sameorigin().

◆ AnglesTransform_Invert()

vector AnglesTransform_Invert ( vector transform)

Definition at line 33 of file anglestransform.qc.

34{
35 vector i_forward, i_up;
36 vector forward, right, up;
37 FIXED_MAKE_VECTORS(transform, forward, right, up);
38 // we want angles that turn forward into '1 0 0', right into '0 1 0' and up into '0 0 1'
39 // but these are orthogonal unit vectors!
40 // so to invert, we can simply fixedvectoangles the TRANSPOSED matrix
41 // TODO is this always -transform?
42 i_forward.x = forward.x;
43 i_forward.y = -right.x;
44 i_forward.z = up.x;
45 i_up.x = forward.z;
46 i_up.y = -right.z;
47 i_up.z = up.z;
48 return angles_remove360(fixedvectoangles2(i_forward, i_up));
49}
ERASEABLE vector angles_remove360(vector ang)
Definition angle.qc:77
#define fixedvectoangles2

References angles_remove360(), FIXED_MAKE_VECTORS, fixedvectoangles2, and vector.

Referenced by AnglesTransform_LeftDivide(), AnglesTransform_RightDivide(), skel_set_boneabs(), WarpZone_Accumulator_AddInverseTransform(), WarpZone_UnTransformAngles(), WarpZone_UnTransformOrigin(), WarpZone_UnTransformVAngles(), and WarpZone_UnTransformVelocity().

◆ AnglesTransform_LeftDivide()

vector AnglesTransform_LeftDivide ( vector from_transform,
vector to_transform )

Definition at line 89 of file anglestransform.qc.

90{
91 return AnglesTransform_Multiply(AnglesTransform_Invert(from_transform), to_transform);
92}
vector AnglesTransform_Invert(vector transform)

References AnglesTransform_Invert(), AnglesTransform_Multiply(), and vector.

Referenced by skel_set_boneabs(), spiderbot_frame(), turret_track(), and vehicle_aimturret().

◆ AnglesTransform_Multiply()

vector AnglesTransform_Multiply ( vector t1,
vector t2 )

Definition at line 24 of file anglestransform.qc.

25{
26 vector forward, right, up;
27 FIXED_MAKE_VECTORS(t2, forward, right, up);
28 forward = AnglesTransform_Apply(t1, forward);
29 up = AnglesTransform_Apply(t1, up);
30 return angles_remove360(fixedvectoangles2(forward, up));
31}
vector AnglesTransform_Apply(vector transform, vector v)
angles transforms angles in fixedmakevectors/fixedvectoangles space

References angles_remove360(), AnglesTransform_Apply(), FIXED_MAKE_VECTORS, fixedvectoangles2, and vector.

Referenced by AnglesTransform_ApplyToAngles(), AnglesTransform_ApplyToVAngles(), AnglesTransform_LeftDivide(), AnglesTransform_RightDivide(), Projectile_Draw(), skeleton_from_frames(), and WarpZone_Accumulator_AddTransform().

◆ AnglesTransform_Multiply_GetPostShift()

vector AnglesTransform_Multiply_GetPostShift ( vector t0,
vector st0,
vector t1,
vector st1 )

Definition at line 210 of file anglestransform.qc.

211{
212 // we want the result of:
213 // t0 * (t1 * p + st1) + st0
214 // t0 * t1 * p + t0 * st1 + st0
215 return st0 + AnglesTransform_Apply(t0, st1);
216}

References AnglesTransform_Apply(), and vector.

Referenced by WarpZone_Accumulator_AddTransform().

◆ AnglesTransform_Normalize()

vector AnglesTransform_Normalize ( vector t,
float minimize_roll )

Definition at line 94 of file anglestransform.qc.

95{
96 float need_flip;
97 // first, bring all angles in their range...
98 t.x -= 360 * rint(t.x / 360);
99 t.y -= 360 * rint(t.y / 360);
100 t.z -= 360 * rint(t.z / 360);
101 if (minimize_roll)
102 need_flip = (t.z > 90 || t.z <= -90);
103 else
104 need_flip = (t.x > 90 || t.x < -90); // for pitch we prefer to allow exactly -90 degrees for looking straight down
105 if (need_flip)
106 {
107 if (t.x >= 0) t.x = 180 - t.x; else t.x = -180 - t.x;
108 if (t.y > 0) t.y -= 180; else t.y += 180;
109 if (t.z > 0) t.z -= 180; else t.z += 180;
110 }
111 return t;
112}
float rint(float f)

References rint(), and vector.

Referenced by spiderbot_frame(), vehicle_aimturret(), WarpZone_TransformVAngles(), and WarpZone_UnTransformVAngles().

◆ AnglesTransform_PrePostShift_GetPostShift()

vector AnglesTransform_PrePostShift_GetPostShift ( vector sf,
vector t,
vector st )

Definition at line 217 of file anglestransform.qc.

218{
219 return st - AnglesTransform_Apply(t, sf);
220}

References AnglesTransform_Apply(), and vector.

Referenced by WarpZone_Accumulator_AddInverseTransform(), and WarpZone_SetUp().

◆ AnglesTransform_RightDivide()

vector AnglesTransform_RightDivide ( vector to_transform,
vector from_transform )

Definition at line 84 of file anglestransform.qc.

85{
86 return AnglesTransform_Multiply(to_transform, AnglesTransform_Invert(from_transform));
87}

References AnglesTransform_Invert(), AnglesTransform_Multiply(), and vector.

Referenced by Portal_Connect(), and WarpZone_SetUp().

◆ AnglesTransform_ToAngles()

vector AnglesTransform_ToAngles ( vector v)

Definition at line 194 of file anglestransform.qc.

195{
196 return v;
197}

References vector.

Referenced by attach_sameorigin(), detach_sameorigin(), Projectile_Draw(), spiderbot_frame(), turret_track(), and vehicle_aimturret().

◆ AnglesTransform_ToVAngles()

vector AnglesTransform_ToVAngles ( vector v)

Definition at line 203 of file anglestransform.qc.

204{
205 v.x = -v.x;
206 return v;
207}

References vector.

Referenced by attach_sameorigin(), and detach_sameorigin().

◆ AnglesTransform_TurnDirectionFR()

vector AnglesTransform_TurnDirectionFR ( vector transform)

Definition at line 51 of file anglestransform.qc.

52{
53 // turn 180 degrees around v_up
54 // changes in-direction to out-direction
55 //fixedmakevectors(transform);
56 //return angles_remove360(fixedvectoangles2(-1 * v_forward, 1 * v_up));
57 transform.x = -transform.x;
58 transform.y = 180 + transform.y;
59 if (transform.y >= 360)
60 transform.y -= 360;
61 transform.z = -transform.z;
62 // pitch: -s +c
63 // yaw: -s -c
64 // roll: -s +c
65 return transform;
66}

References vector.

Referenced by Portal_Connect(), and WarpZone_SetUp().

◆ AnglesTransform_TurnDirectionFU()

vector AnglesTransform_TurnDirectionFU ( vector transform)

Definition at line 68 of file anglestransform.qc.

69{
70 // turn 180 degrees around v_up
71 // changes in-direction to out-direction
72 //fixedmakevectors(transform);
73 //return angles_remove360(fixedvectoangles2(-1 * v_forward, 1 * v_up));
74 transform.x = -transform.x;
75 transform.y = 180 + transform.y;
76 if (transform.y >= 360)
77 transform.y -= 360;
78 transform.z = 180 - transform.z;
79 if (transform.y <= -360)
80 transform.y += 360;
81 return transform;
82}

References vector.