1#include "ObjectVolcanoRock.hh"
7 : ObjectKCL(params), m_initialPos(m_pos), m_initialRot(m_rot),
8 m_phaseShift(static_cast<s16>(params.setting(3))),
9 m_zPeriod(std::max<s16>(static_cast<s16>(params.setting(1)), 2)),
10 m_yPeriod(std::max<s16>(static_cast<s16>(params.setting(4)), 2)),
11 m_zAmplitude(static_cast<f32>(static_cast<s16>(params.setting(2)))),
12 m_yAmplitude(static_cast<f32>(static_cast<s16>(params.setting(5)))),
13 m_zAngVel(6.2831855f / static_cast<f32>(m_zPeriod)),
14 m_yAngVel(6.2831855f / static_cast<f32>(m_yPeriod)), m_variant(!!params.setting(0)) {
16 m_flags.setBit(eFlags::Position);
20ObjectVolcanoRock::~ObjectVolcanoRock() =
default;
23void ObjectVolcanoRock::calc() {
25 m_pos = calcPos(System::RaceManager::Instance()->timer());
26 m_flags.setBit(eFlags::Position);
27 setMovingObjVel(m_pos - prevPos);
32 f32 tz =
static_cast<f32
>((frame + m_phaseShift) % m_zPeriod);
33 f32 ty =
static_cast<f32
>(frame % m_yPeriod);
35 auto zDisplacement = EGG::Vector3f::ez *
EGG::Mathf::cos(m_zAngVel * tz) * m_zAmplitude;
36 auto yDisplacement = EGG::Vector3f::ey *
EGG::Mathf::cos(m_yAngVel * ty) * m_yAmplitude;
40 return m_initialPos + m_transform.multVector33(zDisplacement + yDisplacement);