SMG-Decomp
A decompilation of Super Mario Galaxy 1
Loading...
Searching...
No Matches
CounterLayoutAppearer.cpp
1#include "Game/Screen/CounterLayoutAppearer.hpp"
2#include "Game/Util/LayoutUtil.hpp"
3#include "Game/Util/NerveUtil.hpp"
4
5static f32 zero = 0.0f;
6
7CounterLayoutAppearer::CounterLayoutAppearer(LayoutActor *pActor, const TVec2f &a2) : NerveExecutor("カウンタ出現制御") {
8 mLayout = pActor;
9 _C = a2.x;
10 _10 = a2.y;
11 mFollowPos.x = 0.0f;
12 mFollowPos.y = 0.0f;
13 _1C = 0.0f;
14 _20 = 0.0f;
15 MR::setFollowPos(&mFollowPos, pActor, nullptr);
16 MR::setFollowTypeAdd(mLayout, nullptr);
17 initNerve(&NrvCounterLayoutAppearer::CounterLayoutAppearerNrvHide::sInstance);
18 MR::startAnimAndSetFrameAndStop(mLayout, "Appear", 0.0f, 0);
19 setNerve(&NrvCounterLayoutAppearer::CounterLayoutAppearerNrvHide::sInstance);
20}
21
22void CounterLayoutAppearer::update() {
23 updateNerve();
24}
25
26void CounterLayoutAppearer::appear(const TVec2f &a1) {
27 _1C = a1.x;
28 _20 = a1.y;
29 MR::startAnim(mLayout, "Appear", 0);
30 updateLayoutOffset(0.0f);
31 setNerve(&NrvCounterLayoutAppearer::CounterLayoutAppearerNrvAppear::sInstance);
32}
33
34void CounterLayoutAppearer::disappear() {
35 setNerve(&NrvCounterLayoutAppearer::CounterLayoutAppearerNrvDisappear::sInstance);
36}
37
38bool CounterLayoutAppearer::isAppeared() const {
39 return isNerve(&NrvCounterLayoutAppearer::CounterLayoutAppearerNrvShow::sInstance);
40}
41
42bool CounterLayoutAppearer::isDisappeared() const {
43 return isNerve(&NrvCounterLayoutAppearer::CounterLayoutAppearerNrvHide::sInstance);
44}
45
46void CounterLayoutAppearer::reset() {
47 MR::startAnimAndSetFrameAndStop(mLayout, "Appear", 0.0f, 0);
48 setNerve(&NrvCounterLayoutAppearer::CounterLayoutAppearerNrvHide::sInstance);
49}
50
51#ifdef NON_MATCHING
52void CounterLayoutAppearer::updateLayoutOffset(f32 offset) {
53 TVec2f vec;
54 f32 x = (_C + (offset * (zero - _C))) + _1C;
55 vec.x = zero;
56 vec.y = zero;
57 f32 y = ((_10 + (offset * (zero - _10))) + _20);
58 mFollowPos.x = x;
59 mFollowPos.y = y;
60}
61#endif
62
63void CounterLayoutAppearer::exeAppear() {
64 updateLayoutOffset(MR::calcNerveEaseOutRate(this, MR::getAnimFrameMax(mLayout, 0)));
65 if (MR::isAnimStopped(mLayout, 0)) {
66 setNerve(&NrvCounterLayoutAppearer::CounterLayoutAppearerNrvShow::sInstance);
67 }
68}
69
70void CounterLayoutAppearer::exeDisappear() {
71 if (MR::isFirstStep(this)) {
72 MR::startAnim(mLayout, "End", 0);
73 }
74
75 updateLayoutOffset((1.0f - MR::calcNerveEaseInRate(this, MR::getAnimFrameMax(mLayout, 0))));
76
77 if (MR::isAnimStopped(mLayout, 0)) {
78 setNerve(&NrvCounterLayoutAppearer::CounterLayoutAppearerNrvHide::sInstance);
79 }
80}
81
82CounterLayoutAppearer::~CounterLayoutAppearer() {
83
84}
85
86namespace NrvCounterLayoutAppearer {
87 INIT_NERVE(CounterLayoutAppearerNrvHide);
88 INIT_NERVE(CounterLayoutAppearerNrvAppear);
89 INIT_NERVE(CounterLayoutAppearerNrvShow);
90 INIT_NERVE(CounterLayoutAppearerNrvDisappear);
91
92 void CounterLayoutAppearerNrvDisappear::execute(Spine *pSpine) const {
93 CounterLayoutAppearer* layout = reinterpret_cast<CounterLayoutAppearer*>(pSpine->mExecutor);
94 layout->exeDisappear();
95 }
96
97 void CounterLayoutAppearerNrvShow::execute(Spine *pSpine) const {
98 CounterLayoutAppearer* layout = reinterpret_cast<CounterLayoutAppearer*>(pSpine->mExecutor);
99
100 if (MR::isFirstStep(layout)) {
101 layout->updateLayoutOffset(1.0f);
102 }
103 }
104
105 void CounterLayoutAppearerNrvAppear::execute(Spine *pSpine) const {
106 CounterLayoutAppearer* layout = reinterpret_cast<CounterLayoutAppearer*>(pSpine->mExecutor);
107 layout->exeAppear();
108 }
109
110 void CounterLayoutAppearerNrvHide::execute(Spine *pSpine) const {
111
112 }
113};
Definition Spine.hpp:9