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 Host {
11
12class Context;
13
14} // namespace Host
15
16namespace Field {
17
18typedef bool (
19 KColData::*CollisionCheckFunc)(f32 *distOut, EGG::Vector3f *fnrmOut, u16 *attributeOut);
20
25 friend class Host::Context;
26
27public:
29 EGG::BoundBox3f bbox;
30 EGG::Vector3f tangentOff;
31 f32 dist;
32 EGG::Vector3f fnrm;
33 };
34 STATIC_ASSERT(sizeof(NoBounceWallColInfo) == 0x34);
35
36 void init();
37
38 void scaledNarrowScopeLocal(f32 scale, f32 radius, KColData *data, const EGG::Vector3f &pos,
39 KCLTypeMask mask);
40
41 [[nodiscard]] bool checkPointPartial(f32 scale, KColData *data, const EGG::Vector3f &pos,
42 const EGG::Vector3f &prevPos, KCLTypeMask mask, CollisionInfoPartial *info,
43 KCLTypeMask *maskOut);
44 [[nodiscard]] bool checkPointPartialPush(f32 scale, KColData *data, const EGG::Vector3f &pos,
45 const EGG::Vector3f &prevPos, KCLTypeMask mask, CollisionInfoPartial *info,
46 KCLTypeMask *maskOut);
47 [[nodiscard]] bool checkPointFull(f32 kclScale, KColData *data, const EGG::Vector3f &pos,
48 const EGG::Vector3f &prevPos, KCLTypeMask mask, CollisionInfo *info,
49 KCLTypeMask *maskOut);
50 [[nodiscard]] bool checkPointFullPush(f32 kclScale, KColData *data, const EGG::Vector3f &pos,
51 const EGG::Vector3f &prevPos, KCLTypeMask mask, CollisionInfo *info,
52 KCLTypeMask *maskOut);
53
54 [[nodiscard]] bool checkSpherePartial(f32 scale, f32 radius, KColData *data,
55 const EGG::Vector3f &pos, const EGG::Vector3f &prevPos, KCLTypeMask mask,
56 CollisionInfoPartial *info, KCLTypeMask *maskOut);
57 [[nodiscard]] bool checkSpherePartialPush(f32 scale, f32 radius, KColData *data,
58 const EGG::Vector3f &pos, const EGG::Vector3f &prevPos, KCLTypeMask mask,
59 CollisionInfoPartial *info, KCLTypeMask *maskOut);
60 [[nodiscard]] bool checkSphereFull(f32 scale, f32 radius, KColData *data,
61 const EGG::Vector3f &pos, const EGG::Vector3f &prevPos, KCLTypeMask mask,
62 CollisionInfo *info, KCLTypeMask *maskOut);
63 [[nodiscard]] bool checkSphereFullPush(f32 scale, f32 radius, KColData *data,
64 const EGG::Vector3f &pos, const EGG::Vector3f &prevPos, KCLTypeMask mask,
65 CollisionInfo *info, KCLTypeMask *maskOut);
66
67 [[nodiscard]] bool checkPointCachedPartial(f32 scale, KColData *data, const EGG::Vector3f &pos,
68 const EGG::Vector3f &prevPos, KCLTypeMask mask, CollisionInfoPartial *info,
69 KCLTypeMask *maskOut);
70 [[nodiscard]] bool checkPointCachedPartialPush(f32 scale, KColData *data,
71 const EGG::Vector3f &pos, const EGG::Vector3f &prevPos, KCLTypeMask mask,
72 CollisionInfoPartial *info, KCLTypeMask *maskOut);
73 [[nodiscard]] bool checkPointCachedFull(f32 scale, KColData *data, const EGG::Vector3f &pos,
74 const EGG::Vector3f &prevPos, KCLTypeMask mask, CollisionInfo *info,
75 KCLTypeMask *maskOut);
76 [[nodiscard]] bool checkPointCachedFullPush(f32 scale, KColData *data, const EGG::Vector3f &pos,
77 const EGG::Vector3f &prevPos, KCLTypeMask mask, CollisionInfo *info,
78 KCLTypeMask *maskOut);
79
80 [[nodiscard]] bool checkSphereCachedPartial(f32 scale, f32 radius, KColData *data,
81 const EGG::Vector3f &pos, const EGG::Vector3f &prevPos, KCLTypeMask typeMask,
82 CollisionInfoPartial *info, KCLTypeMask *maskOut);
83 [[nodiscard]] bool checkSphereCachedPartialPush(f32 scale, f32 radius, KColData *data,
84 const EGG::Vector3f &pos, const EGG::Vector3f &prevPos, KCLTypeMask typeMask,
85 CollisionInfoPartial *info, KCLTypeMask *maskOut);
86 [[nodiscard]] bool checkSphereCachedFull(f32 scale, f32 radius, KColData *data,
87 const EGG::Vector3f &pos, const EGG::Vector3f &prevPos, KCLTypeMask typeMask,
88 CollisionInfo *colInfo, KCLTypeMask *maskOut);
89 [[nodiscard]] bool checkSphereCachedFullPush(f32 scale, f32 radius, KColData *data,
90 const EGG::Vector3f &pos, const EGG::Vector3f &prevPos, KCLTypeMask typeMask,
91 CollisionInfo *colInfo, KCLTypeMask *maskOut);
92
94 void setNoBounceWallInfo(NoBounceWallColInfo *info) {
95 m_noBounceWallInfo = info;
96 }
97
98 void clearNoBounceWallInfo() {
99 m_noBounceWallInfo = nullptr;
100 }
101
102 void setLocalMtx(EGG::Matrix34f *mtx) {
103 m_localMtx = mtx;
104 }
106
108 [[nodiscard]] NoBounceWallColInfo *noBounceWallInfo() const {
109 return m_noBounceWallInfo;
110 }
112
113 static void *LoadFile(const char *filename);
114
115 static CourseColMgr *CreateInstance();
116 static void DestroyInstance();
117
118 [[nodiscard]] static CourseColMgr *Instance() {
119 return s_instance;
120 }
121
122private:
123 CourseColMgr();
124 ~CourseColMgr() override;
125
126 [[nodiscard]] bool doCheckWithPartialInfo(KColData *data, CollisionCheckFunc collisionCheckFunc,
127 CollisionInfoPartial *info, KCLTypeMask *typeMask);
128 [[nodiscard]] bool doCheckWithPartialInfoPush(KColData *data,
129 CollisionCheckFunc collisionCheckFunc, CollisionInfoPartial *info,
130 KCLTypeMask *typeMask);
131 [[nodiscard]] bool doCheckWithFullInfo(KColData *data, CollisionCheckFunc collisionCheckFunc,
132 CollisionInfo *colInfo, KCLTypeMask *flagsOut);
133 [[nodiscard]] bool doCheckWithFullInfoPush(KColData *data,
134 CollisionCheckFunc collisionCheckFunc, CollisionInfo *colInfo, KCLTypeMask *flagsOut);
135 [[nodiscard]] bool doCheckMaskOnly(KColData *data, CollisionCheckFunc collisionCheckFunc,
136 KCLTypeMask *maskOut);
137 [[nodiscard]] bool doCheckMaskOnlyPush(KColData *data, CollisionCheckFunc collisionCheckFunc,
138 KCLTypeMask *maskOut);
139
140 KColData *m_data;
141 f32 m_kclScale;
142 NoBounceWallColInfo *m_noBounceWallInfo;
143 EGG::Matrix34f *m_localMtx;
144
145 static CourseColMgr *s_instance;
146};
147
148} // namespace Field
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:8
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:59
Pertains to collision.
Represents the host application.
Definition HeapCommon.hh:9
A representation of a bounding cuboid.
Definition BoundBox.hh:30
A 3D float vector.
Definition Vector.hh:87