SMG-Decomp
A decompilation of Super Mario Galaxy 1
Loading...
Searching...
No Matches
HitSensor.cpp
1#include "Game/LiveActor/HitSensor.hpp"
2#include "Game/LiveActor/LiveActor.hpp"
3#include "Game/LiveActor/SensorHitChecker.hpp"
4
5// fuck this shit, sensorGroupSize is getting turned into a u32 becuase literally nothing else will match
6// whatever
7HitSensor::HitSensor(u32 type, u32 sensorGroupSize, f32 radius, LiveActor *pActor) {
8 mSensorType = type;
9 mPosition.x = 0.0f;
10 mPosition.y = 0.0f;
11 mPosition.z = 0.0f;
12 mRadius = radius;
13 mSensorCount = 0;
14 mGroupSize = sensorGroupSize;
15 mSensors = 0;
16 mSensorGroup = nullptr;
17 mValidBySystem = false;
18 mValidByHost = true;
19 mActor = pActor;
20
21 if (sensorGroupSize & 0xFFFF) {
22 mSensors = new HitSensor*[sensorGroupSize];
23
24 for (s32 i = 0; i < mGroupSize; i++) {
25 mSensors[i] = nullptr;
26 }
27 }
28
29 MR::initHitSensorGroup(this);
30}
31
32bool HitSensor::receiveMessage(u32 msg, HitSensor *pReceiver) {
33 return mActor->receiveMessage(msg, pReceiver, this);
34}
35
36void HitSensor::setType(u32 type) {
37 bool wasRemoved = false;
38
39 mSensorType = type;
40
41 if (mValidBySystem) {
42 if (mGroupSize) {
43 if (mValidByHost) {
44 mSensorGroup->remove(this);
45 wasRemoved = true;
46 }
47 }
48 }
49
50 MR::initHitSensorGroup(this);
51
52 if (wasRemoved) {
53 mSensorGroup->add(this);
54 }
55
56 mSensorCount = 0;
57}
58
59bool HitSensor::isType(u32 type) const {
60 return !(type - mSensorType);
61}
62
63
64void HitSensor::validate() {
65 if (mValidByHost) {
66 return;
67 }
68
69 mValidByHost = true;
70
71 if (!mGroupSize) {
72 return;
73 }
74
75 if (!mValidBySystem) {
76 return;
77 }
78
79 mSensorGroup->add(this);
80}
81
82void HitSensor::invalidate() {
83 if (mValidByHost) {
84 mValidByHost = false;
85
86 if (mGroupSize) {
87 if (mValidBySystem) {
88 mSensorGroup->remove(this);
89 }
90 }
91 }
92
93 mSensorCount = 0;
94}
95
96void HitSensor::validateBySystem() {
97 if (!mValidBySystem) {
98 if (mGroupSize) {
99 if (mValidByHost) {
100 mSensorGroup->add(this);
101 }
102 }
103
104 mValidBySystem = true;
105 }
106}
107
108void HitSensor::invalidateBySystem() {
109 if (!mValidBySystem) {
110 if (mGroupSize) {
111 if (mValidByHost) {
112 mSensorGroup->remove(this);
113 }
114 }
115
116 mValidBySystem = false;
117 mSensorCount = 0;
118 }
119}
120
121void HitSensor::addHitSensor(HitSensor *pSensor) {
122 if (mSensorCount < mGroupSize) {
123 mSensors[mSensorCount] = pSensor;
124 mSensorCount++;
125 }
126}
The basis of a drawable actor that can contain states (see: Nerve)
Definition LiveActor.hpp:24