1#include "ObjectPenguin.hh"
9ObjectPenguin::~ObjectPenguin() =
default;
12void ObjectPenguin::init() {
13 m_railInterpolator->init(0.0f, 0);
14 m_state = State::Walk;
15 m_basis = EGG::Vector3f::ez;
19void ObjectPenguin::calcRot() {
20 constexpr f32 INTERP_RATE = 0.2f;
22 m_basis = Interpolate(INTERP_RATE, m_basis, m_railInterpolator->curTangentDir());
24 setMatrixFromOrthonormalBasisAndPos(m_basis);
28void ObjectPenguin::enterWalk() {
29 m_state = State::Walk;
31 m_rot = m_transform.base(2);
38ObjectPenguinS::~ObjectPenguinS() =
default;
41void ObjectPenguinS::init() {
43 m_railInterpolator->init(0.0f, 0);
44 m_basis = m_railInterpolator->curTangentDir();
45 m_state = State::Walk;
49void ObjectPenguinS::calc() {
60 case State::SliderSlow:
71void ObjectPenguinS::loadAnims() {
72 std::array<const char *, 4> names = {{
79 std::array<Render::AnmType, 4> types = {{
86 linkAnims(names, types);
90void ObjectPenguinS::calcSlider() {
95 if (--m_anmTimer == 0) {
96 m_state = State::SliderSlow;
101void ObjectPenguinS::calcStandUp() {
106 if (--m_anmTimer == 0) {
112void ObjectPenguinS::calcRail() {
113 if (m_railInterpolator->calc() != RailInterpolator::Status::SegmentEnd) {
117 const auto &curPoint = m_railInterpolator->curPoint();
118 u16 setting = curPoint.setting[0];
120 if (setting == 0 && m_state == State::SliderSlow) {
121 auto *anmMgr = m_drawMdl->anmMgr();
122 anmMgr->playAnim(0.0f, 1.0f, 3);
123 m_state = State::StandUp;
124 m_anmTimer = anmMgr->activeAnim(Render::AnmType::Chr)->frameCount();
125 }
else if (setting == 1 && m_state == State::Walk) {
126 auto *anmMgr = m_drawMdl->anmMgr();
127 anmMgr->playAnim(0.0f, 1.0f, 1);
128 m_state = State::Slider;
129 m_anmTimer = anmMgr->activeAnim(Render::AnmType::Chr)->frameCount();
130 }
else if (setting == 2 && m_state == State::Walk) {
131 m_state = State::Dive;
134 m_railInterpolator->setCurrVel(
static_cast<f32
>(curPoint.setting[1]));