1#include "ObjectObakeBlock.hh"
7 : ObjectBase(params), m_initialPos(params.pos()), m_fallState(FallState::Rest) {
8 constexpr f32 SI_WIDTH = 162.5f;
9 constexpr f32 FALL_LINEAR_SPEED = 1.0f;
10 constexpr f32 FALL_ANGULAR_SPEED = 0.02f;
14 m_fallAngVel.setZero();
15 m_fallFrame =
static_cast<s32
>(
16 static_cast<s16
>(params.setting(2)) +
static_cast<s16
>(params.setting(1)) * 60);
18 f32 yRot = params.rot().y;
21 m_fallVel.z = -FALL_LINEAR_SPEED;
22 m_fallAngVel.x = -FALL_ANGULAR_SPEED;
23 m_bbox.min = m_pos +
EGG::Vector3f(SI_WIDTH, SI_WIDTH, SI_WIDTH);
24 m_bbox.max = m_pos +
EGG::Vector3f(-SI_WIDTH, SI_WIDTH, SI_WIDTH);
25 }
else if (yRot == 90.0f) {
26 m_fallVel.x = -FALL_LINEAR_SPEED;
27 m_fallAngVel.z = FALL_ANGULAR_SPEED;
28 m_bbox.min = m_pos +
EGG::Vector3f(SI_WIDTH, SI_WIDTH, SI_WIDTH);
29 m_bbox.max = m_pos +
EGG::Vector3f(SI_WIDTH, SI_WIDTH, -SI_WIDTH);
30 }
else if (yRot == 180.0f) {
31 m_fallVel.z = FALL_LINEAR_SPEED;
32 m_fallAngVel.x = FALL_ANGULAR_SPEED;
33 m_bbox.min = m_pos +
EGG::Vector3f(SI_WIDTH, SI_WIDTH, -SI_WIDTH);
34 m_bbox.max = m_pos +
EGG::Vector3f(-SI_WIDTH, SI_WIDTH, -SI_WIDTH);
35 }
else if (yRot == -90.0f) {
36 m_fallVel.x = FALL_LINEAR_SPEED;
37 m_fallAngVel.z = -FALL_ANGULAR_SPEED;
38 m_bbox.min = m_pos +
EGG::Vector3f(-SI_WIDTH, SI_WIDTH, SI_WIDTH);
39 m_bbox.max = m_pos +
EGG::Vector3f(-SI_WIDTH, SI_WIDTH, -SI_WIDTH);
44ObjectObakeBlock::~ObjectObakeBlock() =
default;
47void ObjectObakeBlock::calc() {
48 constexpr s32 FALL_DURATION = 255;
50 if (m_fallState != FallState::Falling) {
54 m_pos = m_initialPos + m_fallVel * (
static_cast<f32
>(m_framesFallen) * 2.0f);
55 m_rot = m_fallAngVel *
static_cast<f32
>(m_framesFallen);
56 m_pos.y = m_initialPos.y -
57 (0.5f *
static_cast<f32
>(m_framesFallen)) * (0.5f *
static_cast<f32
>(m_framesFallen));
60 if (++m_framesFallen > FALL_DURATION) {
61 m_fallState = FallState::FinishedFalling;