SMG-Decomp
A decompilation of Super Mario Galaxy 1
Loading...
Searching...
No Matches
GlobalGravityObj.cpp
1#include "Game/Gravity.hpp"
2#include "Game/Util.hpp"
3
4GlobalGravityObj::GlobalGravityObj(const char *pName) : LiveActor(pName) {
5 mGravityCreator = nullptr;
6}
7
9 MR::initDefaultPos(this, rIter);
10 mGravityCreator->createFromJMap(rIter);
11
12 MR::useStageSwitchReadA(this, rIter);
13 MR::useStageSwitchReadB(this, rIter);
14
15 if (MR::isValidSwitchA(this) || MR::isValidSwitchB(this)) {
16 MR::connectToSceneMapObjMovement(this);
17 }
18
19 MR::invalidateClipping(this);
20 MR::registerDemoSimpleCastAll(this);
21 MR::addBaseMatrixFollowerGravity(this, rIter);
22
23 makeActorAppeared();
24 MR::useStageSwitchSleep(this, rIter);
25}
26
27void GlobalGravityObj::makeActorAppeared() {
28 LiveActor::makeActorAppeared();
29 PlanetGravity* pGravity = mGravityCreator->getGravity();
30 pGravity->mAppeared = true;
31 updateSwitch();
32}
33
34void GlobalGravityObj::makeActorDead() {
35 LiveActor::makeActorDead();
36 PlanetGravity* pGravity = mGravityCreator->getGravity();
37 pGravity->mAppeared = false;
38}
39
40void GlobalGravityObj::updateSwitch() {
41 if (MR::isValidSwitchA(this) || MR::isValidSwitchB(this)) {
42 bool switchA = true;
43 bool switchB = true;
44
45 if (MR::isValidSwitchA(this)) {
46 switchA = MR::isOnSwitchA(this);
47 }
48 if (MR::isValidSwitchB(this)) {
49 switchB = MR::isOnSwitchB(this) == false;
50 }
51
52 PlanetGravity* pGravity = mGravityCreator->getGravity();
53 pGravity->mActivated = switchA && switchB;
54 }
55}
56
57void GlobalGravityObj::movement() {
58 updateSwitch();
59}
60
61PlanetGravity* GlobalGravityObj::getGravity() {
62 return mGravityCreator->getGravity();
63}
64
65namespace MR {
66 NameObj* createGlobalCubeGravityObj(const char *pName) {
67 GlobalGravityObj* ret = new GlobalGravityObj(pName);
68 ret->mGravityCreator = new CubeGravityCreator();
69 return ret;
70 }
71
72 NameObj* createGlobalConeGravityObj(const char *pName) {
73 GlobalGravityObj* ret = new GlobalGravityObj(pName);
74 ret->mGravityCreator = new ConeGravityCreator();
75 return ret;
76 }
77
78 NameObj* createGlobalDiskGravityObj(const char *pName) {
79 GlobalGravityObj* ret = new GlobalGravityObj(pName);
80 ret->mGravityCreator = new DiskGravityCreator();
81 return ret;
82 }
83
84 NameObj* createGlobalDiskTorusGravityObj(const char *pName) {
85 GlobalGravityObj* ret = new GlobalGravityObj(pName);
86 ret->mGravityCreator = new DiskTorusGravityCreator();
87 return ret;
88 }
89
90 NameObj* createGlobalPlaneGravityObj(const char *pName) {
91 GlobalGravityObj* ret = new GlobalGravityObj(pName);
92 ret->mGravityCreator = new PlaneGravityCreator();
93 return ret;
94 }
95
96 NameObj* createGlobalPlaneInBoxGravityObj(const char *pName) {
97 GlobalGravityObj* ret = new GlobalGravityObj(pName);
98 ret->mGravityCreator = new PlaneInBoxGravityCreator();
99 return ret;
100 }
101
102 NameObj* createGlobalPlaneInCylinderGravityObj(const char *pName) {
103 GlobalGravityObj* ret = new GlobalGravityObj(pName);
104 ret->mGravityCreator = new PlaneInCylinderGravityCreator();
105 return ret;
106 }
107
108 NameObj* createGlobalPointGravityObj(const char *pName) {
109 GlobalGravityObj* ret = new GlobalGravityObj(pName);
110 ret->mGravityCreator = new PointGravityCreator();
111 return ret;
112 }
113
114 NameObj* createGlobalSegmentGravityObj(const char *pName) {
115 GlobalGravityObj* ret = new GlobalGravityObj(pName);
116 ret->mGravityCreator = new SegmentGravityCreator();
117 return ret;
118 }
119
120 NameObj* createGlobalWireGravityObj(const char *pName) {
121 GlobalGravityObj* ret = new GlobalGravityObj(pName);
122 ret->mGravityCreator = new WireGravityCreator();
123 return ret;
124 }
125}
virtual void init(const JMapInfoIter &rIter)
Intializes the NameObj and can set various settings and construct necessary classes.
The basis of a drawable actor that can contain states (see: Nerve)
Definition LiveActor.hpp:24
The most basic form of an object.
Definition NameObj.hpp:11