SMG-Decomp
A decompilation of Super Mario Galaxy 1
Loading...
Searching...
No Matches
HitSensorKeeper.cpp
1#include "Game/LiveActor/HitSensorKeeper.hpp"
2#include "Game/LiveActor/HitSensorInfo.hpp"
3#include "Game/Util.hpp"
4#include <cstring>
5
6HitSensorKeeper::HitSensorKeeper(int sensorCount) {
7 mSensorCount = sensorCount;
8 mSensorInfosSize = 0;
9 mSensorInfos = nullptr;
10 _C = 0;
11 _10 = 0;
12 mSensorInfos = new HitSensorInfo*[sensorCount];
13
14 for (s32 i = 0; i < mSensorCount; i++) {
15 mSensorInfos[i] = nullptr;
16 }
17}
18
19HitSensor* HitSensorKeeper::add(const char *pName, u32 sensorType, u16 sensorGroupSize, f32 radius, LiveActor *pActor, const TVec3f &a6) {
20 HitSensorInfo* pInfo = new HitSensorInfo(pName, new HitSensor(sensorType, sensorGroupSize, radius, pActor), nullptr, nullptr, a6, false);
21 registHitSensorInfo(pInfo);
22 return pInfo->mSensor;
23}
24
25HitSensor* HitSensorKeeper::addPos(const char *pName, u32 sensorType, u16 sensorGroupSize, f32 radius, LiveActor * pActor, const TVec3f *pPos, const TVec3f &a7) {
26 HitSensorInfo* pInfo = new HitSensorInfo(pName, new HitSensor(sensorType, sensorGroupSize, radius, pActor), pPos, nullptr, a7, false);
27 registHitSensorInfo(pInfo);
28 return pInfo->mSensor;
29}
30
31HitSensor* HitSensorKeeper::addMtx(const char *pName, u32 sensorType, u16 sensorGroupSize, f32 radius, LiveActor *pActor, MtxPtr mtx, const TVec3f &a7) {
32 HitSensorInfo* pInfo = new HitSensorInfo(pName, new HitSensor(sensorType, sensorGroupSize, radius, pActor), nullptr, mtx, a7, false);
33 registHitSensorInfo(pInfo);
34 return pInfo->mSensor;
35}
36
37HitSensor* HitSensorKeeper::addCallback(const char *pName, u32 sensorType, u16 sensorGroupSize, f32 radius, LiveActor *pActor) {
38 HitSensorInfo* pInfo = new HitSensorInfo(pName, new HitSensor(sensorType, sensorGroupSize, radius, pActor), nullptr, nullptr, TVec3f(0.0f), true);
39 registHitSensorInfo(pInfo);
40 return pInfo->mSensor;
41}
42
43HitSensor* HitSensorKeeper::getSensor(const char *pSensorName) const {
44 if (mSensorInfosSize == 1) {
45 return mSensorInfos[0]->mSensor;
46 }
47
48 u32 hashCode = MR::getHashCode(pSensorName);
49
50 for (s32 i = 0; i < mSensorInfosSize; i++) {
51 if (hashCode == mSensorInfos[i]->mHashCode && !strstr(mSensorInfos[i]->mName, pSensorName)) {
52 return mSensorInfos[i]->mSensor;
53 }
54 }
55
56 return nullptr;
57}
58
59void HitSensorKeeper::update() {
60 for (s32 i = 0; i < mSensorInfosSize; i++) {
61 mSensorInfos[i]->update();
62 }
63}
64
65void HitSensorKeeper::doObjCol() {
66 for (s32 i = 0; i < mSensorInfosSize; i++) {
67 mSensorInfos[i]->doObjCol();
68 }
69}
70
71void HitSensorKeeper::clear() {
72 for (s32 i = 0; i < mSensorInfosSize; i++) {
73 HitSensorInfo* pInfo = mSensorInfos[i];
74 pInfo->mSensor->mSensorCount = 0;
75 }
76}
77
78void HitSensorKeeper::validate() {
79 for (s32 i = 0; i < mSensorInfosSize; i++) {
80 mSensorInfos[i]->mSensor->validate();
81 }
82}
83
84void HitSensorKeeper::invalidate() {
85 for (s32 i = 0; i < mSensorInfosSize; i++) {
86 mSensorInfos[i]->mSensor->invalidate();
87 }
88}
89
90void HitSensorKeeper::validateBySystem() {
91 for (s32 i = 0; i < mSensorInfosSize; i++) {
92 mSensorInfos[i]->mSensor->validateBySystem();
93 }
94}
95
96void HitSensorKeeper::invalidateBySystem() {
97 for (s32 i = 0; i < mSensorInfosSize; i++) {
98 mSensorInfos[i]->mSensor->invalidateBySystem();
99 }
100}
101
102HitSensorInfo* HitSensorKeeper::getNthSensorInfo(int n) const {
103 return mSensorInfos[n];
104}
105
106HitSensorInfo* HitSensorKeeper::getSensorInfo(const char *pSensorName) const {
107 if (mSensorInfosSize == 1) {
108 return mSensorInfos[0];
109 }
110
111 u32 hashCode = MR::getHashCode(pSensorName);
112
113 for (s32 i = 0; i < mSensorInfosSize; i++) {
114 if (hashCode == mSensorInfos[i]->mHashCode && !strstr(mSensorInfos[i]->mName, pSensorName)) {
115 return mSensorInfos[i];
116 }
117 }
118
119 return nullptr;
120}
121
122void HitSensorKeeper::registHitSensorInfo(HitSensorInfo *pInfo) {
123 mSensorInfos[mSensorInfosSize] = pInfo;
124 mSensorInfosSize++;
125 pInfo->update();
126}
The basis of a drawable actor that can contain states (see: Nerve)
Definition LiveActor.hpp:24