A reimplementation of Mario Kart Wii's physics engine in C++
Loading...
Searching...
No Matches
ObjectPress.hh
1#pragma once
2
3#include "game/field/obj/ObjectCollidable.hh"
4
5namespace Field {
6
10public:
12 ~ObjectPress() override;
13
14 void init() override;
15 void calc() override;
16
18 [[nodiscard]] u32 loadFlags() const override {
19 return 1;
20 }
21
22 void loadAnims() override;
23 void createCollision() override;
24
25 [[nodiscard]] f32 getCollisionRadius() const override {
26 return 700.0f;
27 }
28
29 Kart::Reaction onCollision(Kart::KartObject *kartObj, Kart::Reaction reactionOnKart,
30 Kart::Reaction reactionOnObj, EGG::Vector3f &hitDepth) override;
31
32 virtual void calcRaised();
33
34protected:
35 enum class State {
36 Raised,
37 WindUp,
38 Lowering,
39 Lowered,
40 Raising,
41 };
42
43 State m_state;
45
46private:
47 void calcWindUp();
48 void calcLowering();
49 void checkCollisionLowering();
50 void calcLowered();
51 void calcRaising();
52
55 u32 m_anmDuration;
56 f32 m_loweringVelocity;
57 f32 m_raisedHeight;
58 f32 m_loweredHeight;
60
61 static constexpr f32 ANM_RATE = 2.0f;
62};
63
66class ObjectPressSenko final : public ObjectPress {
67public:
69 ~ObjectPressSenko() override;
70
72 [[nodiscard]] ObjectId id() const override {
73 return ObjectId::Press;
74 }
75
77 [[nodiscard]] u32 loadFlags() const override {
78 return 1;
79 }
80
82 [[nodiscard]] const char *getResources() const override {
83 return "Press";
84 }
85
87 [[nodiscard]] const char *getKclName() const override {
88 return "Press";
89 }
90
91 void calcRaised() override;
92
93 void setWindup(bool isSet) {
94 m_startingWindup = isSet;
95 }
96
97private:
98 void startWindup();
99
100 bool m_startingWindup;
101};
102
103} // namespace Field
The stompers on the left and right side of the first TF factory room.
Represents the Toad's Factory stompers.
Definition ObjectPress.hh:9
@ Lowering
Stomping down.
@ WindUp
Rising up a bit before stomping down.
@ Lowered
Contacting the floor.
u32 m_windUpTimer
Number of frames remaining in windup state.
bool m_startedLowered
Used to induce crush effect even if it hit floor this frame.
u32 m_raisedTimer
Number of frames remaining in raised state.
f32 getCollisionRadius() const override
Finds the radius that fits fully in a BoxColUnit.
bool m_startingRise
Used to delay state change by 1 frame.
The highest level abstraction for a kart.
Definition KartObject.hh:11
Pertains to collision.
A 3D float vector.
Definition Vector.hh:87