sead
Loading...
Searching...
No Matches
seadBoundBox.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <math/seadMathCalcCommon.h>
4
5namespace sead {
6
7template <typename T>
8inline Vector2<T>
10{
11 return Vector2((mMin.x + mMax.x) / 2.0f,
12 (mMin.y + mMax.y) / 2.0f);
13}
14
15template <typename T>
16inline void
18{
19 center->set((mMin.x + mMax.x) / 2.0f,
20 (mMin.y + mMax.y) / 2.0f);
21}
22
23template <typename T>
24inline bool
26{
27 return mMin.x > mMax.x || mMin.y > mMax.y;
28}
29
30template <typename T>
31inline bool
32BoundBox2<T>::isInside(const Vector2& p) const
33{
34 return mMin.x <= p.x && p.x <= mMax.x && mMin.y <= p.y && p.y <= mMax.y;
35}
36
37template <typename T>
38inline void
44
45template <typename T>
46inline void
48{
49 if (x0 < x1)
50 {
51 mMin.x = x0;
52 mMax.x = x1;
53 }
54 else
55 {
56 mMin.x = x1;
57 mMax.x = x0;
58 }
59
60 if (y0 < y1)
61 {
62 mMin.y = y0;
63 mMax.y = y1;
64 }
65 else
66 {
67 mMin.y = y1;
68 mMax.y = y0;
69 }
70}
71
72template <typename T>
73inline void
74BoundBox2<T>::set(const Vector2& min, const Vector2& max)
75{
76 mMin = min;
77 mMax = max;
78}
79
80template <typename T>
81inline void
83{
84 mMin = min;
85}
86
87template <typename T>
88inline void
90{
91 mMax = max;
92}
93
94template <typename T>
95inline void
97{
98 mMin.set(centerX - sizeX / 2.0f, centerY - sizeY / 2.0f);
99 mMax.set(centerX + sizeX / 2.0f, centerY + sizeY / 2.0f);
100}
101
102template <typename T>
103inline void
109
110template <typename T>
111inline void
117
118template <typename T>
119inline void
121{
122 mMin.x += dx;
123 mMin.y += dy;
124 mMax.x += dx;
125 mMax.y += dy;
126}
127
128template <typename T>
129inline void
131{
132 offset(dv.x, dv.y);
133}
134
135template <typename T>
136inline void
138{
139 T sizeX = (mMax.x - mMin.x) * (sx / 2.0f);
140 T centerX = (mMin.x + mMax.x) / 2.0f;
141
142 mMin.x = centerX - sizeX;
143 mMax.x = centerX + sizeX;
144}
145
146template <typename T>
147inline void
149{
150 T sizeY = (mMax.y - mMin.y) * (sy / 2.0f);
151 T centerY = (mMin.y + mMax.y) / 2.0f;
152
153 mMin.y = centerY - sizeY;
154 mMax.y = centerY + sizeY;
155}
156
157template <typename T>
158inline Vector3<T>
160{
161 return Vector3((mMin.x + mMax.x) / 2.0f,
162 (mMin.y + mMax.y) / 2.0f,
163 (mMin.z + mMax.z) / 2.0f);
164}
165
166template <typename T>
167inline void
169{
170 center->set((mMin.x + mMax.x) / 2.0f,
171 (mMin.y + mMax.y) / 2.0f,
172 (mMin.z + mMax.z) / 2.0f);
173}
174
175template <typename T>
176inline bool
178{
179 return mMin.x > mMax.x || mMin.y > mMax.y || mMin.z > mMax.z;
180}
181
182template <typename T>
183inline bool
184BoundBox3<T>::isInside(const Vector3& p) const
185{
186 return mMin.x <= p.x && p.x <= mMax.x && mMin.y <= p.y && p.y <= mMax.y && mMin.z <= p.z && p.z <= mMax.z;
187}
188
189template <typename T>
190inline void
196
197template <typename T>
198inline void
200{
201 if (x0 < x1)
202 {
203 mMin.x = x0;
204 mMax.x = x1;
205 }
206 else
207 {
208 mMin.x = x1;
209 mMax.x = x0;
210 }
211
212 if (y0 < y1)
213 {
214 mMin.y = y0;
215 mMax.y = y1;
216 }
217 else
218 {
219 mMin.y = y1;
220 mMax.y = y0;
221 }
222
223 if (z0 < z1)
224 {
225 mMin.z = z0;
226 mMax.z = z1;
227 }
228 else
229 {
230 mMin.z = z1;
231 mMax.z = z0;
232 }
233}
234
235template <typename T>
236inline void
238{
239 mMin = min;
240 mMax = max;
241}
242
243template <typename T>
244inline void
246{
247 mMin = min;
248}
249
250template <typename T>
251inline void
253{
254 mMax = max;
255}
256
257template <typename T>
258inline void
260{
261 mMin.x += dx;
262 mMin.y += dy;
263 mMin.z += dz;
264 mMax.x += dx;
265 mMax.y += dy;
266 mMax.z += dz;
267}
268
269template <typename T>
270inline void
272{
273 offset(dv.x, dv.y, dv.z);
274}
275
276template <typename T>
277inline void
279{
280 T sizeX = (mMax.x - mMin.x) * (sx / 2.0f);
281 T centerX = (mMin.x + mMax.x) / 2.0f;
282
283 mMin.x = centerX - sizeX;
284 mMax.x = centerX + sizeX;
285}
286
287template <typename T>
288inline void
290{
291 T sizeY = (mMax.y - mMin.y) * (sy / 2.0f);
292 T centerY = (mMin.y + mMax.y) / 2.0f;
293
294 mMin.y = centerY - sizeY;
295 mMax.y = centerY + sizeY;
296}
297
298template <typename T>
299inline void
301{
302 T sizeZ = (mMax.z - mMin.z) * (sz / 2.0f);
303 T centerZ = (mMin.z + mMax.z) / 2.0f;
304
305 mMin.z = centerZ - sizeZ;
306 mMax.z = centerZ + sizeZ;
307}
308
309} // namespace sead
Definition seadAssert.h:44