SMG-Decomp
A decompilation of Super Mario Galaxy 1
Loading...
Searching...
No Matches
BigFanHolder.cpp
1#include "Game/MapObj/BigFanHolder.hpp"
2#include "Game/MapObj/BigFan.hpp"
3#include "Game/Scene/SceneObjHolder.hpp"
4
5BigFanHolder::BigFanHolder() : DeriveActorGroup("大型扇風機管理", 0x20) {
6
7}
8
9void BigFanHolder::calcWindInfo(TVec3f *pWindInfo, const TVec3f &a2, f32 *a3) {
10 s32 count = mObjectCount;
11 TVec3f stack_2C;
12 stack_2C.zero();
13
14 for (int i = 0; i < count; i++) {
15 TVec3f stack_20;
16 stack_20.zero();
17 BigFan* fan = reinterpret_cast<BigFan*>(getActor(i));
18 fan->calcWindInfo(&stack_20, a2);
19 f32 val = reinterpret_cast<BigFan*>(getActor(i))->_A0;
20 TVec3f stack_14 = stack_20 * (val / 100.0f);
21 stack_2C.addInline3(stack_14);
22 }
23
24 f32 mag = PSVECMag(stack_2C.toCVec());
25 if (MR::isNearZero(mag, 0.001f)) {
26 pWindInfo->zero();
27
28 if (a3) {
29 *a3 = 0.0f;
30 }
31 }
32 else {
33 TVec3f stack_8 = stack_2C * (1.0f / mag);
34 pWindInfo->x = stack_8.x;
35 pWindInfo->y = stack_8.y;
36 pWindInfo->z = stack_8.z;
37
38 if (a3) {
39 *a3 = mag;
40 }
41 }
42}
43
44void BigFanFunction::createBigFanHolder() {
45 MR::createSceneObj(SceneObj_BigFanHolder);
46}
47
48void BigFanFunction::calcWindInfo(TVec3f *a1, const TVec3f &a2, f32 *a3) {
49 if (!MR::isExistSceneObj(SceneObj_BigFanHolder)) {
50 a1->zero();
51
52 if (a3) {
53 *a3 = 0.0f;
54 }
55 }
56 else {
57 reinterpret_cast<BigFanHolder*>(MR::getSceneObjHolder()->getObj(SceneObj_BigFanHolder))->calcWindInfo(a1, a2, a3);
58 }
59}
60
61void BigFanFunction::registerBigFan(BigFan *pFan) {
62 reinterpret_cast<BigFanHolder*>(MR::getSceneObjHolder()->getObj(SceneObj_BigFanHolder))->registerActor(pFan);
63}
64
65BigFanHolder::~BigFanHolder() {
66
67}