3 #ifndef POSITIVE_PITCH_IS_DOWN
4 #define POSITIVE_PITCH_IS_DOWN 1
7 #if POSITIVE_PITCH_IS_DOWN
8 #define fixedmakevectors makevectors
9 #define FIXED_MAKE_VECTORS MAKE_VECTORS
10 #define FIXED_MAKE_VECTORS_NEW MAKE_VECTORS_NEW
11 noref vector _fixedvectoangles;
12 #define fixedvectoangles(a) (_fixedvectoangles = vectoangles(a), _fixedvectoangles.x *= -1, _fixedvectoangles)
13 noref vector _fixedvectoangles2;
14 #define fixedvectoangles2(a, b) (_fixedvectoangles2 = vectoangles2(a, b), _fixedvectoangles2.x *= -1, _fixedvectoangles2)
16 void fixedmakevectors(vector a)
18 // a makevectors that actually inverts vectoangles
22 #define FIXED_MAKE_VECTORS(angles, forward, right, up) MACRO_BEGIN { \
23 fixedmakevectors(angles); \
24 forward = v_forward; \
27 v_forward = VEC_NAN; \
31 #define FIXED_MAKE_VECTORS_NEW(angles, forward, right, up) \
32 vector forward = '0 0 0'; \
33 vector right = '0 0 0'; \
34 vector up = '0 0 0'; \
35 FIXED_MAKE_VECTORS(angles, forward, right, up);
36 #define fixedvectoangles2 vectoangles2
37 #define fixedvectoangles vectoangles
40 vector AnglesTransform_Apply(vector transform, vector v);
41 vector AnglesTransform_Multiply(vector t1, vector t2); // A B
42 vector AnglesTransform_Invert(vector transform);
43 vector AnglesTransform_TurnDirectionFU(vector transform);
44 vector AnglesTransform_TurnDirectionFR(vector transform);
45 vector AnglesTransform_RightDivide(vector to_transform, vector from_transform); // A B^-1
46 vector AnglesTransform_LeftDivide(vector from_transform, vector to_transform); // A^-1 B
48 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)
50 vector AnglesTransform_ApplyToAngles(vector transform, vector v);
51 vector AnglesTransform_ApplyToVAngles(vector transform, vector v);
52 vector AnglesTransform_FromAngles(vector v);
53 vector AnglesTransform_ToAngles(vector v);
54 vector AnglesTransform_FromVAngles(vector v);
55 vector AnglesTransform_ToVAngles(vector v);
57 // transformed = original * transform + postshift
58 vector AnglesTransform_Multiply_GetPostShift(vector sf0, vector st0, vector t1, vector st1);
59 vector AnglesTransform_PrePostShift_GetPostShift(vector sf, vector t, vector st);