1#include "ObjectKinoko.hh"
7 : ObjectKCL(params), m_objPos(m_pos), m_objRot(m_rot) {
8 m_type =
static_cast<KinokoType
>(params.setting(0));
12 m_pulseFalloff = 0.1f;
16ObjectKinoko::~ObjectKinoko() =
default;
19void ObjectKinoko::calc() {
20 constexpr s16 REST_DURATION = 10;
21 constexpr s16 PULSE_DURATION = 40;
22 constexpr f32 PULSE_SCALE = 0.0008f;
23 constexpr f32 PULSE_FREQ = 6.0f * F_PI / 40.0f;
25 if (m_restFrame == 0) {
28 if (m_pulseFrame == PULSE_DURATION) {
31 if (m_restFrame > REST_DURATION) {
34 if (m_pulseFrame > PULSE_DURATION) {
38 m_pulseFalloff = PULSE_SCALE *
static_cast<f32
>(PULSE_DURATION - m_pulseFrame);
41 m_pulseFalloff *
EGG::Mathf::sin(PULSE_FREQ *
static_cast<f32
>(m_pulseFrame)) + 1.0f);
49 m_oscFrame = params.setting(3);
50 m_waitDuration = params.setting(4);
51 m_amplitude = params.setting(1);
52 m_period = std::max<u16>(params.setting(2), 2);
53 m_angFreq = F_TAU /
static_cast<f32
>(m_period);
57ObjectKinokoUd::~ObjectKinokoUd() =
default;
60void ObjectKinokoUd::calcOscillation() {
62 m_pos.y = m_objPos.y +
63 static_cast<f32
>(m_amplitude) *
64 (
EGG::Mathf::cos(m_angFreq *
static_cast<f32
>(m_oscFrame)) + 1.0f) * 0.5f;
66 if (m_waitFrame == 0) {
69 if (m_oscFrame == (m_period / 2)) {
72 if (m_waitFrame > m_waitDuration) {
75 if (m_oscFrame > m_period) {
82 m_currentFrame = params.setting(3);
83 m_amplitude =
static_cast<f32
>(params.setting(1)) * DEG2RAD;
84 m_period = std::max<u16>(params.setting(2), 2);
85 m_angFreq = F_TAU /
static_cast<f32
>(m_period);
89ObjectKinokoBend::~ObjectKinokoBend() =
default;
92void ObjectKinokoBend::calcOscillation() {
93 const f32 s =
EGG::Mathf::sin(m_angFreq *
static_cast<f32
>(m_currentFrame));
94 EGG::Vector3f rot = m_objRot + (EGG::Vector3f::ez * s) * m_amplitude;
99 m_rot = m_transform.multVector33(rot);
101 if (++m_currentFrame >= m_period) {
107 m_type =
static_cast<KinokoType
>(params.setting(0));
111ObjectKinokoNm::~ObjectKinokoNm() =
default;