A reimplementation of Mario Kart Wii's physics engine in C++
Loading...
Searching...
No Matches
CourseColMgr.hh
1#pragma once
2
3#include "game/field/KColData.hh"
4
5#include <egg/math/BoundBox.hh>
6#include <egg/math/Matrix.hh>
7
8// Credit: em-eight/mkw
9
10namespace Kinoko {
11
12namespace Host {
13
14class Context;
15
16} // namespace Host
17
18namespace Field {
19
20typedef bool (
21 KColData::*CollisionCheckFunc)(f32 *distOut, EGG::Vector3f *fnrmOut, u16 *attributeOut);
22
27 friend class Host::Context;
28
29public:
31 EGG::BoundBox3f bbox;
32 EGG::Vector3f tangentOff;
33 f32 dist;
34 EGG::Vector3f fnrm;
35 };
36 STATIC_ASSERT(sizeof(NoBounceWallColInfo) == 0x34);
37
38 void init();
39
40 void scaledNarrowScopeLocal(f32 scale, f32 radius, KColData *data, const EGG::Vector3f &pos,
41 KCLTypeMask mask);
42
43 [[nodiscard]] bool checkPointPartial(f32 scale, KColData *data, const EGG::Vector3f &pos,
44 const EGG::Vector3f &prevPos, KCLTypeMask mask, CollisionInfoPartial *info,
45 KCLTypeMask *maskOut);
46 [[nodiscard]] bool checkPointPartialPush(f32 scale, KColData *data, const EGG::Vector3f &pos,
47 const EGG::Vector3f &prevPos, KCLTypeMask mask, CollisionInfoPartial *info,
48 KCLTypeMask *maskOut);
49 [[nodiscard]] bool checkPointFull(f32 kclScale, KColData *data, const EGG::Vector3f &pos,
50 const EGG::Vector3f &prevPos, KCLTypeMask mask, CollisionInfo *info,
51 KCLTypeMask *maskOut);
52 [[nodiscard]] bool checkPointFullPush(f32 kclScale, KColData *data, const EGG::Vector3f &pos,
53 const EGG::Vector3f &prevPos, KCLTypeMask mask, CollisionInfo *info,
54 KCLTypeMask *maskOut);
55
56 [[nodiscard]] bool checkSpherePartial(f32 scale, f32 radius, KColData *data,
57 const EGG::Vector3f &pos, const EGG::Vector3f &prevPos, KCLTypeMask mask,
58 CollisionInfoPartial *info, KCLTypeMask *maskOut);
59 [[nodiscard]] bool checkSpherePartialPush(f32 scale, f32 radius, KColData *data,
60 const EGG::Vector3f &pos, const EGG::Vector3f &prevPos, KCLTypeMask mask,
61 CollisionInfoPartial *info, KCLTypeMask *maskOut);
62 [[nodiscard]] bool checkSphereFull(f32 scale, f32 radius, KColData *data,
63 const EGG::Vector3f &pos, const EGG::Vector3f &prevPos, KCLTypeMask mask,
64 CollisionInfo *info, KCLTypeMask *maskOut);
65 [[nodiscard]] bool checkSphereFullPush(f32 scale, f32 radius, KColData *data,
66 const EGG::Vector3f &pos, const EGG::Vector3f &prevPos, KCLTypeMask mask,
67 CollisionInfo *info, KCLTypeMask *maskOut);
68
69 [[nodiscard]] bool checkPointCachedPartial(f32 scale, KColData *data, const EGG::Vector3f &pos,
70 const EGG::Vector3f &prevPos, KCLTypeMask mask, CollisionInfoPartial *info,
71 KCLTypeMask *maskOut);
72 [[nodiscard]] bool checkPointCachedPartialPush(f32 scale, KColData *data,
73 const EGG::Vector3f &pos, const EGG::Vector3f &prevPos, KCLTypeMask mask,
74 CollisionInfoPartial *info, KCLTypeMask *maskOut);
75 [[nodiscard]] bool checkPointCachedFull(f32 scale, KColData *data, const EGG::Vector3f &pos,
76 const EGG::Vector3f &prevPos, KCLTypeMask mask, CollisionInfo *info,
77 KCLTypeMask *maskOut);
78 [[nodiscard]] bool checkPointCachedFullPush(f32 scale, KColData *data, const EGG::Vector3f &pos,
79 const EGG::Vector3f &prevPos, KCLTypeMask mask, CollisionInfo *info,
80 KCLTypeMask *maskOut);
81
82 [[nodiscard]] bool checkSphereCachedPartial(f32 scale, f32 radius, KColData *data,
83 const EGG::Vector3f &pos, const EGG::Vector3f &prevPos, KCLTypeMask typeMask,
84 CollisionInfoPartial *info, KCLTypeMask *maskOut);
85 [[nodiscard]] bool checkSphereCachedPartialPush(f32 scale, f32 radius, KColData *data,
86 const EGG::Vector3f &pos, const EGG::Vector3f &prevPos, KCLTypeMask typeMask,
87 CollisionInfoPartial *info, KCLTypeMask *maskOut);
88 [[nodiscard]] bool checkSphereCachedFull(f32 scale, f32 radius, KColData *data,
89 const EGG::Vector3f &pos, const EGG::Vector3f &prevPos, KCLTypeMask typeMask,
90 CollisionInfo *colInfo, KCLTypeMask *maskOut);
91 [[nodiscard]] bool checkSphereCachedFullPush(f32 scale, f32 radius, KColData *data,
92 const EGG::Vector3f &pos, const EGG::Vector3f &prevPos, KCLTypeMask typeMask,
93 CollisionInfo *colInfo, KCLTypeMask *maskOut);
94
96 void setNoBounceWallInfo(NoBounceWallColInfo *info) {
97 m_noBounceWallInfo = info;
98 }
99
100 void clearNoBounceWallInfo() {
101 m_noBounceWallInfo = nullptr;
102 }
103
104 void setLocalMtx(EGG::Matrix34f *mtx) {
105 m_localMtx = mtx;
106 }
108
110 [[nodiscard]] const KColData *data() const {
111 return m_data;
112 }
113
114 [[nodiscard]] NoBounceWallColInfo *noBounceWallInfo() const {
115 return m_noBounceWallInfo;
116 }
118
119 static void *LoadFile(const char *filename);
120
121 static CourseColMgr *CreateInstance();
122 static void DestroyInstance();
123
124 [[nodiscard]] static CourseColMgr *Instance() {
125 return s_instance;
126 }
127
128private:
129 CourseColMgr();
130 ~CourseColMgr() override;
131
132 [[nodiscard]] bool doCheckWithPartialInfo(KColData *data, CollisionCheckFunc collisionCheckFunc,
133 CollisionInfoPartial *info, KCLTypeMask *typeMask);
134 [[nodiscard]] bool doCheckWithPartialInfoPush(KColData *data,
135 CollisionCheckFunc collisionCheckFunc, CollisionInfoPartial *info,
136 KCLTypeMask *typeMask);
137 [[nodiscard]] bool doCheckWithFullInfo(KColData *data, CollisionCheckFunc collisionCheckFunc,
138 CollisionInfo *colInfo, KCLTypeMask *flagsOut);
139 [[nodiscard]] bool doCheckWithFullInfoPush(KColData *data,
140 CollisionCheckFunc collisionCheckFunc, CollisionInfo *colInfo, KCLTypeMask *flagsOut);
141 [[nodiscard]] bool doCheckMaskOnly(KColData *data, CollisionCheckFunc collisionCheckFunc,
142 KCLTypeMask *maskOut);
143 [[nodiscard]] bool doCheckMaskOnlyPush(KColData *data, CollisionCheckFunc collisionCheckFunc,
144 KCLTypeMask *maskOut);
145
146 KColData *m_data;
147 f32 m_kclScale;
148 NoBounceWallColInfo *m_noBounceWallInfo;
149 EGG::Matrix34f *m_localMtx;
150
151 static CourseColMgr *s_instance;
152};
153
154} // namespace Field
155
156} // namespace Kinoko
An interface for ensuring certain structures and classes are destroyed with the heap.
Definition Disposer.hh:11
A 3 x 4 matrix.
Definition Matrix.hh:10
Manager for course KCL interactions.
static void * LoadFile(const char *filename)
Loads a particular section of a .szs file.
Performs lookups for KCL triangles.
Definition KColData.hh:63
Contexts can be used to restore a previous memory state for the current session.
Definition Context.hh:71
A representation of a bounding cuboid.
Definition BoundBox.hh:37
A 3D float vector.
Definition Vector.hh:107