SMG-Decomp
A decompilation of Super Mario Galaxy 1
Loading...
Searching...
No Matches
MapParts.cpp
1#include "Game/MapObj/MapParts.hpp"
2#include "JSystem/JMath/JMath.hpp"
3#include "math_types.hpp"
4
5MapParts::~MapParts() {
6
7}
8
9MapParts::MapParts(const char *pName) : LiveActor(pName) {
10 _8C.setZero();
11}
12
13void MapParts::init(const JMapInfoIter &rIter) {
14 if (MR::isConnectedWithRail(rIter)) {
15 initRailRider(rIter);
16 }
17
18 MR::initDefaultPosNoRepeat(this, rIter);
19 initModelAndCollision(rIter);
20 connectToScene();
21 MR::initMapPartsClipping(this, rIter, &_8C, false);
22 MR::joinToGroupArray(this, rIter, "MapParts", 0x40);
23 initSound(4, false);
24}
25
26void MapParts::appear() {
27 LiveActor::appear();
28 MR::tryStartAllAnim(this, MR::getModelResName(this));
29}
30
31s32 MapParts::getSensorNumMax() const {
32 return 0;
33}
34
35s32 MapParts::getMoveStartSignalTime() {
36 return 0x32;
37}
38
39void MapParts::connectToScene() {
40 MR::connectToSceneMapParts(this);
41}
42
43void MapParts::initModelAndCollision(const JMapInfoIter &rIter) {
44 char name[0x30];
45 MR::getMapPartsObjectName(name, 0x30, rIter);
46 initModelManagerWithAnm(name, nullptr, false);
47 initHitSensor(2);
48 TVec3f dist;
49 TVec3f lerpVec;
50 TVec3f sensor_offs;
51 sensor_offs.x = 0.0f;
52 sensor_offs.y = 0.0f;
53 sensor_offs.z = 0.0f;
54 u32 sensorNum = getSensorNumMax();
55 HitSensor* sensor = MR::addHitSensorMapObj(this, "body", sensorNum, 100.0f, sensor_offs);
56 if (MR::isExistJoint(this, cFollowjointName)) {
57 MtxPtr jointMtx = MR::getJointMtx(this, cFollowjointName);
58 MR::initCollisionParts(this, name, sensor, jointMtx);
59 MR::tryCreateCollisionAllOtherCategory(this, jointMtx, sensor, nullptr, nullptr, nullptr);
60 }
61 else {
62 MR::initCollisionParts(this, name, sensor, nullptr);
63 MR::tryCreateCollisionAllOtherCategory(this, sensor, nullptr, nullptr, nullptr);
64 }
65
66 f32 sensorRange;
67 if (MR::getJ3DModel(this)) {
68 TBox3f box;
69 MR::calcModelBoundingBox(&box, this);
70 JMathInlineVEC::PSVECSubtract(box.mMax.toCVec(), box.mMin.toCVec(), dist.toVec());
71 sensorRange = 0.5f * PSVECMag(dist.toCVec());
72 JMAVECLerp(box.mMax.toCVec(), box.mMin.toCVec(), lerpVec.toVec(), 0.5f);
73 TVec3f trueSensorOffset;
74 trueSensorOffset.setInlinePS(lerpVec);
75 JMathInlineVEC::PSVECSubtract(trueSensorOffset.toCVec(), mPosition.toCVec(), trueSensorOffset.toVec());
76 MR::setSensorOffset(this, "body", trueSensorOffset);
77 }
78 else {
79 sensorRange = MR::getCollisionBoundingSphereRange(this);
80 }
81
82 sensor->mRadius = sensorRange;
83}
The basis of a drawable actor that can contain states (see: Nerve)
Definition LiveActor.hpp:24
TVec3f mPosition
3D vector of the actor's position.
Definition LiveActor.hpp:95
virtual void init(const JMapInfoIter &)
Intializes the NameObj and can set various settings and construct necessary classes.
Definition MapParts.cpp:13