SMG-Decomp
A decompilation of Super Mario Galaxy 1
Loading...
Searching...
No Matches
SpinDriverOperateRing.cpp
1#include "Game/MapObj/SpinDriverOperateRing.hpp"
2
3SpinDriverOperateRing::SpinDriverOperateRing(const char *pName) : LiveActor(pName),
4 _8C(0, 0, 0), _98(0, 0, 0), _A4(0, 0, 0), mAccelerate(0, 0, 0), mDirection(0, 0, 0)
5 {
6 _E0 = 0;
7 _C8 = 0.0f;
8 _CC = 0.0f;
9 _D0 = 0.0f;
10 mRadiusRate = 0.0f;
11 _D8 = 0.0f;
12 _DC = 0.0f;
13}
14
16 makeActorAppeared();
17 MR::invalidateClipping(this);
18}
19
20void SpinDriverOperateRing::control() {
21
22}
23
24void SpinDriverOperateRing::setRadiusRate(f32 rate) {
25 mRadiusRate = MR::normalize(rate, 0.0f, 1.0f);
26}
27
28void SpinDriverOperateRing::reset() {
29 resetVelocityAndTrans();
30}
31
32void SpinDriverOperateRing::update(const TVec3f &a1, const TVec3f &a2) {
33 _8C.set(a1);
34 _98.set(a2);
35
36 if (mRadiusRate <= 0.0f) {
37 resetVelocityAndTrans();
38 }
39 else {
40
41 updateControlPoint(a2);
42 addAccelToOperatePlane(a2);
43 TVec3f stack_8;
44 addAccelOperate(&stack_8, a2);
45 addAccelToCenter();
46 attenuateVelocity();
47 updateDirection(stack_8);
48 updatePosition();
49 }
50}
51
52#ifdef NON_MATCHING
53void SpinDriverOperateRing::updateDirection(const TVec3f &rVec) {
54 TVec3f stack_20;
55 TVec3f direction(mDirection);
56 direction.scale(0.89999998f);
57 TVec3f stack_14(rVec);
58 stack_14.scale(0.1f);
59 TVec3f stack_20(stack_14);
60 stack_20 += direction;
61 mDirection = stack_20;
62}
63#endif
64
65void SpinDriverOperateRing::resetVelocityAndTrans() {
66 mDirection.zero();
67 mAccelerate.zero();
68 _A4.zero();
69 _D8 = 0.0f;
70 _DC = 0.0f;
71}
72
73void SpinDriverOperateRing::addAccelToOperatePlane(const TVec3f &rVec) {
74 f32 dot = -rVec.dot(_A4);
75 TVec3f scalar(rVec);
76 scalar.scale(0.050000001f * dot);
77 mAccelerate += scalar;
78}
79
80void SpinDriverOperateRing::addAccelToCenter() {
81 f32 norm = MR::normalize(_DC, 0.1f, 1.0f);
82
83 if (norm > 0.000099999997f) {
84 f32 scalar = ((0.5f * norm) / _D8);
85 TVec3f accel(_A4);
86 accel.scale(scalar);
87 mAccelerate += accel;
88 }
89}
90
91void SpinDriverOperateRing::attenuateVelocity() {
92 mAccelerate.x *= 0.94f;
93 mAccelerate.y *= 0.94f;
94 mAccelerate.z *= 0.94f;
95}
96
97SpinDriverOperateRing::~SpinDriverOperateRing() {
98
99}
100
101namespace NrvSpinDriverOperateRing {
102 INIT_NERVE(SpinDriverOperateRingNrvWait);
103
104 void SpinDriverOperateRingNrvWait::execute(Spine *) const {
105
106 }
107};
The basis of a drawable actor that can contain states (see: Nerve)
Definition LiveActor.hpp:24
virtual void init(const JMapInfoIter &)
Intializes the NameObj and can set various settings and construct necessary classes.
Definition Spine.hpp:9