A reimplementation of Mario Kart Wii's physics engine in C++
Loading...
Searching...
No Matches
KartObjectProxy.hh
1#pragma once
2
3#include "game/kart/KartParam.hh"
4#include "game/kart/Status.hh"
5
7
8#include "game/system/KPadController.hh"
9
10#include <egg/core/Allocator.hh>
11#include <egg/math/Matrix.hh>
12
13#include <list>
14#include <vector>
15
16namespace Kinoko {
17
18namespace Field {
19
20class BoxColUnit;
22
23} // namespace Field
24
25namespace Render {
26
27class KartModel;
28
29} // namespace Render
30
31namespace Kart {
32
33class CollisionGroup;
34struct CollisionData;
35class KartAction;
36class KartBody;
37class KartCollide;
38class KartDynamics;
39class KartHalfPipe;
40class KartJump;
41class KartMove;
42class KartParam;
43struct BSP;
44class KartPhysics;
45class KartScale;
46class KartState;
47class KartSub;
48class KartSuspension;
49class KartSuspensionPhysics;
50class KartTire;
51class WheelPhysics;
52
55 KartParam *param;
56 KartBody *body;
57 Render::KartModel *model;
58 KartSub *sub;
59 KartMove *move;
60 KartAction *action;
61 KartCollide *collide;
62 Field::ObjectCollisionKart *objectCollisionKart;
63 KartState *state;
64
65 std::vector<KartSuspension *, EGG::Allocator<KartSuspension *>> suspensions;
66 std::vector<KartTire *, EGG::Allocator<KartTire *>> tires;
67
68 Field::BoxColUnit *boxColUnit;
69};
70
73class KartObjectProxy {
74 friend class KartObject;
75
76public:
77 KartObjectProxy();
78 ~KartObjectProxy();
79
81 void setPos(const EGG::Vector3f &pos);
82 void setRot(const EGG::Quatf &q);
83 void setInertiaScale(const EGG::Vector3f &scale);
85
87 [[nodiscard]] KartAction *action();
88 [[nodiscard]] const KartAction *action() const;
89 [[nodiscard]] KartBody *body();
90 [[nodiscard]] const KartBody *body() const;
91 [[nodiscard]] KartCollide *collide();
92 [[nodiscard]] const KartCollide *collide() const;
93 [[nodiscard]] CollisionGroup *collisionGroup();
94 [[nodiscard]] const CollisionGroup *collisionGroup() const;
95 [[nodiscard]] KartMove *move();
96 [[nodiscard]] const KartMove *move() const;
97 [[nodiscard]] KartHalfPipe *halfPipe();
98 [[nodiscard]] const KartHalfPipe *halfPipe() const;
99 [[nodiscard]] KartScale *kartScale();
100 [[nodiscard]] const KartScale *kartScale() const;
101 [[nodiscard]] KartJump *jump();
102 [[nodiscard]] const KartJump *jump() const;
103 [[nodiscard]] KartParam *param();
104 [[nodiscard]] const KartParam *param() const;
105 [[nodiscard]] const BSP &bsp() const;
106 [[nodiscard]] KartPhysics *physics();
107 [[nodiscard]] const KartPhysics *physics() const;
108 [[nodiscard]] KartDynamics *dynamics();
109 [[nodiscard]] const KartDynamics *dynamics() const;
110 [[nodiscard]] KartState *state();
111 [[nodiscard]] const KartState *state() const;
112 [[nodiscard]] KartSub *sub();
113 [[nodiscard]] const KartSub *sub() const;
114 [[nodiscard]] KartSuspension *suspension(u16 suspIdx);
115 [[nodiscard]] const KartSuspension *suspension(u16 suspIdx) const;
116 [[nodiscard]] KartSuspensionPhysics *suspensionPhysics(u16 suspIdx);
117 [[nodiscard]] const KartSuspensionPhysics *suspensionPhysics(u16 suspIdx) const;
118 [[nodiscard]] KartTire *tire(u16 tireIdx);
119 [[nodiscard]] const KartTire *tire(u16 tireIdx) const;
120 [[nodiscard]] WheelPhysics *tirePhysics(u16 tireIdx);
121 [[nodiscard]] const WheelPhysics *tirePhysics(u16 tireIdx) const;
122 [[nodiscard]] CollisionData &collisionData();
123 [[nodiscard]] const CollisionData &collisionData() const;
124 [[nodiscard]] CollisionData &collisionData(u16 tireIdx);
125 [[nodiscard]] const CollisionData &collisionData(u16 tireIdx) const;
126 [[nodiscard]] const System::KPad *inputs() const;
127 [[nodiscard]] Render::KartModel *model();
128 [[nodiscard]] const Render::KartModel *model() const;
129 [[nodiscard]] Field::ObjectCollisionKart *objectCollisionKart();
130 [[nodiscard]] const Field::ObjectCollisionKart *objectCollisionKart() const;
131 [[nodiscard]] Field::BoxColUnit *boxColUnit();
132 [[nodiscard]] const Field::BoxColUnit *boxColUnit() const;
133
134 [[nodiscard]] const EGG::Vector3f &scale() const;
135 [[nodiscard]] const EGG::Matrix34f &pose() const;
136 [[nodiscard]] EGG::Vector3f bodyFront() const;
137 [[nodiscard]] EGG::Vector3f bodyForward() const;
138 [[nodiscard]] EGG::Vector3f bodyUp() const;
139
140 [[nodiscard]] const EGG::Vector3f &componentXAxis() const;
141 [[nodiscard]] const EGG::Vector3f &componentYAxis() const;
142 [[nodiscard]] const EGG::Vector3f &componentZAxis() const;
143
144 [[nodiscard]] const EGG::Vector3f &pos() const;
145 [[nodiscard]] const EGG::Vector3f &prevPos() const;
146 [[nodiscard]] const EGG::Quatf &fullRot() const;
147 [[nodiscard]] const EGG::Vector3f &extVel() const;
148 [[nodiscard]] const EGG::Vector3f &intVel() const;
149 [[nodiscard]] const EGG::Vector3f &velocity() const;
150 [[nodiscard]] f32 speed() const;
151 [[nodiscard]] f32 acceleration() const;
152 [[nodiscard]] f32 softSpeedLimit() const;
153 [[nodiscard]] const EGG::Quatf &mainRot() const;
154 [[nodiscard]] const EGG::Vector3f &angVel2() const;
155 [[nodiscard]] bool isBike() const;
156 [[nodiscard]] u16 suspCount() const;
157 [[nodiscard]] u16 tireCount() const;
158 [[nodiscard]] bool hasFloorCollision(const WheelPhysics *wheelPhysics) const;
159 [[nodiscard]] std::pair<EGG::Vector3f, EGG::Vector3f> getCannonPosRot();
160 [[nodiscard]] f32 speedRatio() const;
161 [[nodiscard]] f32 speedRatioCapped() const;
162 [[nodiscard]] bool isInRespawn() const;
163 [[nodiscard]] Field::KCLTypeMask wallKclType() const;
164 [[nodiscard]] u32 wallKclVariant() const;
165 [[nodiscard]] Status &status();
166 [[nodiscard]] const Status &status() const;
167 [[nodiscard]] const EGG::Vector3f &wheelPos(u16 idx) const;
168 [[nodiscard]] const EGG::Vector3f &wheelEdgePos(u16 idx) const;
169 [[nodiscard]] f32 cameraDistY() const;
170 [[nodiscard]] s32 hopStickX() const;
171 [[nodiscard]] KartParam::Stats::DriftType vehicleType() const;
172
173 [[nodiscard]] static std::list<KartObjectProxy *, EGG::Allocator<KartObjectProxy *>> &
174 proxyList() {
175 return s_proxyList;
176 }
178
179protected:
180 void apply(size_t idx);
181
182private:
183 static void ApplyAll(const KartAccessor *pointers);
184
185 const KartAccessor *m_accessor;
186
187 static std::list<KartObjectProxy *, EGG::Allocator<KartObjectProxy *>>
189};
190
191} // namespace Kart
192
193} // namespace Kinoko
A 3 x 4 matrix.
Definition Matrix.hh:10
Relates a KartObject with its convex hull representation.
Houses hitbox and collision info for an object (body or wheel).
Manages body+wheel collision and its influence on position/velocity/etc.
State management for most components of a kart's physics.
Handles the physics and boosts associated with zippers.
Manages trick inputs and state.
Definition KartJump.hh:30
Responsible for reacting to player inputs and moving the kart.
Definition KartMove.hh:19
EGG::Vector3f bodyUp() const
Returns the second column of the rotation matrix, which is the "up" direction.
EGG::Vector3f bodyForward() const
Returns the first column of the rotation matrix, which is the "right" direction.
EGG::Vector3f bodyFront() const
Returns the third column of the rotation matrix, which is the facing vector.
static std::list< KartObjectProxy *, EGG::Allocator< KartObjectProxy * > > s_proxyList
List of all KartObjectProxy children.
static void ApplyAll(const KartAccessor *pointers)
For all proxies in the static list, synchronizes all pointers to the KartAccessor.
Houses stats regarding a given character/vehicle combo.
Definition KartParam.hh:51
Manages the lifecycle of KartDynamics, handles moving floors and trick rotation.
Mainly responsible for calculating scaling for the squish/unsquish animation.
Definition KartScale.hh:9
Houses various flags and other variables to preserve the kart's state.
Definition KartState.hh:13
Hosts a few classes and the high level per-frame calc functions.
Definition KartSub.hh:11
Physics for a single wheel's suspension.
Doesn't do much besides hold a pointer to KartSuspensionPhysics.
A holder for a wheel's physics data.
Definition KartTire.hh:9
Manages wheel physics and collision checks.
Included in Kinoko because it mysteriously sets an angle member variable in KartBody.
Definition KartModel.hh:9
Pertains to collision.
Pertains to kart-related functionality.
Pertains to rendering the kart model.
A quaternion, used to represent 3D rotation.
Definition Quat.hh:12
A 3D float vector.
Definition Vector.hh:107
A representation of the boundaries of an entity that has dynamic collision.
Houses hitbox and wheel positions, radii, and suspension info.
Definition KartParam.hh:8
Information about the current collision and its properties.
Shared between classes who inherit KartObjectProxy so they can access one another.
DriftType
The type of drift (inside/outside).
Definition KartParam.hh:89