A reimplementation of Mario Kart Wii's physics engine in C++
Loading...
Searching...
No Matches
KartScale.cc
1#include "KartScale.hh"
2
3#include "game/kart/KartObjectManager.hh"
4
5namespace Kart {
6
8KartScale::KartScale() {
9 reset();
10}
11
13KartScale::~KartScale() = default;
14
16void KartScale::reset() {
17 m_crushState = CrushState::None;
18 m_calcCrush = false;
19 m_uncrushAnmFrame = 0.0f;
20 m_currScale = EGG::Vector3f(1.0f, 1.0f, 1.0f);
21}
22
24void KartScale::calc() {
25 calcCrush();
26}
27
29void KartScale::startCrush() {
30 m_crushState = CrushState::Crush;
31 m_currScale = EGG::Vector3f(1.0f, 1.0f, 1.0f);
32 m_uncrushAnmFrame = 0.0f;
33 m_calcCrush = true;
34}
35
37void KartScale::startUncrush() {
38 m_crushState = CrushState::Uncrush;
39 m_currScale = EGG::Vector3f(1.0f, CRUSH_SCALE, 1.0f);
40 m_uncrushAnmFrame = 0.0f;
41 m_calcCrush = true;
42}
43
45void KartScale::calcCrush() {
46 constexpr f32 SCALE_SPEED = 0.2f;
47
48 if (!m_calcCrush || m_crushState == CrushState::None) {
49 return;
50 }
51
52 if (m_crushState == CrushState::Crush) {
53 m_currScale.y -= SCALE_SPEED;
54 if (m_currScale.y < CRUSH_SCALE) {
55 m_currScale.y = CRUSH_SCALE;
56 m_calcCrush = false;
57 }
58 } else {
59 m_currScale = getAnmScale(m_uncrushAnmFrame);
60
61 const auto *scaleAnm = KartObjectManager::PressScaleUpAnmChr();
62 ASSERT(scaleAnm);
63
64 if (++m_uncrushAnmFrame > static_cast<f32>(scaleAnm->frameCount())) {
65 m_calcCrush = false;
66 }
67 }
68}
69
71EGG::Vector3f KartScale::getAnmScale(f32 frame) const {
72 const auto *scaleAnm = KartObjectManager::PressScaleUpAnmChr();
73 ASSERT(scaleAnm);
74 return scaleAnm->getAnmResult(frame, 0).scale();
75}
76
77} // namespace Kart
bool m_calcCrush
Set while crush scaling is occurring.
Definition KartScale.hh:35
EGG::Vector3f m_currScale
The computed scale for the current frame.
Definition KartScale.hh:37
CrushState m_crushState
Specifies the current crush/uncrush state.
Definition KartScale.hh:34
f32 m_uncrushAnmFrame
Current frame of the unsquish animation.
Definition KartScale.hh:36
Pertains to kart-related functionality.
A 3D float vector.
Definition Vector.hh:87