1#include "game/field/obj/ObjectKoopaFigure64.hh"
3#include "game/field/ObjectDirector.hh"
5#include "game/system/RaceManager.hh"
11 : ObjectCollidable(params), m_isBigStatue(params.setting(1) == 1),
12 m_startDelay(static_cast<u32>(params.setting(2))) {}
15ObjectKoopaFigure64::~ObjectKoopaFigure64() =
default;
18void ObjectKoopaFigure64::init() {
19 constexpr f32 BIG_SCALE = 20.0f;
22 const auto &flowTable = ObjectDirector::Instance()->flowTable();
23 const auto *collisionSet = flowTable.set(flowTable.slot(
id()));
25 s16 radius = parse<s16>(collisionSet->params.cylinder.radius);
26 resize(BIG_SCALE *
static_cast<f32
>(radius), 0.0f);
29 m_cycleFrame = FIRE_DURATION + COOLDOWN_DURATION;
37void ObjectKoopaFigure64::calc() {
38 u32 timer = System::RaceManager::Instance()->timer();
39 if (timer < m_startDelay) {
43 bool endOfCycle = CYCLE_DURATION == m_cycleFrame;
52 if (m_cycleFrame >= FIRE_DURATION && !endOfCycle && m_isBigStatue) {
60void ObjectKoopaFigure64::calcCollisionTransform() {
65 rotMat.
setBase(3, EGG::Vector3f::zero);
68 targetMat.
setBase(3, FIRE_POS_OFFSET);
Matrix34f multiplyTo(const Matrix34f &rhs) const
Multiplies two matrices.
void setBase(size_t col, const Vector3f &base)
Sets one column of a matrix.