]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - qcsrc/lib/angle.qc
Merged master
[xonotic/xonotic-data.pk3dir.git] / qcsrc / lib / angle.qc
1 .vector origin;
2 .vector angles;
3
4 /*
5 * Return a angle within +/- 360.
6 */
7 ERASEABLE
8 float anglemods(float v)
9 {
10         v = v - 360 * floor(v / 360);
11
12         if(v >= 180)
13                 return v - 360;
14         else if(v <= -180)
15                 return v + 360;
16         else
17                 return v;
18 }
19
20 /*
21 * Return the short angle
22 */
23 ERASEABLE
24 float shortangle_f(float ang1, float ang2)
25 {
26         if(ang1 > ang2)
27         {
28                 if(ang1 > 180)
29                         return ang1 - 360;
30         }
31         else
32         {
33                 if(ang1 < -180)
34                         return ang1 + 360;
35         }
36
37         return ang1;
38 }
39
40 ERASEABLE
41 vector shortangle_v(vector ang1, vector ang2)
42 {
43         vector vtmp;
44
45         vtmp_x = shortangle_f(ang1_x,ang2_x);
46         vtmp_y = shortangle_f(ang1_y,ang2_y);
47         vtmp_z = shortangle_f(ang1_z,ang2_z);
48
49         return vtmp;
50 }
51
52 ERASEABLE
53 vector shortangle_vxy(vector ang1, vector ang2)
54 {
55         vector vtmp = '0 0 0';
56
57         vtmp_x = shortangle_f(ang1_x,ang2_x);
58         vtmp_y = shortangle_f(ang1_y,ang2_y);
59
60         return vtmp;
61 }
62
63 /*
64 * Return the angle offset between angle ang and angle of the vector from->to
65 */
66
67 ERASEABLE
68 vector angleofs3(vector from, vector ang, vector to)
69 {
70         vector v_res;
71
72         v_res = normalize(to - from);
73         v_res = vectoangles(v_res);
74         v_res = v_res - ang;
75
76         if (v_res_x < 0)        v_res_x += 360;
77         if (v_res_x > 180)      v_res_x -= 360;
78
79         if (v_res_y < 0)        v_res_y += 360;
80         if (v_res_y > 180)      v_res_y -= 360;
81
82         return v_res;
83 }
84
85 #define angleofs(from, to) angleofs3(from.origin, from.angles, to.origin)