1#include "ObjectBeltCurveA.hh"
9 m_startForward = params.setting(1) == 1;
10 m_dirChange1Frame = params.setting(2) * 60;
11 m_dirChange2Frame = params.setting(3) * 60;
12 m_initMat.makeR(INITIAL_ROT);
16ObjectBeltCurveA::~ObjectBeltCurveA() =
default;
20 u32 timeOffset)
const {
27 if (timeOffset <= m_dirChange1Frame) {
28 forward = m_startForward;
29 }
else if (timeOffset <= m_dirChange2Frame) {
30 forward = !m_startForward;
32 forward = m_startForward;
36 f32 sign = forward ? 1.0f : -1.0f;
37 return dir * sign * calcDirSwitchVelocity(timeOffset);
38 }
else if (variant == 5) {
39 f32 sign = forward ? -1.0f : 1.0f;
40 return dir * sign * calcDirSwitchVelocity(timeOffset);
42 return EGG::Vector3f::zero;
47f32 ObjectBeltCurveA::calcDirSwitchVelocity(
u32 t)
const {
48 u32 change1Delta = EGG::Mathf::abs(
static_cast<f32
>(t - m_dirChange1Frame));
49 u32 change2Delta = EGG::Mathf::abs(
static_cast<f32
>(t - m_dirChange2Frame));
50 u32 delta = std::min(change1Delta, change2Delta);
52 if (
static_cast<f32
>(delta) > 60.0f) {
55 return 0.006f *
static_cast<f32
>(delta) / 60.0f;