]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - qcsrc/lib/warpzone/anglestransform.qh
Cleanup the warpzone fix to support .move_movetype
[xonotic/xonotic-data.pk3dir.git] / qcsrc / lib / warpzone / anglestransform.qh
1 #ifndef LIB_WARPZONE_ANGLETRANSFORM_H
2 #define LIB_WARPZONE_ANGLETRANSFORM_H
3
4 #ifndef POSITIVE_PITCH_IS_DOWN
5 #define POSITIVE_PITCH_IS_DOWN 1
6 #endif
7
8 #if POSITIVE_PITCH_IS_DOWN
9     #define fixedmakevectors makevectors
10     noref vector _fixedvectoangles;
11     #define fixedvectoangles(a) (_fixedvectoangles = vectoangles(a), _fixedvectoangles.x *= -1, _fixedvectoangles)
12     noref vector _fixedvectoangles2;
13     #define fixedvectoangles2(a, b) (_fixedvectoangles2 = vectoangles2(a, b), _fixedvectoangles2.x *= -1, _fixedvectoangles2)
14 #else
15     void fixedmakevectors(vector a)
16     {
17         // a makevectors that actually inverts vectoangles
18         a.x = -a.x;
19         makevectors(a);
20     }
21     #define fixedvectoangles2 vectoangles2
22     #define fixedvectoangles vectoangles
23 #endif
24
25 vector AnglesTransform_Apply(vector transform, vector v);
26 vector AnglesTransform_Multiply(vector t1, vector t2); // A B
27 vector AnglesTransform_Invert(vector transform);
28 vector AnglesTransform_TurnDirectionFU(vector transform);
29 vector AnglesTransform_TurnDirectionFR(vector transform);
30 vector AnglesTransform_RightDivide(vector to_transform, vector from_transform); // A B^-1
31 vector AnglesTransform_LeftDivide(vector from_transform, vector to_transform); // A^-1 B
32
33 vector AnglesTransform_Normalize(vector t, float minimize_roll); // makes sure all angles are in their range: yaw in -180..180, pitch in -90..90, roll in -180..180 (or if minimize_roll is set, pitch in -180..180, roll in -90..90)
34
35 vector AnglesTransform_ApplyToAngles(vector transform, vector v);
36 vector AnglesTransform_ApplyToVAngles(vector transform, vector v);
37 vector AnglesTransform_FromAngles(vector v);
38 vector AnglesTransform_ToAngles(vector v);
39 vector AnglesTransform_FromVAngles(vector v);
40 vector AnglesTransform_ToVAngles(vector v);
41
42 // transformed = original * transform + postshift
43 vector AnglesTransform_Multiply_GetPostShift(vector sf0, vector st0, vector t1, vector st1);
44 vector AnglesTransform_PrePostShift_GetPostShift(vector sf, vector t, vector st);
45 #endif