SMG-Decomp
A decompilation of Super Mario Galaxy 1
Loading...
Searching...
No Matches
CameraShakeTask.cpp
1#include "Game/Camera/CameraShakePatternImpl.hpp"
2#include "Game/Camera/CameraShakeTask.hpp"
3
4CameraShakeTask::CameraShakeTask(CameraShakePattern *pPattern) {
5 mPattern = pPattern;
6 mHasEnded = true;
7 mIsInfinite = false;
8 _8 = 0;
9 _C = 0;
10 _10 = 0;
11}
12
13void CameraShakeTask::start(unsigned long a1, unsigned long a2) {
14 _8 = a1;
15 mIsInfinite = false;
16
17 startCommon(a2);
18}
19
20void CameraShakeTask::startInfinity(unsigned long a1) {
21 mIsInfinite = true;
22
23 startCommon(a1);
24}
25
26void CameraShakeTask::endForce() {
27 mHasEnded = true;
28}
29
30void CameraShakeTask::movement() {
31 if (!mHasEnded) {
32 if (!mPattern->isEnd()) {
33 updatePattern();
34 }
35
36 if (mPattern->isEnd()) {
37 updateInterval();
38 }
39 }
40}
41
42void CameraShakeTask::getOffset(TVec2f *pOffset) const {
43 if (mHasEnded || mPattern->isEnd()) {
44 pOffset->x = 0.0f;
45 pOffset->y = 0.0f;
46 }
47 else {
48 mPattern->getOffset(pOffset);
49 }
50}
51
52bool CameraShakeTask::isEnd() const {
53 return mHasEnded;
54}
55
56void CameraShakeTask::startCommon(unsigned long a1) {
57 _C = a1;
58 CameraShakePattern *pattern = mPattern;
59 mHasEnded = false;
60 pattern->_4 = 0;
61 pattern->start();
62}
63
64void CameraShakeTask::updatePattern() {
65 CameraShakePattern *pattern = mPattern;
66
67 pattern->_4++;
68 pattern->update();
69
70 if (mPattern->isEnd()) {
71 if (!mIsInfinite) {
72 _8--;
73 }
74
75 _10 = 0;
76 }
77}
78
79void CameraShakeTask::updateInterval() {
80 if (mIsInfinite || _8 != 0) {
81 if (++_10 < _C) {
82 return;
83 }
84
85 CameraShakePattern *pattern = mPattern;
86
87 pattern->_4 = 0;
88 pattern->start();
89 }
90 else {
91 mHasEnded = true;
92 }
93}