SMG-Decomp
A decompilation of Super Mario Galaxy 1
Loading...
Searching...
No Matches
CameraShakePatternImpl.cpp
1#include "Game/Camera/CameraShakePatternImpl.hpp"
2#include "Game/Util/MathUtil.hpp"
3#include "Game/AreaObj/MercatorTransformCube.hpp"
4
5CameraShakePatternSingly::CameraShakePatternSingly(float a1) : CameraShakePattern() {
6 _8 = a1;
7 mDirection.x = 0.0f;
8 mDirection.y = 1.0f;
9}
10
11CameraShakePatternSingly::~CameraShakePatternSingly() {
12
13}
14
15bool CameraShakePatternSingly::isEnd() const {
16 return _4 >= 25;
17}
18
19void CameraShakePatternSingly::getOffset(TVec2f *pOffset) const {
20 pOffset->set(mOffset);
21}
22
23void CameraShakePatternSingly::start() {
24 mOffset.y = 0.0f;
25 mOffset.x = 0.0f;
26}
27
28#ifdef NON_MATCHING
29// Stack issue, fmuls operations order
30void CameraShakePatternSingly::update() {
31 s32 uStack44 = 25 - static_cast<s32>(_4);
32
33 if (uStack44 < 0) {
34 uStack44 = 0;
35 }
36
37 f32 dVar2 = MR::sin((12.566371f * static_cast<f32>(uStack44)) / 25.0f);
38 f32 dVar3 = _8 * dVar2;
39
40 f32 dVar2_2 = MR::sin((1.5707964f * static_cast<f32>(uStack44)) / 25.0f);
41
42 dVar3 *= dVar2_2;
43
44 f32 offsetX = mDirection.x * dVar3;
45 f32 offsetY = mDirection.y * dVar3;
46
47 TVec2f newOffset;
48 newOffset.x = offsetX;
49 newOffset.y = offsetY;
50
51 TVec2f newOffset2 = newOffset;
52
53 mOffset.set(newOffset2);
54}
55#endif
56
57void CameraShakePatternSingly::setDirection(const TVec2f &rDir) {
58 mDirection.set(rDir);
59 MR::normalize(&mDirection);
60}
61
62CameraShakePatternVerticalSin::CameraShakePatternVerticalSin(float a1, float a2) {
63 _8 = a1;
64 _C = a2;
65 mOffset.x = 0.0f;
66 mOffset.y = 0.0f;
67}
68
69CameraShakePatternVerticalSin::~CameraShakePatternVerticalSin() {
70
71}
72
73bool CameraShakePatternVerticalSin::isEnd() const {
74 f32 var = static_cast<f32>(_4);
75
76 return _C <= var;
77}
78
79void CameraShakePatternVerticalSin::getOffset(TVec2f *pOffset) const {
80 pOffset->set(mOffset);
81}
82
83void CameraShakePatternVerticalSin::start() {
84 mOffset.x = 0.0f;
85 mOffset.y = 0.0f;
86}
87
88void CameraShakePatternVerticalSin::update() {
89 if (_C < 0.01) {
90 mOffset.y = 0.0f;
91 mOffset.x = 0.0f;
92 }
93 else {
94 f32 dVar2 = MR::sin((6.2831855f * static_cast<f32>(_4)) / _C);
95
96 f32 nVar2 = -dVar2;
97 f32 var = _8 * nVar2;
98
99 mOffset.x = 0.0f;
100 mOffset.y = var;
101 }
102}