SMG-Decomp
A decompilation of Super Mario Galaxy 1
Loading...
Searching...
No Matches
RailPart.cpp
1#include "Game/Map/RailPart.hpp"
2
3#include "JSystem/JMath/JMath.hpp"
4
5RailPart::RailPart()
6 : mRailPartLinear(0), mRailPartBezier(0) {
7}
8
9void RailPart::init(const TVec3f &a1, const TVec3f &a2, const TVec3f &a3, const TVec3f &a4) {
10 if ((!a1.epsilonEquals(a2, 0.1f)) || (a4.epsilonEquals(a3, 0.1f))) {
11 mRailPartLinear = new LinearRailPart();
12 mRailPartLinear->set(a1, a4);
13 }
14 else {
15 initForBezier(a1, a2, a3, a4);
16 }
17}
18
19void RailPart::initForBezier(const TVec3f &a1, const TVec3f &a2, const TVec3f &a3, const TVec3f &a4) {
20 mRailPartBezier = new BezierRailPart();
21 mRailPartBezier->set(a1, a2, a3, a4);
22}
23
24void RailPart::calcPos(TVec3f *pOut, f32 a2) const {
25 if (mRailPartLinear) {
26 JMAVECScaleAdd(mRailPartLinear->_C.toCVec(), mRailPartLinear->_0.toCVec(), pOut->toVec(), a2);
27 }
28 else {
29 mRailPartBezier->calcPos(pOut, a2);
30 }
31}
32
33void RailPart::calcVelocity(TVec3f *pOut, f32 a2) const {
34 if (mRailPartLinear) {
35 pOut->set<f32>(mRailPartLinear->_C);
36 }
37 else {
38 mRailPartBezier->calcVelocity(pOut, a2);
39 }
40}
41
42f32 RailPart::getLength(f32 a1, f32 a2, int a3) const {
43 if (mRailPartLinear) {
44 return (mRailPartLinear->_18 * (a2 - a1));
45 }
46
47 return mRailPartBezier->getLength(a1, a2, a3);
48}
49
50f32 RailPart::getTotalLength() const {
51 if (mRailPartLinear) {
52 return mRailPartLinear->_18;
53 }
54
55 return mRailPartBezier->mLength;
56}
57
58f32 RailPart::getParam(f32 a1) const {
59 if (mRailPartLinear) {
60 return (a1 / mRailPartLinear->_18);
61 }
62
63 return mRailPartBezier->getParam(a1);
64}
65
66f32 RailPart::getNearestParam(const TVec3f &rPos, f32 a2) const {
67 if (mRailPartLinear) {
68 return mRailPartLinear->getNearestParam(rPos, a2);
69 }
70
71 return mRailPartBezier->getNearestParam(rPos, a2);
72}
73
74void LinearRailPart::set(const TVec3f &a1, const TVec3f &a2) {
75 _0 = a1;
76 _C = a2;
77 _C -= a1;
78 _18 = C_VECMag((const Vec *)&_C);
79}
80
81/*
82f32 LinearRailPart::getNearestParam(const register TVec3f &a1, f32 a2) const {
83
84}
85*/