A reimplementation of Mario Kart Wii's physics engine in C++
Loading...
Searching...
No Matches
ObjectTruckWagon.hh
1#pragma once
2
3#include "game/field/obj/ObjectCollidable.hh"
4
5#include "game/field/StateManager.hh"
6
7namespace Field {
8
11public:
13 ~ObjectTruckWagonCart() override;
14
16 void init() override {}
17
18 void calc() override;
19
21 [[nodiscard]] const char *getName() const override {
22 return "TruckWagon";
23 }
24
26 [[nodiscard]] u32 loadFlags() const override {
27 return 1;
28 }
29
31 [[nodiscard]] const char *getKclName() const override {
32 return "TruckWagon";
33 }
34
35 void calcCollisionTransform() override;
36 Kart::Reaction onCollision(Kart::KartObject *kartObj, Kart::Reaction reactionOnKart,
37 Kart::Reaction reactionOnObj, EGG::Vector3f &hitDepth) override;
38
40 void setActive(bool isSet) {
41 m_active = isSet;
42 }
43
45 void activate() {
46 reset(0);
47 setActive(true);
48 loadAABB(0.0f);
49 }
50
52 void deactivate() {
53 reset(0);
54 setActive(false);
55 unregisterCollision();
56 m_nextStateId = 0;
57 }
58
59 void reset(u32 idx);
60
61 [[nodiscard]] bool isActive() const {
62 return m_active;
63 }
64
65private:
67 void enterState0() {}
68
70 void enterState1() {}
71
73 void enterState2() {}
74
76 void enterState3() {}
77
78 void calcState0();
79 void calcState1();
80
82 void calcState2() {
83 calcState0();
84 }
85
87 void calcState3() {}
88
89 bool m_active;
90 EGG::Vector3f m_vel;
91 f32 m_speed;
92 EGG::Vector3f m_lastVel;
93 EGG::Vector3f m_up;
94 EGG::Vector3f m_tangent;
95 f32 m_pitch;
96 f32 m_angVel;
97
98 static constexpr std::array<StateManagerEntry, 4> STATE_ENTRIES = {{
99 {StateEntry<ObjectTruckWagonCart, &ObjectTruckWagonCart::enterState0,
100 &ObjectTruckWagonCart::calcState0>(0)},
101 {StateEntry<ObjectTruckWagonCart, &ObjectTruckWagonCart::enterState1,
102 &ObjectTruckWagonCart::calcState1>(1)},
103 {StateEntry<ObjectTruckWagonCart, &ObjectTruckWagonCart::enterState2,
104 &ObjectTruckWagonCart::calcState2>(2)},
105 {StateEntry<ObjectTruckWagonCart, &ObjectTruckWagonCart::enterState3,
106 &ObjectTruckWagonCart::calcState3>(3)},
107 }};
108};
109
114class ObjectTruckWagon final : public ObjectCollidable {
115public:
117 ~ObjectTruckWagon() override;
118
119 void init() override;
120 void calc() override;
121
123 [[nodiscard]] u32 loadFlags() const override {
124 return 3;
125 }
126
128 void loadGraphics() override {}
129
131 void createCollision() override {}
132
134 void loadRail() override {}
135
136private:
137 std::span<ObjectTruckWagonCart *> m_carts;
138 const s32 m_spawn2Frame;
139 const s32 m_cycleDuration;
142};
143
144} // namespace Field
The individual minecarts that spawn from the ObjectTruckWagon spawner.
bool m_active
Whether or not the minecart is spawned and has collision.
The "spawner" for minecarts on Wario's Gold Mine.
const s32 m_spawn2Frame
Frame that the second minecart in a cycle spawns.
s32 m_curCartIdx
Index into m_carts representing the next cart to spawn.
s32 m_cycleFrame
Current frame modulo cycle duration.
const s32 m_cycleDuration
Total duration of a cycle.
Base class that represents different "states" for an object.
The highest level abstraction for a kart.
Definition KartObject.hh:11
Pertains to collision.
A 3D float vector.
Definition Vector.hh:88