-
Notifications
You must be signed in to change notification settings - Fork 0
/
BoundingBox.cs
103 lines (75 loc) · 5 KB
/
BoundingBox.cs
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
using OpenTK.Mathematics;
namespace Blockgame_OpenTK
{
internal class BoundingBox
{
public Vector3 position, dimension, origin;
Vector3 original_position;
Vector3 origin_position;
public Vector3 offset;
public float[] triangles;
public BoundingBox(Vector3 position, Vector3 dimension, Vector3 origin)
{
this.position = position;
this.original_position = position;
this.dimension = dimension;
this.origin = origin;
origin_position = position + origin;
GenerateTriangles();
}
private void GenerateTriangles()
{
triangles = new float[] {
//front
position.X - origin.X, position.Y - origin.Y, (position.Z + dimension.Z) - origin.Z,
(position.X + dimension.X) - origin.X, position.Y - origin.Y, (position.Z + dimension.Z) - origin.Z,
(position.X + dimension.X) - origin.X, (position.Y + dimension.Y) - origin.X, (position.Z + dimension.Z) - origin.Z,
(position.X + dimension.X) - origin.X, (position.Y + dimension.Y) - origin.X, (position.Z + dimension.Z) - origin.Z,
position.X - origin.X, (position.Y + dimension.Y) - origin.Y, (position.Z + dimension.Z) - origin.Z,
position.X - origin.X, position.Y - origin.Y, (position.Z + dimension.Z) - origin.Z,
//right
(position.X + dimension.X) - origin.X, position.Y - origin.Y, (position.Z + dimension.Z) - origin.Z,
(position.X + dimension.X) - origin.X, position.Y - origin.Y, position.Z - origin.Z,
(position.X + dimension.X) - origin.X, (position.Y + dimension.Y) - origin.Y, position.Z - origin.Z,
(position.X + dimension.X) - origin.X, (position.Y + dimension.Y) - origin.Y, position.Z - origin.Z,
(position.X + dimension.X) - origin.X, (position.Y + dimension.Y) - origin.Y, (position.Z + dimension.Z) - origin.Z,
(position.X + dimension.X) - origin.X, position.Y - origin.Y, (position.Z + dimension.Z) - origin.Z,
//back
(position.X + dimension.X) - origin.X, position.Y - origin.Y, position.Z - origin.Z,
position.X - origin.X, position.Y - origin.Y, position.Z - origin.Z,
position.X - origin.X, (position.Y + dimension.Y) - origin.Y, position.Z - origin.Z,
position.X - origin.X, (position.Y + dimension.Y) - origin.Y, position.Z - origin.Z,
(position.X + dimension.X) - origin.X, (position.Y + dimension.Y) - origin.Y, position.Z - origin.Z,
(position.X + dimension.X) - origin.X, position.Y - origin.Y, position.Z - origin.Z,
//left
position.X - origin.X, position.Y - origin.Y, position.Z - origin.Z,
position.X - origin.X, position.Y - origin.Y, (position.Z + dimension.Z) - origin.Z,
position.X - origin.X, (position.Y + dimension.Y) - origin.Y, (position.Z + dimension.Z) - origin.Z,
position.X - origin.X, (position.Y + dimension.Y) - origin.Y, (position.Z + dimension.Z) - origin.Z,
position.X - origin.X, (position.Y + dimension.Y) - origin.Y, position.Z - origin.Z,
position.X - origin.X, position.Y - origin.Y, position.Z - origin.Z,
//top
position.X - origin.X, (position.Y + dimension.Y) - origin.Y, (position.Z + dimension.Z) - origin.Z,
(position.X + dimension.X) - origin.X, (position.Y + dimension.Y) - origin.Y, (position.Z + dimension.Z) - origin.Z,
(position.X + dimension.X) - origin.X, (position.Y + dimension.Y) - origin.Y, position.Z - origin.Z,
(position.X + dimension.X) - origin.X, (position.Y + dimension.Y) - origin.Y, position.Z - origin.Z,
position.X - origin.X, (position.Y + dimension.Y) - origin.Y, position.Z - origin.Z,
position.X - origin.X, (position.Y + dimension.Y) - origin.Y, (position.Z + dimension.Z) - origin.Z,
//bottom
position.X - origin.X, position.Y - origin.Y, position.Z - origin.Z,
(position.X + dimension.X) - origin.X, position.Y - origin.Y, position.Z - origin.Z,
(position.X + dimension.X) - origin.X, position.Y - origin.Y, (position.Z + dimension.Z) - origin.Z,
(position.X + dimension.X) - origin.X, position.Y - origin.Y, (position.Z + dimension.Z) - origin.Z,
position.X - origin.X, position.Y - origin.Y, (position.Z + dimension.Z) - origin.Z,
position.X - origin.X, position.Y - origin.Y, position.Z - origin.Z,
};
}
public void SetOffset(float x, float y, float z)
{
position = original_position + new Vector3(x, y, z);
origin_position = position + origin;
offset = new Vector3(x, y, z);
GenerateTriangles();
}
}
}