1#include "ObjectWLWallGC.hh"
3#include "game/system/RaceManager.hh"
8ObjectWLWallGC::ObjectWLWallGC(
const System::MapdataGeoObj ¶ms) :
ObjectKCL(params) {
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 - transform().base(2) *
static_cast<f32
>(distance);
35 m_currTransform = transform();
39ObjectWLWallGC::~ObjectWLWallGC() =
default;
42void ObjectWLWallGC::init() {
45 m_currTransform = transform();
49void ObjectWLWallGC::calc() {
50 EGG::Vector3f prevPos = pos();
51 setTransform(getUpdatedMatrix(0));
52 setMovingObjVel(pos() - prevPos);
56const EGG::Matrix34f &ObjectWLWallGC::getUpdatedMatrix(u32 timeOffset) {
57 s32 time = cycleFrame(System::RaceManager::Instance()->timer() - timeOffset);
60 if (time < m_hiddenDuration) {
62 }
else if (time < m_extendedFrame) {
63 t =
static_cast<f32
>(time - m_hiddenDuration) /
static_cast<f32
>(m_moveDuration);
64 }
else if (time < m_retractingFrame) {
67 t = 1.0f -
static_cast<f32
>(time - m_retractingFrame) /
static_cast<f32
>(m_moveDuration);
70 m_currTransform.setBase(3, Interpolate(t, m_initialPos, m_targetPos));
72 return m_currTransform;
76bool ObjectWLWallGC::checkCollision(f32 radius,
const EGG::Vector3f &pos,
77 const EGG::Vector3f &prevPos, KCLTypeMask mask, CollisionInfo *info, KCLTypeMask *maskOut,
80 calcScale(timeOffset);
82 return m_objColMgr->checkSphereFullPush(radius, pos, prevPos, mask, info, maskOut);
86bool ObjectWLWallGC::checkCollisionCached(f32 radius,
const EGG::Vector3f &pos,
87 const EGG::Vector3f &prevPos, KCLTypeMask mask, CollisionInfo *info, KCLTypeMask *maskOut,
90 calcScale(timeOffset);
92 return m_objColMgr->checkSphereCachedFullPush(radius, pos, prevPos, mask, info, maskOut);