A reimplementation of Mario Kart Wii's physics engine in C++
Loading...
Searching...
No Matches
ObjectPenguin.hh
1#pragma once
2
3#include "game/field/obj/ObjectCollidable.hh"
4
5namespace Kinoko::Field {
6
12class ObjectPenguin : public ObjectCollidable {
13public:
14 ObjectPenguin(const System::MapdataGeoObj &params);
15 ~ObjectPenguin() override;
16
17 void init() override;
18
20 void calc() override {
21 if (m_state == State::Walk) {
22 calcWalk();
23 }
24 }
25
27 [[nodiscard]] u32 loadFlags() const override {
28 return 1;
29 }
30
32 virtual void calcWalk() {
33 m_railInterpolator->calc();
34 calcPos();
35 calcRot();
36 }
37
38 void calcRot();
39
41 virtual void calcPos() {
42 setPos(m_railInterpolator->curPos());
43 }
44
45 virtual void enterWalk();
46
47protected:
48 enum class State {
49 Walk = 0,
50 Dive = 1,
51 Slider = 2,
52 SliderSlow = 3,
53 StandUp = 4,
54 };
55
56 State m_state;
57 EGG::Vector3f m_basis;
58};
59
61class ObjectPenguinS final : public ObjectPenguin {
62public:
63 ObjectPenguinS(const System::MapdataGeoObj &params);
64 ~ObjectPenguinS() override;
65
66 void init() override;
67 void calc() override;
68
69 void loadAnims() override;
70
72 void calcWalk() override {
73 calcRail();
74 calcPos();
75 calcRot();
76 }
77
79 void enterWalk() override {
80 m_state = State::Walk;
81 }
82
83private:
85 void calcDive() {
86 calcWalk();
87 }
88
89 void calcSlider();
90 void calcStandUp();
91 void calcRail();
92
93 s32 m_anmTimer;
94};
95
96} // namespace Kinoko::Field
void loadAnims() override
TODO: Maybe not needed.
Pertains to collision.
A 3D float vector.
Definition Vector.hh:107