1#include "ObjectSandcone.hh"
3#include "game/system/RaceManager.hh"
9 m_flowRate =
static_cast<f32
>(params.setting(0)) / 100.0f;
10 m_finalHeightDelta =
static_cast<f32
>(params.setting(1));
11 m_startFrame = params.setting(2);
12 m_baseMtx.makeRT(m_rot, m_pos);
16ObjectSandcone::~ObjectSandcone() =
default;
19void ObjectSandcone::init() {
20 m_duration = m_finalHeightDelta / m_flowRate;
21 m_currentMtx = m_baseMtx;
24 m_finalPos = m_pos + EGG::Vector3f::ey * (
static_cast<f32
>(m_duration) * m_flowRate);
28void ObjectSandcone::calc() {
29 m_flags.setBit(eFlags::Matrix);
30 m_transform = getUpdatedMatrix(0);
31 m_pos = m_transform.base(3);
36 m_currentMtx = m_baseMtx;
38 u32 t = System::RaceManager::Instance()->timer() - timeOffset;
40 if (t > m_startFrame + m_duration) {
43 m_currentMtx.setBase(3, m_finalPos);
44 }
else if (t > m_startFrame) {
45 EGG::Vector3f deltaPos = EGG::Vector3f::ey * ((t - m_startFrame) * m_flowRate);
46 m_currentMtx.setBase(3, m_baseMtx.base(3) + deltaPos);
53bool ObjectSandcone::checkCollision(f32 radius,
const EGG::Vector3f &pos,
54 const EGG::Vector3f &prevPos, KCLTypeMask mask, CollisionInfo *info, KCLTypeMask *maskOut,
57 calcScale(timeOffset);
59 return m_objColMgr->checkSphereFullPush(radius, pos, prevPos, mask, info, maskOut);
63bool ObjectSandcone::checkCollisionCached(f32 radius,
const EGG::Vector3f &pos,
64 const EGG::Vector3f &prevPos, KCLTypeMask mask, CollisionInfo *info, KCLTypeMask *maskOut,
67 calcScale(timeOffset);
69 return m_objColMgr->checkSphereCachedFullPush(radius, pos, prevPos, mask, info, maskOut);