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