A reimplementation of Mario Kart Wii's physics engine in C++
Loading...
Searching...
No Matches
KartObjectProxy.hh
1#pragma once
2
4
5#include "game/system/KPadController.hh"
6
7#include <egg/math/Matrix.hh>
8
9#include <list>
10#include <vector>
11
12namespace Field {
13
14class BoxColUnit;
15class ObjectCollisionKart;
16
17} // namespace Field
18
19namespace Render {
20
21class KartModel;
22
23} // namespace Render
24
25namespace Kart {
26
27class CollisionGroup;
28struct CollisionData;
29class KartAction;
30class KartBody;
31class KartCollide;
32class KartDynamics;
33class KartHalfPipe;
34class KartJump;
35class KartMove;
36class KartParam;
37struct BSP;
38class KartPhysics;
39class KartScale;
40class KartState;
41class KartSub;
42class KartSuspension;
43class KartSuspensionPhysics;
44class KartTire;
45class WheelPhysics;
46
49 KartParam *param;
50 KartBody *body;
51 Render::KartModel *model;
52 KartSub *sub;
53 KartMove *move;
54 KartAction *action;
55 KartCollide *collide;
56 Field::ObjectCollisionKart *objectCollisionKart;
57 KartState *state;
58
59 std::vector<KartSuspension *> suspensions;
60 std::vector<KartTire *> tires;
61
62 Field::BoxColUnit *boxColUnit;
63};
64
68 friend class KartObject;
69
70public:
73
75 void setPos(const EGG::Vector3f &pos);
76 void setRot(const EGG::Quatf &q);
77 void setInertiaScale(const EGG::Vector3f &scale);
79
81 [[nodiscard]] KartAction *action();
82 [[nodiscard]] const KartAction *action() const;
83 [[nodiscard]] KartBody *body();
84 [[nodiscard]] const KartBody *body() const;
85 [[nodiscard]] KartCollide *collide();
86 [[nodiscard]] const KartCollide *collide() const;
87 [[nodiscard]] CollisionGroup *collisionGroup();
88 [[nodiscard]] const CollisionGroup *collisionGroup() const;
89 [[nodiscard]] KartMove *move();
90 [[nodiscard]] const KartMove *move() const;
91 [[nodiscard]] KartHalfPipe *halfPipe();
92 [[nodiscard]] const KartHalfPipe *halfPipe() const;
93 [[nodiscard]] KartScale *kartScale();
94 [[nodiscard]] const KartScale *kartScale() const;
95 [[nodiscard]] KartJump *jump();
96 [[nodiscard]] const KartJump *jump() const;
97 [[nodiscard]] KartParam *param();
98 [[nodiscard]] const KartParam *param() const;
99 [[nodiscard]] const BSP &bsp() const;
100 [[nodiscard]] KartPhysics *physics();
101 [[nodiscard]] const KartPhysics *physics() const;
102 [[nodiscard]] KartDynamics *dynamics();
103 [[nodiscard]] const KartDynamics *dynamics() const;
104 [[nodiscard]] KartState *state();
105 [[nodiscard]] const KartState *state() const;
106 [[nodiscard]] KartSub *sub();
107 [[nodiscard]] const KartSub *sub() const;
108 [[nodiscard]] KartSuspension *suspension(u16 suspIdx);
109 [[nodiscard]] const KartSuspension *suspension(u16 suspIdx) const;
110 [[nodiscard]] KartSuspensionPhysics *suspensionPhysics(u16 suspIdx);
111 [[nodiscard]] const KartSuspensionPhysics *suspensionPhysics(u16 suspIdx) const;
112 [[nodiscard]] KartTire *tire(u16 tireIdx);
113 [[nodiscard]] const KartTire *tire(u16 tireIdx) const;
114 [[nodiscard]] WheelPhysics *tirePhysics(u16 tireIdx);
115 [[nodiscard]] const WheelPhysics *tirePhysics(u16 tireIdx) const;
116 [[nodiscard]] CollisionData &collisionData();
117 [[nodiscard]] const CollisionData &collisionData() const;
118 [[nodiscard]] CollisionData &collisionData(u16 tireIdx);
119 [[nodiscard]] const CollisionData &collisionData(u16 tireIdx) const;
120 [[nodiscard]] const System::KPad *inputs() const;
121 [[nodiscard]] Render::KartModel *model();
122 [[nodiscard]] const Render::KartModel *model() const;
123 [[nodiscard]] Field::ObjectCollisionKart *objectCollisionKart();
124 [[nodiscard]] const Field::ObjectCollisionKart *objectCollisionKart() const;
125 [[nodiscard]] Field::BoxColUnit *boxColUnit();
126 [[nodiscard]] const Field::BoxColUnit *boxColUnit() const;
127
128 [[nodiscard]] const EGG::Vector3f &scale() const;
129 [[nodiscard]] const EGG::Matrix34f &pose() const;
130 [[nodiscard]] EGG::Vector3f bodyFront() const;
131 [[nodiscard]] EGG::Vector3f bodyForward() const;
132 [[nodiscard]] EGG::Vector3f bodyUp() const;
133
134 [[nodiscard]] const EGG::Vector3f &componentXAxis() const;
135 [[nodiscard]] const EGG::Vector3f &componentYAxis() const;
136 [[nodiscard]] const EGG::Vector3f &componentZAxis() const;
137
138 [[nodiscard]] const EGG::Vector3f &pos() const;
139 [[nodiscard]] const EGG::Vector3f &prevPos() const;
140 [[nodiscard]] const EGG::Quatf &fullRot() const;
141 [[nodiscard]] const EGG::Vector3f &extVel() const;
142 [[nodiscard]] const EGG::Vector3f &intVel() const;
143 [[nodiscard]] const EGG::Vector3f &velocity() const;
144 [[nodiscard]] f32 speed() const;
145 [[nodiscard]] f32 acceleration() const;
146 [[nodiscard]] f32 softSpeedLimit() const;
147 [[nodiscard]] const EGG::Quatf &mainRot() const;
148 [[nodiscard]] const EGG::Vector3f &angVel2() const;
149 [[nodiscard]] bool isBike() const;
150 [[nodiscard]] u16 suspCount() const;
151 [[nodiscard]] u16 tireCount() const;
152 [[nodiscard]] bool hasFloorCollision(const WheelPhysics *wheelPhysics) const;
153 [[nodiscard]] std::pair<EGG::Vector3f, EGG::Vector3f> getCannonPosRot();
154 [[nodiscard]] f32 speedRatio() const;
155 [[nodiscard]] f32 speedRatioCapped() const;
156 [[nodiscard]] bool isInRespawn() const;
157 [[nodiscard]] Field::KCLTypeMask wallKclType() const;
158 [[nodiscard]] u32 wallKclVariant() const;
159
160 [[nodiscard]] static std::list<KartObjectProxy *> &proxyList() {
161 return s_proxyList;
162 }
164
165protected:
166 void apply(size_t idx);
167
168private:
169 static void ApplyAll(const KartAccessor *pointers);
170
171 const KartAccessor *m_accessor;
172
173 static std::list<KartObjectProxy *> s_proxyList;
174};
175
176} // 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:18
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:8
Houses various flags and other variables to preserve the kart's state.
Definition KartState.hh:12
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:87
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.