]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - qcsrc/lib/angle.qc
do the lazy thing
[xonotic/xonotic-data.pk3dir.git] / qcsrc / lib / angle.qc
1 .vector origin;
2
3 // angles of the player's model (as opposed to their view which uses `.vector v_angle;`) in degrees
4 // x is pitch: positive means up (unlike .v_angle), usually is 0
5 // y is yaw: between -180 and 180, increases when turning left
6 // z is roll: positive means tilted clockwise, usually is 0
7 .vector angles;
8
9 /*
10 * Return a angle within +/- 360.
11 */
12 float anglemods(float v)
13 {
14         v = v - 360 * floor(v / 360);
15
16         if(v >= 180)
17                 return v - 360;
18         else if(v <= -180)
19                 return v + 360;
20         else
21                 return v;
22 }
23
24 /*
25 * Return the short angle
26 */
27 float shortangle_f(float ang1, float ang2)
28 {
29         if(ang1 > ang2)
30         {
31                 if(ang1 > 180)
32                         return ang1 - 360;
33         }
34         else
35         {
36                 if(ang1 < -180)
37                         return ang1 + 360;
38         }
39
40         return ang1;
41 }
42
43 vector shortangle_v(vector ang1, vector ang2)
44 {
45         vector vtmp;
46
47         vtmp_x = shortangle_f(ang1_x,ang2_x);
48         vtmp_y = shortangle_f(ang1_y,ang2_y);
49         vtmp_z = shortangle_f(ang1_z,ang2_z);
50
51         return vtmp;
52 }
53
54 vector shortangle_vxy(vector ang1, vector ang2)
55 {
56         vector vtmp = '0 0 0';
57
58         vtmp_x = shortangle_f(ang1_x,ang2_x);
59         vtmp_y = shortangle_f(ang1_y,ang2_y);
60
61         return vtmp;
62 }
63
64 /*
65 * Return the angle between two enteties
66 */
67 vector angleofs(entity from, entity to)
68 {
69         vector v_res;
70
71         v_res = normalize(to.origin - from.origin);
72         v_res = vectoangles(v_res);
73         v_res = v_res - from.angles;
74
75         if (v_res_x < 0)        v_res_x += 360;
76         if (v_res_x > 180)      v_res_x -= 360;
77
78         if (v_res_y < 0)        v_res_y += 360;
79         if (v_res_y > 180)      v_res_y -= 360;
80
81         return v_res;
82 }
83
84 vector angleofs3(vector from, vector from_a, entity to)
85 {
86         vector v_res;
87
88         v_res = normalize(to.origin - from);
89         v_res = vectoangles(v_res);
90         v_res = v_res - from_a;
91
92         if (v_res_x < 0)        v_res_x += 360;
93         if (v_res_x > 180)      v_res_x -= 360;
94
95         if (v_res_y < 0)        v_res_y += 360;
96         if (v_res_y > 180)      v_res_y -= 360;
97
98         return v_res;
99 }