-
Notifications
You must be signed in to change notification settings - Fork 1
/
BBox.h
133 lines (108 loc) · 3.15 KB
/
BBox.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
#ifndef _B_BOX_H_
#define _B_BOX_H_
#include "Vector.h"
namespace typing
{
// A 2 dimensional bounding box, all collision tests are only done in 2D.
class BBox
{
public:
BBox()
{
}
BBox(float minX, float minY, float maxX, float maxY)
: m_min(minX, minY), m_max(maxX, maxY)
{
}
BBox(const juzutil::Vector2& min, const juzutil::Vector2& max)
: m_min(min), m_max(max)
{
}
float GetMinX() const
{
return m_min[0];
}
float GetMinY() const
{
return m_min[1];
}
float GetMaxX() const
{
return m_max[0];
}
float GetMaxY() const
{
return m_max[1];
}
const juzutil::Vector2& GetMin() const
{
return m_min;
}
const juzutil::Vector2& GetMax() const
{
return m_max;
}
bool Intersects(const BBox& box) const
{
if (m_min[0] > box.m_max[0] || m_max[0] < box.m_min[0])
{
return false;
}
if (m_min[1] > box.m_max[1] || m_max[1] < box.m_min[1])
{
return false;
}
return true;
}
bool Intersects(const juzutil::Vector2& point) const
{
return (m_min[0] < point[0] && m_min[1] < point[1] && m_max[1] > point[1] && m_max[1] > point[1]);
}
bool Intersects(const juzutil::Vector3& point) const
{
return (m_min[0] < point[0] && m_min[1] < point[1] && m_max[1] > point[1] && m_max[1] > point[1]);
}
const BBox operator+(const juzutil::Vector3& origin) const
{
return BBox(m_min[0] + origin[0], m_min[1] + origin[1],
m_max[0] + origin[0], m_max[1] + origin[1]);
}
const BBox operator+(const juzutil::Vector2& origin) const
{
return BBox(m_min + origin, m_max + origin);
}
const BBox operator-(const juzutil::Vector3& origin) const
{
return BBox(m_min[0] - origin[0], m_min[1] - origin[1],
m_max[0] - origin[0], m_max[1] - origin[1]);
}
const BBox operator-(const juzutil::Vector2& origin) const
{
return BBox(m_min - origin, m_max - origin);
}
void operator+=(const juzutil::Vector3& origin)
{
m_min[0] += origin[0]; m_min[1] += origin[1];
m_max[0] += origin[0]; m_max[1] += origin[1];
}
void operator+=(const juzutil::Vector2& origin)
{
m_min += origin;
m_max += origin;
}
void operator-=(const juzutil::Vector3& origin)
{
m_min[0] -= origin[0]; m_min[1] -= origin[1];
m_max[0] -= origin[0]; m_max[1] -= origin[1];
}
void operator-=(const juzutil::Vector2& origin)
{
m_min -= origin;
m_max -= origin;
}
private:
juzutil::Vector2 m_min;
juzutil::Vector2 m_max;
};
}
#endif // _B_BOX_H_