1#include "ObjectVolcanoBall.hh"
6ObjectVolcanoBall::ObjectVolcanoBall(f32 accel, f32 finalVel, f32 endPosY,
8 : ObjectCollidable(params), StateManager(this, STATE_ENTRIES),
9 m_burnDuration(params.setting(3)), m_accel(accel), m_finalVel(finalVel), m_endPosY(endPosY),
10 m_sqVelXZ(vel.x * vel.x + vel.z * vel.z) {}
13ObjectVolcanoBall::~ObjectVolcanoBall() =
default;
16void ObjectVolcanoBall::init() {
17 m_railInterpolator->init(0.0f, 0);
18 m_pos = m_railInterpolator->curPos();
19 m_flags.setBit(eFlags::Position);
23void ObjectVolcanoBall::calcFalling() {
24 f32 sqVel = std::max(0.01f, m_finalVel - 2.0f * m_accel * (m_pos.y - m_endPosY));
25 m_railInterpolator->setCurrVel(EGG::Mathf::sqrt(m_sqVelXZ + sqVel));
27 if (m_railInterpolator->calc() == RailInterpolator::Status::ChangingDirection) {
31 if (EGG::Mathf::abs(tangent.y) > 0.1f) {
36 setMatrixFromOrthonormalBasisAndPos(tangent);
38 m_pos = m_railInterpolator->curPos();
39 m_flags.setBit(eFlags::Position);