SMG-Decomp
A decompilation of Super Mario Galaxy 1
Loading...
Searching...
No Matches
CameraTargetMtx.cpp
1#include "Game/AreaObj/CubeCamera.hpp"
2#include "Game/Camera/CameraTargetMtx.hpp"
3#include "Game/Util/GravityUtil.hpp"
4
6
7}
8
9bool CameraTargetObj::isTurning() const {
10 return false;
11}
12
13bool CameraTargetObj::isLongDrop() const {
14 return false;
15}
16
17bool CameraTargetObj::isBeeMode() const {
18 return false;
19}
20
21u32 CameraTargetObj::getSpecialMode() const {
22 return 0;
23}
24
25GravityInfo *CameraTargetObj::getGravityInfo() const {
26 return nullptr;
27}
28
29void CameraTargetObj::enableCameraWall() {
30 mCameraWall = true;
31}
32
33void CameraTargetObj::disableCameraWall() {
34 mCameraWall = false;
35}
36
37void CameraTargetObj::setCameraWall(bool enable) {
38 mCameraWall = enable;
39}
40
41bool CameraTargetObj::isDebugMode() const {
42 return false;
43}
44
45void CameraTargetObj::resetStatus() {
46
47}
48
49CameraTargetMtx::CameraTargetMtx(const char *pName) : CameraTargetObj(pName) {
50 mPosition.x = 0.0f;
51 mPosition.y = 0.0f;
52 mPosition.z = 0.0f;
53 mLastMove.x = 0.0f;
54 mLastMove.y = 0.0f;
55 mLastMove.z = 0.0f;
56 mGravityVector.x = 0.0f;
57 mGravityVector.y = -1.0f;
58 mGravityVector.z = 0.0f;
59 mUp.x = 0.0f;
60 mUp.y = 1.0f;
61 mUp.z = 0.0f;
62 mFront.x = 0.0f;
63 mFront.y = 0.0f;
64 mFront.z = 1.0f;
65 mSide.x = 0.0f;
66 mSide.y = 0.0f;
67 mSide.z = 1.0f;
68 mInvalidLastMove = false;
69 mCameraArea = nullptr;
70 mMatrix.identity();
71}
72
73CameraTargetMtx::~CameraTargetMtx() {
74
75}
76
77#ifdef NON_MATCHING
78// Wrong instruction order for the first 4 TVec3f.set(), register mismatch
79void CameraTargetMtx::movement() {
80 mUp.set(mMatrix.mMtx[0][1], mMatrix.mMtx[1][1], mMatrix.mMtx[2][1]);
81 mFront.set(mMatrix.mMtx[0][2], mMatrix.mMtx[1][2], mMatrix.mMtx[2][2]);
82 mSide.set(mMatrix.mMtx[0][0], mMatrix.mMtx[1][0], mMatrix.mMtx[2][0]);
83
84 TVec3f position;
85 position.set(mMatrix.mMtx[0][3], mMatrix.mMtx[1][3], mMatrix.mMtx[2][3]);
86
87 if (mInvalidLastMove) {
88 mInvalidLastMove = false;
89 mLastMove.z = 0.0f;
90 mLastMove.y = 0.0f;
91 mLastMove.x = 0.0f;
92 }
93 else {
94 register TVec3f &rPos = position;
95 register TVec3f &thisPos = mPosition;
96 register TVec3f &thisLastMove = mLastMove;
97
98 __asm {
99 psq_l f0, 0(rPos), 0, 0
100 psq_l f1, 0(thisPos), 0, 0
101 psq_l f2, 8(thisPos), 1, 0
102 ps_sub f0, f0, f1
103 psq_st f0, 0(thisLastMove), 0, 0
104 psq_l f0, 8(rPos), 1, 0
105 ps_sub f0, f0, f2
106 psq_st f0, 8(thisLastMove), 1, 0
107 }
108 }
109
110 mPosition.x = position.x;
111 mPosition.y = position.y;
112 mPosition.z = position.z;
113
114 AreaObj *area = MR::getAreaObj("CubeCamera", mPosition);
115
116 if (area == nullptr) {
117 mCameraArea = nullptr;
118 }
119 else {
120 mCameraArea = reinterpret_cast<CubeCameraArea *>(area);
121 }
122
123 MR::calcGravityVectorOrZero(this, mPosition, &mGravityVector, nullptr, 0);
124}
125#endif
126
127const TVec3f *CameraTargetMtx::getPosition() const {
128 return &mPosition;
129}
130
131const TVec3f *CameraTargetMtx::getUpVec() const {
132 return &mUp;
133}
134
135const TVec3f *CameraTargetMtx::getFrontVec() const {
136 return &mFront;
137}
138
139const TVec3f *CameraTargetMtx::getSideVec() const {
140 return &mSide;
141}
142
143const TVec3f *CameraTargetMtx::getLastMove() const {
144 return &mLastMove;
145}
146
147const TVec3f *CameraTargetMtx::getGroundPos() const {
148 return &mPosition;
149}
150
151const TVec3f *CameraTargetMtx::getGravityVector() const {
152 return &mGravityVector;
153}
154
155CubeCameraArea *CameraTargetMtx::getCubeCameraArea() const {
156 return mCameraArea;
157}
158
159void CameraTargetMtx::invalidateLastMove() {
160 mInvalidLastMove = true;
161}
virtual void init(const JMapInfoIter &)
Intializes the NameObj and can set various settings and construct necessary classes.