1#include "ObjectWLWallGC.hh"
3#include "game/system/RaceManager.hh"
9 m_extendedDuration = params.setting(1);
10 m_startFrame = params.setting(4);
11 u32 rate = params.setting(2);
12 u16 distance = params.setting(3);
16 m_hiddenDuration = -1;
18 m_retractingFrame = -1;
21 m_moveDuration = distance / rate;
22 m_hiddenDuration = params.setting(0);
23 m_extendedFrame = m_hiddenDuration + m_moveDuration;
24 m_retractingFrame = m_extendedFrame + m_extendedDuration;
25 m_cycleDuration = m_retractingFrame + m_moveDuration;
32 m_targetPos = m_initialPos - m_transform.base(2) *
static_cast<f32
>(distance);
35 m_currTransform = m_transform;
39ObjectWLWallGC::~ObjectWLWallGC() =
default;
42void ObjectWLWallGC::init() {
47 m_currTransform = m_transform;
51void ObjectWLWallGC::calc() {
55 m_transform = getUpdatedMatrix(0);
56 m_pos = m_transform.base(3);
58 setMovingObjVel(m_pos - prevPos);
63 s32 time = cycleFrame(System::RaceManager::Instance()->timer() - timeOffset);
66 if (time < m_hiddenDuration) {
68 }
else if (time < m_extendedFrame) {
69 t =
static_cast<f32
>(time - m_hiddenDuration) /
static_cast<f32
>(m_moveDuration);
70 }
else if (time < m_retractingFrame) {
73 t = 1.0f -
static_cast<f32
>(time - m_retractingFrame) /
static_cast<f32
>(m_moveDuration);
76 m_currTransform.setBase(3, Interpolate(t, m_initialPos, m_targetPos));
78 return m_currTransform;
82bool ObjectWLWallGC::checkCollision(f32 radius,
const EGG::Vector3f &pos,
83 const EGG::Vector3f &prevPos, KCLTypeMask mask, CollisionInfo *info, KCLTypeMask *maskOut,
86 calcScale(timeOffset);
88 return m_objColMgr->checkSphereFullPush(radius, pos, prevPos, mask, info, maskOut);
92bool ObjectWLWallGC::checkCollisionCached(f32 radius,
const EGG::Vector3f &pos,
93 const EGG::Vector3f &prevPos, KCLTypeMask mask, CollisionInfo *info, KCLTypeMask *maskOut,
96 calcScale(timeOffset);
98 return m_objColMgr->checkSphereCachedFullPush(radius, pos, prevPos, mask, info, maskOut);