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/Status.hh"
4
6
7#include "game/system/KPadController.hh"
8
9#include <egg/math/Matrix.hh>
10
11#include <list>
12#include <vector>
13
14namespace Field {
15
16class BoxColUnit;
17class ObjectCollisionKart;
18
19} // namespace Field
20
21namespace Render {
22
23class KartModel;
24
25} // namespace Render
26
27namespace Kart {
28
29class CollisionGroup;
30struct CollisionData;
31class KartAction;
32class KartBody;
33class KartCollide;
34class KartDynamics;
35class KartHalfPipe;
36class KartJump;
37class KartMove;
38class KartParam;
39struct BSP;
40class KartPhysics;
41class KartScale;
42class KartState;
43class KartSub;
44class KartSuspension;
45class KartSuspensionPhysics;
46class KartTire;
47class WheelPhysics;
48
51 KartParam *param;
52 KartBody *body;
53 Render::KartModel *model;
54 KartSub *sub;
55 KartMove *move;
56 KartAction *action;
57 KartCollide *collide;
58 Field::ObjectCollisionKart *objectCollisionKart;
59 KartState *state;
60
61 std::vector<KartSuspension *> suspensions;
62 std::vector<KartTire *> tires;
63
64 Field::BoxColUnit *boxColUnit;
65};
66
70 friend class KartObject;
71
72public:
75
77 void setPos(const EGG::Vector3f &pos);
78 void setRot(const EGG::Quatf &q);
79 void setInertiaScale(const EGG::Vector3f &scale);
81
83 [[nodiscard]] KartAction *action();
84 [[nodiscard]] const KartAction *action() const;
85 [[nodiscard]] KartBody *body();
86 [[nodiscard]] const KartBody *body() const;
87 [[nodiscard]] KartCollide *collide();
88 [[nodiscard]] const KartCollide *collide() const;
89 [[nodiscard]] CollisionGroup *collisionGroup();
90 [[nodiscard]] const CollisionGroup *collisionGroup() const;
91 [[nodiscard]] KartMove *move();
92 [[nodiscard]] const KartMove *move() const;
93 [[nodiscard]] KartHalfPipe *halfPipe();
94 [[nodiscard]] const KartHalfPipe *halfPipe() const;
95 [[nodiscard]] KartScale *kartScale();
96 [[nodiscard]] const KartScale *kartScale() const;
97 [[nodiscard]] KartJump *jump();
98 [[nodiscard]] const KartJump *jump() const;
99 [[nodiscard]] KartParam *param();
100 [[nodiscard]] const KartParam *param() const;
101 [[nodiscard]] const BSP &bsp() const;
102 [[nodiscard]] KartPhysics *physics();
103 [[nodiscard]] const KartPhysics *physics() const;
104 [[nodiscard]] KartDynamics *dynamics();
105 [[nodiscard]] const KartDynamics *dynamics() const;
106 [[nodiscard]] KartState *state();
107 [[nodiscard]] const KartState *state() const;
108 [[nodiscard]] KartSub *sub();
109 [[nodiscard]] const KartSub *sub() const;
110 [[nodiscard]] KartSuspension *suspension(u16 suspIdx);
111 [[nodiscard]] const KartSuspension *suspension(u16 suspIdx) const;
112 [[nodiscard]] KartSuspensionPhysics *suspensionPhysics(u16 suspIdx);
113 [[nodiscard]] const KartSuspensionPhysics *suspensionPhysics(u16 suspIdx) const;
114 [[nodiscard]] KartTire *tire(u16 tireIdx);
115 [[nodiscard]] const KartTire *tire(u16 tireIdx) const;
116 [[nodiscard]] WheelPhysics *tirePhysics(u16 tireIdx);
117 [[nodiscard]] const WheelPhysics *tirePhysics(u16 tireIdx) const;
118 [[nodiscard]] CollisionData &collisionData();
119 [[nodiscard]] const CollisionData &collisionData() const;
120 [[nodiscard]] CollisionData &collisionData(u16 tireIdx);
121 [[nodiscard]] const CollisionData &collisionData(u16 tireIdx) const;
122 [[nodiscard]] const System::KPad *inputs() const;
123 [[nodiscard]] Render::KartModel *model();
124 [[nodiscard]] const Render::KartModel *model() const;
125 [[nodiscard]] Field::ObjectCollisionKart *objectCollisionKart();
126 [[nodiscard]] const Field::ObjectCollisionKart *objectCollisionKart() const;
127 [[nodiscard]] Field::BoxColUnit *boxColUnit();
128 [[nodiscard]] const Field::BoxColUnit *boxColUnit() const;
129
130 [[nodiscard]] const EGG::Vector3f &scale() const;
131 [[nodiscard]] const EGG::Matrix34f &pose() const;
132 [[nodiscard]] EGG::Vector3f bodyFront() const;
133 [[nodiscard]] EGG::Vector3f bodyForward() const;
134 [[nodiscard]] EGG::Vector3f bodyUp() const;
135
136 [[nodiscard]] const EGG::Vector3f &componentXAxis() const;
137 [[nodiscard]] const EGG::Vector3f &componentYAxis() const;
138 [[nodiscard]] const EGG::Vector3f &componentZAxis() const;
139
140 [[nodiscard]] const EGG::Vector3f &pos() const;
141 [[nodiscard]] const EGG::Vector3f &prevPos() const;
142 [[nodiscard]] const EGG::Quatf &fullRot() const;
143 [[nodiscard]] const EGG::Vector3f &extVel() const;
144 [[nodiscard]] const EGG::Vector3f &intVel() const;
145 [[nodiscard]] const EGG::Vector3f &velocity() const;
146 [[nodiscard]] f32 speed() const;
147 [[nodiscard]] f32 acceleration() const;
148 [[nodiscard]] f32 softSpeedLimit() const;
149 [[nodiscard]] const EGG::Quatf &mainRot() const;
150 [[nodiscard]] const EGG::Vector3f &angVel2() const;
151 [[nodiscard]] bool isBike() const;
152 [[nodiscard]] u16 suspCount() const;
153 [[nodiscard]] u16 tireCount() const;
154 [[nodiscard]] bool hasFloorCollision(const WheelPhysics *wheelPhysics) const;
155 [[nodiscard]] std::pair<EGG::Vector3f, EGG::Vector3f> getCannonPosRot();
156 [[nodiscard]] f32 speedRatio() const;
157 [[nodiscard]] f32 speedRatioCapped() const;
158 [[nodiscard]] bool isInRespawn() const;
159 [[nodiscard]] Field::KCLTypeMask wallKclType() const;
160 [[nodiscard]] u32 wallKclVariant() const;
161 [[nodiscard]] Status &status();
162 [[nodiscard]] const Status &status() const;
163 [[nodiscard]] const EGG::Vector3f &wheelPos(u16 idx) const;
164 [[nodiscard]] const EGG::Vector3f &wheelEdgePos(u16 idx) const;
165
166 [[nodiscard]] static std::list<KartObjectProxy *> &proxyList() {
167 return s_proxyList;
168 }
170
171protected:
172 void apply(size_t idx);
173
174private:
175 static void ApplyAll(const KartAccessor *pointers);
176
177 const KartAccessor *m_accessor;
178
179 static std::list<KartObjectProxy *> s_proxyList;
180};
181
182} // namespace Kart
A 3 x 4 matrix.
Definition Matrix.hh:8
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
Base class for most kart-related objects.
EGG::Vector3f bodyUp() const
Returns the second column of the rotation matrix, which is the "up" direction.
static void ApplyAll(const KartAccessor *pointers)
For all proxies in the static list, synchronizes all pointers to the KartAccessor.
EGG::Vector3f bodyForward() const
Returns the first column of the rotation matrix, which is the "right" direction.
static std::list< KartObjectProxy * > s_proxyList
List of all KartObjectProxy children.
EGG::Vector3f bodyFront() const
Returns the third column of the rotation matrix, which is the facing vector.
The highest level abstraction for a kart.
Definition KartObject.hh:11
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:88
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.