3#include "game/field/StateManager.hh"
4#include "game/field/obj/ObjectCollidable.hh"
6#include "game/kart/KartCollide.hh"
7#include "game/kart/KartObject.hh"
11class ObjectHwanwan :
public ObjectCollidable,
public StateManager {
12 friend class ObjectHwanwanManager;
15 ObjectHwanwan(
const System::MapdataGeoObj ¶ms);
16 ~ObjectHwanwan()
override;
22 [[nodiscard]] u32 loadFlags()
const override {
27 [[nodiscard]]
const char *getKclName()
const override {
32 void loadRail()
override {}
35 Kart::Reaction onCollision(Kart::KartObject *kartObj, Kart::Reaction reactionOnKart,
36 Kart::Reaction , EGG::Vector3f & )
override {
37 return kartObj->speedRatioCapped() < 0.5f ? Kart::Reaction::WallAllSpeed : reactionOnKart;
49 if (m_touchingGround) {
50 m_bounceVel += EGG::Vector3f::ey * 12.0f;
57 void checkFloorCollision();
60 const EGG::Vector3f m_initPos;
61 EGG::Vector3f m_workPos;
62 EGG::Vector3f m_extVel;
63 EGG::Vector3f m_bounceVel;
64 EGG::Vector3f m_tangent;
66 EGG::Vector3f m_targetUp;
67 bool m_touchingGround;
71 static constexpr f32 DIAMETER = 400.0f;
72 static constexpr EGG::Vector3f GRAVITY = EGG::Vector3f(0.0f, 2.5f, 0.0f);
74 static constexpr std::array<StateManagerEntry, 2> STATE_ENTRIES = {{
75 {StateEntry<ObjectHwanwan, &ObjectHwanwan::enterState0, &ObjectHwanwan::calcState0>(0)},
76 {StateEntry<ObjectHwanwan, &ObjectHwanwan::enterState1, &ObjectHwanwan::calcState1>(1)},
80class ObjectHwanwanManager :
public ObjectCollidable {
82 ObjectHwanwanManager(
const System::MapdataGeoObj ¶ms);
83 ~ObjectHwanwanManager()
override;
89 [[nodiscard]] u32 loadFlags()
const override {
94 void loadGraphics()
override {}
97 void createCollision()
override {}
102 ObjectHwanwan *m_hwanwan;