SMG-Decomp
A decompilation of Super Mario Galaxy 1
Loading...
Searching...
No Matches
ClippingActorHolder.cpp
1#include "Game/LiveActor/ClippingActorHolder.hpp"
2#include "Game/LiveActor/LiveActor.hpp"
3#include "Game/Util.hpp"
4
5ClippingActorHolder::ClippingActorHolder() : NameObj("クリッピングアクター保持") {
6 _C = 0;
7 _10 = 0;
8 _14 = 0;
9 _18 = 0;
10 _1C = 0;
11 mViewGroupCtrl = 0;
12
13 _10 = new ClippingActorInfoList(sActorNumMax);
14 _14 = new ClippingActorInfoList(sActorNumMax);
15 _18 = new ClippingActorInfoList(sActorNumMax);
16 _1C = new ClippingActorInfoList(sActorNumMax);
17 mViewGroupCtrl = new ViewGroupCtrl();
18}
19
20void ClippingActorHolder::movement() {
21 mViewGroupCtrl->update();
22
23 for (s32 i = 0; i < _10->_4; i++) {
24 _10->mClippingActorList[i]->judgeClipping();
25 }
26}
27
28void ClippingActorHolder::registerActor(LiveActor *pActor) {
29 ClippingActorInfo* inf = new ClippingActorInfo(pActor);
30 _18->add(inf);
31 _C++;
32}
33
34void ClippingActorHolder::initSystemInfo(LiveActor *pActor, const JMapInfoIter &rIter) {
35 s32 viewGroupID = -1;
36 bool res = MR::getJMapInfoViewGroupID(rIter, &viewGroupID);
37
38 if (res) {
39 mViewGroupCtrl->initActorInfo(find(pActor), viewGroupID);
40 }
41}
42
43void ClippingActorHolder::initViewGroupTable() {
44 mViewGroupCtrl->startInitViewGroupTable();
45 mViewGroupCtrl->initViewGroup(_10);
46 mViewGroupCtrl->initViewGroup(_18);
47 mViewGroupCtrl->initViewGroup(_1C);
48 mViewGroupCtrl->initViewGroup(_14);
49 mViewGroupCtrl->endInitViewGroupTable();
50}
51
52void ClippingActorHolder::entryLodCtrl(LodCtrl *pLod, const JMapInfoIter &rIter) {
53 mViewGroupCtrl->entryLodCtrl(pLod, rIter);
54}
55
56void ClippingActorHolder::validateClipping(LiveActor *pActor) {
57 pActor->mFlags.mIsInvalidClipping = false;
58 ClippingActorInfo* inf = _14->remove(pActor);
59
60 if (MR::isDead(pActor)) {
61 _18->add(inf);
62 }
63 else {
64 if (inf->isGroupClipping()) {
65 _10->add(inf);
66 }
67 else {
68 _1C->add(inf);
69 }
70 }
71}
72
73void ClippingActorHolder::invalidateClipping(LiveActor *pActor) {
74 pActor->mFlags.mIsInvalidClipping = true;
76
77 if (MR::isDead(pActor)) {
78 inf = _18->remove(pActor);
79 }
80 else {
81 if (_10->isInList(pActor)) {
82 inf = _10->remove(pActor);
83 }
84 else {
85 inf = _1C->remove(pActor);
86 }
87 }
88
89 _14->add(inf);
90 if (MR::isClipped(pActor)) {
91 pActor->endClipped();
92 }
93}
94
95void ClippingActorHolder::setTypeToSphere(LiveActor *pActor, f32 range, const TVec3f *a3) {
96 find(pActor)->setTypeToSphere(range, a3);
97}
98
99#ifdef NON_MATCHING
100// cast issues
101void ClippingActorHolder::setFarClipLevel(LiveActor *pActor, s32 level) {
102 find(pActor)->mFarClipLevel = level;
103}
104#endif
The basis of a drawable actor that can contain states (see: Nerve)
Definition LiveActor.hpp:24
LiveActorFlag mFlags
Flags relating to drawing, animation calculation, etc.
The most basic form of an object.
Definition NameObj.hpp:11