Xonotic QuakeC
The free, fast arena FPS with crisp movement and a wide array of weapons
p2mathlib.qc
Go to the documentation of this file.
1/*
2 Copyright (C) 2015 Micah Talkiewicz.
3
4 This program is free software; you can redistribute it and/or
5 modify it under the terms of the GNU General Public License
6 as published by the Free Software Foundation; either version 2
7 of the License, or (at your option) any later version.
8
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12
13 See the GNU General Public License for more details.
14
15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18*/
19
22{
23 vector c;
24 c.x = v.x + f;
25 c.y = v.y + f;
26 c.z = v.z + f;
27 return c;
28}
31{
32 vector c;
33 c.x = min(a.x, b.x);
34 c.y = min(a.y, b.y);
35 c.z = min(a.z, b.z);
36 return c;
37}
38
41{
42 vector c;
43 c.x = max(a.x, b.x);
44 c.y = max(a.y, b.y);
45 c.z = max(a.z, b.z);
46 return c;
47}
48
49// there may already be a function for bounding a vector in this manner, however my very quick search did not reveal one -- Player_2
52{
53 vector d = vec_to_min(a, b);
54 vector e = vec_to_max(a, b);
55
56 vector c = vec_to_min(vec_to_max(point, d), e);
57
58 return c;
59}
60
63{
64 vector d = vec_to_max(a, b);
65 vector e = vec_to_min(a, b);
66
67 vector c = vec_to_min(vec_to_max(point, d), e);
68
69 return c;
70}
71
73float angle_snap_f(float f, float increment)
74{
75 for (int j = 0; j <= 360; )
76 {
77 if (f <= j - increment) return j - increment;
78 j = j + increment;
79 }
80
81 return 0;
82}
83
85vector angle_snap_vec(vector v, float increment)
86{
87 vector c;
88 c.x = angle_snap_f(v.x, increment);
89 c.y = angle_snap_f(v.y, increment);
90 c.z = angle_snap_f(v.z, increment);
91 return c;
92}
93
96{
97 vector v;
98 // we float around x and y, but rotate around z
99 v.x = targ.x - org.x;
100 v.y = targ.y - org.y;
101 v.z = org.z - targ.z;
102 // get the angles actual
103 return vectoangles(normalize(v));
104}
#define ERASEABLE
Definition _all.inc:37
vector vectoangles(vector v)
float min(float f,...)
vector normalize(vector v)
float max(float f,...)
ERASEABLE vector vec_bounds_in(vector point, vector a, vector b)
Definition p2mathlib.qc:51
ERASEABLE vector vec_bounds_out(vector point, vector a, vector b)
Definition p2mathlib.qc:62
ERASEABLE vector vec_bias(vector v, float f)
Definition p2mathlib.qc:21
ERASEABLE vector aim_vec(vector org, vector targ)
Definition p2mathlib.qc:95
ERASEABLE vector angle_snap_vec(vector v, float increment)
Definition p2mathlib.qc:85
ERASEABLE vector vec_to_min(vector a, vector b)
Definition p2mathlib.qc:30
ERASEABLE vector vec_to_max(vector a, vector b)
Definition p2mathlib.qc:40
ERASEABLE float angle_snap_f(float f, float increment)
Definition p2mathlib.qc:73
vector
Definition self.qh:92
vector org
Definition self.qh:92