SMG-Decomp
A decompilation of Super Mario Galaxy 1
Loading...
Searching...
No Matches
Halo.cpp
1#include "Game/Map/Halo.hpp"
2
3Halo::Halo(const char *pName) : MapObjActor(pName) {
4 mDistance = 70.0f;
5}
6
7/*
8void Halo::init(const JMapInfoIter &rIter) {
9 MapObjActor::init(rIter);
10 MapObjActorInitInfo info;
11 info.setupHioNode("環境");
12 info.setupDefaultPos();
13 info.setupConnectToScene();
14 info.setupNerve(&NrvHalo::HostTypeAppear::sInstance);
15 info.setupClippingRadius(100.0f * getParam()->clippingRadius);
16 info.setupFarClipping(-1.0f);
17 info.setupAffectedScale();
18 initialize(rIter, info);
19 MR::getJMapInfoArg0NoInit(rIter, &mDistance);
20}
21*/
22
23void Halo::appear() {
24 MapObjActor::appear();
25
26 if (isDistanceDisappear()) {
27 const char* anim = "Disappear";
28 MR::tryStartAllAnim(this, anim);
29 if (MR::isExistBtk(this, anim)) {
30 J3DFrameCtrl* ctrl = MR::getBtkCtrl(this);
31 MR::setBtkFrame(this, ctrl->mEndFrame);
32 }
33
34 if (MR::isExistBpk(this, anim)) {
35 J3DFrameCtrl* ctrl = MR::getBpkCtrl(this);
36 MR::setBpkFrame(this, ctrl->mEndFrame);
37
38 }
39 if (MR::isExistBtp(this, anim)) {
40 J3DFrameCtrl* ctrl = MR::getBtpCtrl(this);
41 MR::setBpkFrame(this, ctrl->mEndFrame);
42 }
43
44 if (MR::isExistBrk(this, anim)) {
45 J3DFrameCtrl* ctrl = MR::getBrkCtrl(this);
46 MR::setBrkFrame(this, ctrl->mEndFrame);
47 }
48
49 MR::hideModel(this);
50 setNerve(&NrvHalo::HostTypeDisappear::sInstance);
51 }
52 else {
53 MR::startAllAnim(this, "Appear");
54 setNerve(&NrvHalo::HostTypeAppear::sInstance);
55 }
56}
57
58f32 Halo::getDistance() const {
59 return MR::calcDistanceToPlayer(this);
60}
61
62void Halo::connectToScene(const MapObjActorInitInfo &rIter) {
63 MR::connectToSceneAir(this);
64}
65
66bool Halo::isDistanceAppear() const {
67 f32 v1 = (mDistance + 20.0f) * 100.0f;
68
69 f32 d = mDistance * 100.0f;
70 if (d < v1) {
71 return v1 < getDistance();
72 }
73 else {
74 return getDistance() < v1;
75 }
76}
77
78/*
79bool Halo::isDistanceDisappear() const {
80 f32 v1 = (mDistance + 20.0f) * 100.0f;
81
82 f32 d = mDistance * 100.0f;
83 if (v1 < d) {
84 return getDistance() < v1;
85 }
86 else {
87 return v1 < getDistance();
88 }
89}
90*/
91
92void Halo::exeDisappear() {
93 if (!MR::isHiddenModel(this)) {
94 bool flag;
95 const char* anim = "Disappear";
96
97 if (MR::isExistBtk(this, anim) && MR::isBtkStopped(this)) {
98 flag = true;
99 }
100 else if (MR::isExistBpk(this, anim) && MR::isBpkStopped(this)) {
101 flag = true;
102 }
103 else if (MR::isExistBtp(this, anim) && MR::isBtpStopped(this)) {
104 flag = true;
105 }
106 else if (MR::isExistBrk(this, anim) && MR::isBrkStopped(this)) {
107 flag = true;
108 }
109 else {
110 flag = false;
111 }
112
113 if (flag) {
114 MR::hideModel(this);
115 }
116 }
117
118 if (isDistanceAppear()) {
119 MR::showModel(this);
120 MR::startAllAnim(this, "Appear");
121 setNerve(&NrvHalo::HostTypeAppear::sInstance);
122 }
123}
124
125PowerStarHalo::PowerStarHalo(const char *pName) : Halo(pName) {
126 _C8 = -1;
127}
128
129Halo::~Halo() {
130
131}
132
134 Halo::init(rIter);
135 MR::getJMapInfoArg1NoInit(rIter, &_C8);
136 if (_C8 == -1) {
137 setNerve(&NrvPowerStarHalo::HostTypeWaitScenarioOpeningEnd::sInstance);
138 }
139}
140
141void PowerStarHalo::appear() {
142 if (isNerve(&NrvPowerStarHalo::HostTypeWaitScenarioOpeningEnd::sInstance)) {
143 makeActorAppeared();
144 }
145 else {
146 Halo::appear();
147 }
148}
149
150f32 PowerStarHalo::getDistance() const {
151 TVec3f pos = MR::getCamPos();
152 return PSVECDistance(mPosition.toCVec(), pos.toCVec());
153}
154
155void PowerStarHalo::exeWaitScenarioOpeningEnd() {
156 if (MR::isFirstStep(this)) {
157 MR::hideModel(this);
158 }
159
160 if (!MR::isStageStateScenarioOpeningCamera()) {
161 MR::showModel(this);
162 Halo::appear();
163 }
164}
165
166PowerStarHalo::~PowerStarHalo() {
167
168}
169
170/* todo -- ordering of these functions is wrong */
171void NrvPowerStarHalo::HostTypeWaitScenarioOpeningEnd::execute(Spine *pSpine) const {
172 PowerStarHalo* halo = reinterpret_cast<PowerStarHalo*>(pSpine->mExecutor);
173 halo->exeWaitScenarioOpeningEnd();
174}
175
176void NrvHalo::HostTypeDisappear::execute(Spine *pSpine) const {
177 Halo* halo = reinterpret_cast<Halo*>(pSpine->mExecutor);
178 halo->exeDisappear();
179}
180
181void NrvHalo::HostTypeAppear::execute(Spine *pSpine) const {
182 Halo* halo = reinterpret_cast<Halo*>(pSpine->mExecutor);
183 if (halo->isDistanceDisappear()) {
184 MR::startAllAnim(halo, "Disappear");
185 halo->setNerve(&NrvHalo::HostTypeDisappear::sInstance);
186 }
187}
Definition Halo.hpp:19
virtual void init(const JMapInfoIter &)
Intializes the NameObj and can set various settings and construct necessary classes.
TVec3f mPosition
3D vector of the actor's position.
Definition LiveActor.hpp:95
virtual void init(const JMapInfoIter &)
Intializes the NameObj and can set various settings and construct necessary classes.
Definition Halo.cpp:133
Definition Spine.hpp:9