19class ObjectFireSnake :
public ObjectProjectile,
virtual public StateManager {
22 ~ObjectFireSnake()
override;
28 [[nodiscard]] u32 loadFlags()
const override {
35 void enterDespawned();
37 void enterHighBounce();
40 void enterDespawning() {}
42 void calcDespawned() {}
44 void calcHighBounce();
47 void calcDespawning() {}
61 void calcBounce(f32 initialVel);
63 bool isCollisionEnabled()
const {
64 return m_currentStateId == 2 || m_currentStateId == 3 || m_currentStateId == 4;
67 std::array<ObjectFireSnakeKid *, 2> m_kids;
75 static constexpr std::array<StateManagerEntry, 6> STATE_ENTRIES = {{
76 {StateEntry<ObjectFireSnake, &ObjectFireSnake::enterDespawned,
77 &ObjectFireSnake::calcDespawned>(0)},
78 {StateEntry<ObjectFireSnake, &ObjectFireSnake::enterFalling,
79 &ObjectFireSnake::calcFalling>(1)},
80 {StateEntry<ObjectFireSnake, &ObjectFireSnake::enterHighBounce,
81 &ObjectFireSnake::calcHighBounce>(2)},
82 {StateEntry<ObjectFireSnake, &ObjectFireSnake::enterRest, &ObjectFireSnake::calcRest>(
84 {StateEntry<ObjectFireSnake, &ObjectFireSnake::enterBounce,
85 &ObjectFireSnake::calcBounce>(4)},
86 {StateEntry<ObjectFireSnake, &ObjectFireSnake::enterDespawning,
87 &ObjectFireSnake::calcDespawning>(5)},
90 static constexpr f32 GRAVITY = 3.0f;