A reimplementation of Mario Kart Wii's physics engine in C++
Loading...
Searching...
No Matches
ObjectCarA.hh
1#pragma once
2
3#include "game/field/StateManager.hh"
4#include "game/field/obj/ObjectCollidable.hh"
5
6namespace Field {
7
8class ObjectCarA;
9
10class ObjectCarA : public ObjectCollidable, public StateManager<ObjectCarA> {
12
13public:
14 ObjectCarA(const System::MapdataGeoObj &params);
15 ~ObjectCarA() override;
16
17 void init() override;
18 void calc() override;
19
21 [[nodiscard]] u32 loadFlags() const override {
22 return 1;
23 }
24
25 void createCollision() override;
26 void calcCollisionTransform() override;
27
28 Kart::Reaction onCollision(Kart::KartObject *kartObj, Kart::Reaction reactionOnKart,
29 Kart::Reaction reactionOnObj, EGG::Vector3f &hitDepth) override;
30
31private:
32 // Trapezoidal motion profile
33 enum class MotionState {
34 Accelerating = 0,
35 Cruising = 1,
36 Decelerating = 2,
37 };
38
39 void calcPos();
40
41 void enterStop();
42 void enterAccel() {}
43 void enterCruising();
44
45 void calcStop();
46 void calcAccel();
47 void calcCruising();
48
49 const f32 m_finalVel;
50 const f32 m_accel;
51 const u32 m_stopTime;
55 f32 m_currVel;
56 MotionState m_motionState;
57 bool m_changingDir;
58
59 static constexpr std::array<StateManagerEntry<ObjectCarA>, 3> STATE_ENTRIES = {{
60 {0, &ObjectCarA::enterStop, &ObjectCarA::calcStop},
61 {1, &ObjectCarA::enterAccel, &ObjectCarA::calcAccel},
62 {2, &ObjectCarA::enterCruising, &ObjectCarA::calcCruising},
63 }};
64};
65
66} // namespace Field
EGG::Vector3f m_currTangent
It's EGG::Vector3f::ey unless it flies up in the air.
Definition ObjectCarA.hh:53
f32 m_cruiseTime
How long to spend at cruising speed before decelerating.
Definition ObjectCarA.hh:52
EGG::Vector3f m_currUp
It's EGG::Vector3f::ey unless it flies up in the air.
Definition ObjectCarA.hh:54
The highest level abstraction for a kart.
Definition KartObject.hh:11
Pertains to collision.
A 3D float vector.
Definition Vector.hh:88