SMG-Decomp
A decompilation of Super Mario Galaxy 1
Loading...
Searching...
No Matches
SpinDriverCamera.cpp
1#include "Game/MapObj/SpinDriverCamera.hpp"
2#include "Game/Camera/CameraTargetMtx.hpp"
3
4SpinDriverCamera::SpinDriverCamera() {
5 mCamera = nullptr;
6 mTargetMtx = nullptr;
7 mCameraInfo = nullptr;
8 mAppearCameraFrame = 0;
9}
10
11void SpinDriverCamera::startAppearCamera(LiveActor *pActor, const TVec3f &a2, const TVec3f &a3, const TVec3f &a4) {
12 if (mCameraInfo) {
13 mAppearCameraFrame = MR::getMultiActorCameraFrames(pActor, mCameraInfo, "出現イベント用");
14
15 if (mAppearCameraFrame > 0) {
16 MR::startMultiActorCameraTargetOther(pActor, mCameraInfo, "出現イベント用", CameraTargetArg(mTargetMtx), -1);
17 TPos3f upPos;
18 MR::makeMtxUpFrontPos(&upPos, a2, a3, a4);
19 mTargetMtx->setMtx(upPos.toMtxPtr());
20 }
21 }
22}
23
24void SpinDriverCamera::endAppearCamera(LiveActor *pActor) {
25 if (mCameraInfo && mAppearCameraFrame > 0) {
26 MR::endMultiActorCamera(pActor, mCameraInfo, "出現イベント用", false, -1);
27 }
28}
29
30u32 SpinDriverCamera::getAppearCameraFrames() const {
31 return mAppearCameraFrame;
32}
33
34void SpinDriverCamera::update(const TVec3f &a1, const TVec3f &a2) {
35 if (mCamera) {
36 switch(mCamera->isEnd()) {
37 case false:
38 mCamera->update();
39 updateTargetMatrix(a1, a2);
40 break;
41 }
42 }
43}
44
45void SpinDriverCamera::cancel() {
46 if (mCamera) {
47 mCamera->endForceSoon();
48 }
49}
50
51void SpinDriverCamera::end() {
52 if (mCamera) {
53 mCamera->endForceAtLanding();
54 mCamera->changeTargetPlayer();
55 }
56}
57
58// SpinDriverCamera::updateTargetMatrix
59
60BOOL SpinDriverCamera::isUseAppearCamera(LiveActor *pActor) const {
61 if (!mCameraInfo) {
62 return false;
63 }
64
65 u32 frames = MR::getMultiActorCameraFrames(pActor, mCameraInfo, "出現イベント用");
66 return (-frames & ~frames) >> 31;
67}
68
69void SpinDriverCamera::init(const JMapInfoIter &rIter, LiveActor *pActor) {
70 ActorCameraInfo info(rIter);
71
72 if (info.mCameraSetID != -1) {
73 s32 arg3 = 1;
74 MR::getJMapInfoArg3NoInit(rIter, &arg3);
75 mCamera = new MultiEventCamera();
76 mCamera->setUp(pActor->mName, new ActorCameraInfo(rIter), arg3);
77 mCamera->setEndCameraTypeAtLanding();
78 mTargetMtx = new CameraTargetMtx("カメラターゲットダミー");
79 }
80}
81
82void SpinDriverCamera::initAppearCamera(const JMapInfoIter &rIter, LiveActor *pActor) {
83 ActorCameraInfo info(rIter);
84 if (info.mCameraSetID != -1) {
85 MR::initMultiActorCamera(pActor, rIter, &mCameraInfo, "出現イベント用");
86 mAppearCameraFrame = MR::getMultiActorCameraFrames(pActor, mCameraInfo, "出現イベント用");
87 }
88}
The basis of a drawable actor that can contain states (see: Nerve)
Definition LiveActor.hpp:24
const char * mName
A string to identify the NameObj.
Definition NameObj.hpp:38