21 [[nodiscard]] u32 loadFlags()
const override {
26 [[nodiscard]] f32 getCollisionRadius()
const override {
27 return 245.0f *
static_cast<f32
>(m_mapObj->setting(2));
31 [[nodiscard]]
const EGG::Matrix34f &getUpdatedMatrix(u32 )
override {
33 m_workMatrix = m_transform;
37 [[nodiscard]] f32 getScaleY(u32 timeOffset)
const override;
38 [[nodiscard]]
bool checkCollision(f32 radius,
const EGG::Vector3f &pos,
40 KCLTypeMask *maskOut, u32 timeOffset)
override;
41 [[nodiscard]]
bool checkCollisionCached(f32 radius,
const EGG::Vector3f &pos,
43 KCLTypeMask *maskOut, u32 timeOffset)
override;
47 void enterExpanding() {
51 void enterEruptingUp();
54 void enterEruptingStay() {
55 m_scaledHeight = m_initScaledHeight;
59 void enterEruptingDown() {
65 m_pole->setActive(
false);
66 m_pole->disableCollision();
73 void calcExpanding() {}
75 void calcEruptingUp();
76 void calcEruptingStay();
79 void calcEruptingDown() {
81 m_scaledHeight -
m_scaleDelta *
static_cast<f32
>(m_cycleFrame - m_stateStart[3]);
97 s32 m_eruptUpDuration;
98 s32 m_eruptDownDuration;
99 std::array<s32, 6> m_stateStart;
101 f32 m_initScaledHeight;
109 static u32 FLAMEPOLE_COUNT;
111 static constexpr std::array<StateManagerEntry, 6> STATE_ENTRIES = {{
113 &ObjectFlamePoleFoot::calcExpanding>(0)},
115 &ObjectFlamePoleFoot::calcEruptingUp>(1)},
117 &ObjectFlamePoleFoot::calcEruptingStay>(2)},
119 &ObjectFlamePoleFoot::calcEruptingDown>(3)},
121 &ObjectFlamePoleFoot::calcDormant>(4)},
123 &ObjectFlamePoleFoot::calcState5>(5)},
126 static constexpr u32 CYCLE_FRAMES = 540;