A reimplementation of Mario Kart Wii's physics engine in C++
Loading...
Searching...
No Matches
ObjectCollisionBox.cc
1#include "ObjectCollisionBox.hh"
2
3namespace Field {
4
6ObjectCollisionBox::ObjectCollisionBox(f32 x, f32 y, f32 z, const EGG::Vector3f &center)
7 : ObjectCollisionConvexHull(8), m_dimensions(x, y, z), m_center(center),
8 m_scale(EGG::Vector3f::unit) {
9 f32 radius = getBoundingRadius();
10 EGG::Vector3f scaledDims = m_dimensions - EGG::Vector3f(radius, radius, radius);
11
12 m_points[0].x = m_center.x + scaledDims.x;
13 m_points[0].y = m_center.y + 2.0f * scaledDims.y;
14 m_points[0].z = m_center.z + scaledDims.z;
15
16 m_points[1].x = m_center.x + scaledDims.x;
17 m_points[1].y = m_center.y + 2.0f * scaledDims.y;
18 m_points[1].z = m_center.z - scaledDims.z;
19
20 m_points[2].x = m_center.x + scaledDims.x;
21 m_points[2].y = m_center.y - 2.0f * scaledDims.y;
22 m_points[2].z = m_center.z + scaledDims.z;
23
24 m_points[3].x = m_center.x - scaledDims.x;
25 m_points[3].y = m_center.y + 2.0f * scaledDims.y;
26 m_points[3].z = m_center.z + scaledDims.z;
27
28 m_points[4].x = m_center.x + scaledDims.x;
29 m_points[4].y = m_center.y - 2.0f * scaledDims.y;
30 m_points[4].z = m_center.z - scaledDims.z;
31
32 m_points[5].x = m_center.x - scaledDims.x;
33 m_points[5].y = m_center.y + 2.0f * scaledDims.y;
34 m_points[5].z = m_center.z - scaledDims.z;
35
36 m_points[6].x = m_center.x - scaledDims.x;
37 m_points[6].y = m_center.y - 2.0f * scaledDims.y;
38 m_points[6].z = m_center.z + scaledDims.z;
39
40 m_points[7].x = m_center.x - scaledDims.x;
41 m_points[7].y = m_center.y - 2.0f * scaledDims.y;
42 m_points[7].z = m_center.z - scaledDims.z;
43}
44
46ObjectCollisionBox::~ObjectCollisionBox() = default;
47
49void ObjectCollisionBox::transform(const EGG::Matrix34f &mat, const EGG::Vector3f &scale,
50 const EGG::Vector3f &speed) {
51 f32 radius = getBoundingRadius();
52 m_scale = scale;
53
54 EGG::Vector3f scaledDims = (m_dimensions * m_scale) - EGG::Vector3f(radius, radius, radius);
55
56 m_points[0].x = m_center.x + scaledDims.x;
57 m_points[0].y = m_center.y + 2.0f * scaledDims.y;
58 m_points[0].z = m_center.z + scaledDims.z;
59
60 m_points[1].x = m_center.x + scaledDims.x;
61 m_points[1].y = m_center.y + 2.0f * scaledDims.y;
62 m_points[1].z = m_center.z - scaledDims.z;
63
64 m_points[2].x = m_center.x + scaledDims.x;
65 m_points[2].y = m_center.y - 2.0f * scaledDims.y;
66 m_points[2].z = m_center.z + scaledDims.z;
67
68 m_points[3].x = m_center.x - scaledDims.x;
69 m_points[3].y = m_center.y + 2.0f * scaledDims.y;
70 m_points[3].z = m_center.z + scaledDims.z;
71
72 m_points[4].x = m_center.x + scaledDims.x;
73 m_points[4].y = m_center.y - 2.0f * scaledDims.y;
74 m_points[4].z = m_center.z - scaledDims.z;
75
76 m_points[5].x = m_center.x - scaledDims.x;
77 m_points[5].y = m_center.y + 2.0f * scaledDims.y;
78 m_points[5].z = m_center.z - scaledDims.z;
79
80 m_points[6].x = m_center.x - scaledDims.x;
81 m_points[6].y = m_center.y - 2.0f * scaledDims.y;
82 m_points[6].z = m_center.z + scaledDims.z;
83
84 m_points[7].x = m_center.x - scaledDims.x;
85 m_points[7].y = m_center.y - 2.0f * scaledDims.y;
86 m_points[7].z = m_center.z - scaledDims.z;
87
88 ObjectCollisionConvexHull::transform(mat, EGG::Vector3f::unit, speed);
89}
90
91} // namespace Field
A 3 x 4 matrix.
Definition Matrix.hh:8
EGG core library.
Definition Archive.cc:6
Pertains to collision.
A 3D float vector.
Definition Vector.hh:87