A reimplementation of Mario Kart Wii's physics engine in C++
Loading...
Searching...
No Matches
ObjectCarTGE.hh
1
2
3#pragma once
4
5#include "game/field/StateManager.hh"
6#include "game/field/obj/ObjectCollidable.hh"
7
8namespace Field {
9
10class ObjectCarTGE;
11class ObjectHighwayManager;
12
13template <>
14class StateManager<ObjectCarTGE> : public StateManagerBase<ObjectCarTGE> {
15public:
17 ~StateManager() override;
18
19private:
20 static const std::array<StateManagerEntry<ObjectCarTGE>, 3> STATE_ENTRIES;
21};
22
23class ObjectCarTGE : public ObjectCollidable, public StateManager<ObjectCarTGE> {
25
26public:
27 enum class CarType {
28 Normal = 0,
29 Truck = 1,
30 BombCar = 2,
31 };
32
34 ~ObjectCarTGE() override;
35
36 void init() override;
37 void calc() override;
38
40 [[nodiscard]] u32 loadFlags() const override {
41 return 1;
42 }
43
45 [[nodiscard]] const char *getResources() const override {
46 return m_carName;
47 }
48
50 [[nodiscard]] const char *getKclName() const override {
51 return m_mdlName;
52 }
53
54 void createCollision() override;
55 void calcCollisionTransform() override;
56 [[nodiscard]] f32 getCollisionRadius() const override;
57 Kart::Reaction onCollision(Kart::KartObject *kartObj, Kart::Reaction reactionOnKart,
58 Kart::Reaction reactionOnObj, EGG::Vector3f &hitDepth) override;
59 bool checkCollision(ObjectCollisionBase *lhs, EGG::Vector3f &dist) override;
60 [[nodiscard]] const EGG::Vector3f &collisionCenter() const override;
61
62 void setHighwayManager(const ObjectHighwayManager *highwayMgr) {
63 m_highwayMgr = highwayMgr;
64 }
65
67 void reset() {
68 m_squashed = false;
69 }
70
71 [[nodiscard]] bool squashed() const {
72 return m_squashed;
73 }
74
75private:
76 static constexpr f32 TOLL_BOOTH_ACCEL = 200.0f;
77
78 void enterStateStub();
79 void calcStateStub();
80 void calcState1();
81 void calcState2();
82
83 void calcPos();
84
85 const ObjectHighwayManager *m_highwayMgr;
86 ObjectCollisionBase *m_auxCollision;
89 char m_carName[32];
90 char m_mdlName[32];
92 ObjectId m_dummyId;
93 EGG::Vector3f m_scaledTangentDir;
94 f32 m_currSpeed;
95 EGG::Vector3f m_up;
96 EGG::Vector3f m_tangent;
97 bool m_squashed;
98 bool m_hasAuxCollision;
99 f32 m_hitAngle;
100};
101
102} // namespace Field
void calcState1()
The state when cars are speeding up.
f32 m_localVel
Speed while off the highway.
CarType m_carType
Car, truck, or bomb car.
void calcState2()
The state when cars are slowing down.
f32 m_highwayVel
Speed while on the highway.
@ BombCar
Unused in time trials.
The highest level abstraction for a kart.
Definition KartObject.hh:11
Pertains to collision.
A 3D float vector.
Definition Vector.hh:87