CameraTargetMtx

This commit is contained in:
Wexos 2021-12-26 15:48:42 +01:00
parent 1ee8695a95
commit c7b6bb44d8
10 changed files with 205 additions and 88 deletions

View File

@ -925,16 +925,16 @@ isOnGround__18CameraTargetHolderCFv,CameraTargetHolder.o,Camera.a,true
isMoving__18CameraTargetHolderCFv,CameraTargetHolder.o,Camera.a,true
__dt__18CameraTargetHolderFv,CameraTargetHolder.o,Camera.a,true
__ct__15CameraTargetMtxFPCc,CameraTargetMtx.o,Camera.a,true
getPosition__15CameraTargetMtxCFv,CameraTargetMtx.o,Camera.a,false
getUpVec__15CameraTargetMtxCFv,CameraTargetMtx.o,Camera.a,false
getFrontVec__15CameraTargetMtxCFv,CameraTargetMtx.o,Camera.a,false
getSideVec__15CameraTargetMtxCFv,CameraTargetMtx.o,Camera.a,false
getLastMove__15CameraTargetMtxCFv,CameraTargetMtx.o,Camera.a,false
getGroundPos__15CameraTargetMtxCFv,CameraTargetMtx.o,Camera.a,false
getGravityVector__15CameraTargetMtxCFv,CameraTargetMtx.o,Camera.a,false
getCubeCameraArea__15CameraTargetMtxCFv,CameraTargetMtx.o,Camera.a,false
getPosition__15CameraTargetMtxCFv,CameraTargetMtx.o,Camera.a,true
getUpVec__15CameraTargetMtxCFv,CameraTargetMtx.o,Camera.a,true
getFrontVec__15CameraTargetMtxCFv,CameraTargetMtx.o,Camera.a,true
getSideVec__15CameraTargetMtxCFv,CameraTargetMtx.o,Camera.a,true
getLastMove__15CameraTargetMtxCFv,CameraTargetMtx.o,Camera.a,true
getGroundPos__15CameraTargetMtxCFv,CameraTargetMtx.o,Camera.a,true
getGravityVector__15CameraTargetMtxCFv,CameraTargetMtx.o,Camera.a,true
getCubeCameraArea__15CameraTargetMtxCFv,CameraTargetMtx.o,Camera.a,true
invalidateLastMove__15CameraTargetMtxFv,CameraTargetMtx.o,Camera.a,false
__dt__15CameraTargetMtxFv,CameraTargetMtx.o,Camera.a,false
__dt__15CameraTargetMtxFv,CameraTargetMtx.o,Camera.a,true
__dt__15CameraTargetObjFv,CameraTargetMtx.o,Camera.a,true
resetStatus__15CameraTargetObjFv,CameraTargetMtx.o,Camera.a,true
isDebugMode__15CameraTargetObjCFv,CameraTargetMtx.o,Camera.a,true

1 Symbol Name Object File Library Archive Matching
925 isMoving__18CameraTargetHolderCFv CameraTargetHolder.o Camera.a true
926 __dt__18CameraTargetHolderFv CameraTargetHolder.o Camera.a true
927 __ct__15CameraTargetMtxFPCc CameraTargetMtx.o Camera.a true
928 getPosition__15CameraTargetMtxCFv CameraTargetMtx.o Camera.a false true
929 getUpVec__15CameraTargetMtxCFv CameraTargetMtx.o Camera.a false true
930 getFrontVec__15CameraTargetMtxCFv CameraTargetMtx.o Camera.a false true
931 getSideVec__15CameraTargetMtxCFv CameraTargetMtx.o Camera.a false true
932 getLastMove__15CameraTargetMtxCFv CameraTargetMtx.o Camera.a false true
933 getGroundPos__15CameraTargetMtxCFv CameraTargetMtx.o Camera.a false true
934 getGravityVector__15CameraTargetMtxCFv CameraTargetMtx.o Camera.a false true
935 getCubeCameraArea__15CameraTargetMtxCFv CameraTargetMtx.o Camera.a false true
936 invalidateLastMove__15CameraTargetMtxFv CameraTargetMtx.o Camera.a false
937 __dt__15CameraTargetMtxFv CameraTargetMtx.o Camera.a false true
938 __dt__15CameraTargetObjFv CameraTargetMtx.o Camera.a true
939 resetStatus__15CameraTargetObjFv CameraTargetMtx.o Camera.a true
940 isDebugMode__15CameraTargetObjCFv CameraTargetMtx.o Camera.a true

View File

@ -5024,7 +5024,7 @@ isUseAppearCamera__16SpinDriverCameraCFP9LiveActor,SpinDriverCamera.o,MapObj.a,f
init__16SpinDriverCameraFRC12JMapInfoIterP9LiveActor,SpinDriverCamera.o,MapObj.a,false
initAppearCamera__16SpinDriverCameraFRC12JMapInfoIterP9LiveActor,SpinDriverCamera.o,MapObj.a,false
__ct__15CameraTargetArgFP15CameraTargetMtx,SpinDriverCamera.o,MapObj.a,true
setMtx__15CameraTargetMtxFPA4_f,SpinDriverCamera.o,MapObj.a,false
setMtx__15CameraTargetMtxFPA4_f,SpinDriverCamera.o,MapObj.a,true
__ct__21SpinDriverOperateRingFPCc,SpinDriverOperateRing.o,MapObj.a,false
init__21SpinDriverOperateRingFRC12JMapInfoIter,SpinDriverOperateRing.o,MapObj.a,false
control__21SpinDriverOperateRingFv,SpinDriverOperateRing.o,MapObj.a,false

1 Symbol Name Object File Library Archive Matching
5024 init__16SpinDriverCameraFRC12JMapInfoIterP9LiveActor SpinDriverCamera.o MapObj.a false
5025 initAppearCamera__16SpinDriverCameraFRC12JMapInfoIterP9LiveActor SpinDriverCamera.o MapObj.a false
5026 __ct__15CameraTargetArgFP15CameraTargetMtx SpinDriverCamera.o MapObj.a true
5027 setMtx__15CameraTargetMtxFPA4_f SpinDriverCamera.o MapObj.a false true
5028 __ct__21SpinDriverOperateRingFPCc SpinDriverOperateRing.o MapObj.a false
5029 init__21SpinDriverOperateRingFRC12JMapInfoIter SpinDriverOperateRing.o MapObj.a false
5030 control__21SpinDriverOperateRingFv SpinDriverOperateRing.o MapObj.a false

View File

@ -6,37 +6,31 @@
class CameraTargetMtx : public CameraTargetObj {
public:
CameraTargetMtx(const char *);
virtual ~CameraTargetMtx();
virtual void movement();
virtual TVec3f *getPosition() const;
virtual TVec3f *getUpVec() const;
virtual TVec3f *getFrontVec() const;
virtual TVec3f *getSideVec() const;
virtual TVec3f *getLastMove() const;
virtual TVec3f *getGroundPos() const;
virtual TVec3f *getGravityVector() const;
virtual const TVec3f *getPosition() const;
virtual const TVec3f *getUpVec() const;
virtual const TVec3f *getFrontVec() const;
virtual const TVec3f *getSideVec() const;
virtual const TVec3f *getLastMove() const;
virtual const TVec3f *getGroundPos() const;
virtual const TVec3f *getGravityVector() const;
virtual CubeCameraArea *getCubeCameraArea() const;
void invalidateLastMove();
void setMtx(MtxPtr);
TMtx34f _10;
f32 _40;
f32 _44;
f32 _48;
f32 _4C;
f32 _50;
f32 _54;
f32 _58;
f32 _5C;
f32 _60;
f32 _64;
f32 _68;
f32 _6C;
f32 _70;
f32 _74;
f32 _78;
f32 _7C;
f32 _80;
f32 _84;
u8 _88;
TMtx34f mMatrix; // _10
TVec3f mPosition; // _40
TVec3f mLastMove; // _4C
TVec3f mGravityVector; // _58
TVec3f mUp; // _64
TVec3f mFront; // _70
TVec3f mSide; // _7C
bool mInvalidLastMove; // _88
u8 _89[3];
u32 _8C;
CubeCameraArea *mCameraArea; // _8C
};

View File

@ -10,17 +10,20 @@ class LiveActor;
class CameraTargetObj : public NameObj {
public:
CameraTargetObj(const char *);
virtual ~CameraTargetObj();
virtual inline ~CameraTargetObj() {
}
virtual void init(const JMapInfoIter &);
virtual TVec3f *getPosition() const = 0;
virtual TVec3f *getUpVec() const = 0;
virtual TVec3f *getFrontVec() const = 0;
virtual TVec3f *getSideVec() const = 0;
virtual TVec3f *getLastMove() const = 0;
virtual TVec3f *getGroundPos() const = 0;
virtual TVec3f *getGravityVector() const = 0;
virtual const TVec3f *getPosition() const = 0;
virtual const TVec3f *getUpVec() const = 0;
virtual const TVec3f *getFrontVec() const = 0;
virtual const TVec3f *getSideVec() const = 0;
virtual const TVec3f *getLastMove() const = 0;
virtual const TVec3f *getGroundPos() const = 0;
virtual const TVec3f *getGravityVector() const = 0;
virtual f32 getRadius() const;
virtual bool isTurning() const;
@ -53,13 +56,13 @@ public:
CameraTargetActor(const char *);
virtual ~CameraTargetActor();
virtual TVec3f *getPosition() const;
virtual TVec3f *getUpVec() const;
virtual TVec3f *getFrontVec() const;
virtual TVec3f *getSideVec() const;
virtual TVec3f *getLastMove() const;
virtual TVec3f *getGroundPos() const;
virtual TVec3f *getGravityVector() const;
virtual const TVec3f *getPosition() const;
virtual const TVec3f *getUpVec() const;
virtual const TVec3f *getFrontVec() const;
virtual const TVec3f *getSideVec() const;
virtual const TVec3f *getLastMove() const;
virtual const TVec3f *getGroundPos() const;
virtual const TVec3f *getGravityVector() const;
const LiveActor *_10;
f32 _14;
@ -78,13 +81,13 @@ class CameraTargetPlayer : public CameraTargetObj {
public:
CameraTargetPlayer(const char *);
virtual TVec3f *getPosition() const;
virtual TVec3f *getUpVec() const;
virtual TVec3f *getFrontVec() const;
virtual TVec3f *getSideVec() const;
virtual TVec3f *getLastMove() const;
virtual TVec3f *getGroundPos() const;
virtual TVec3f *getGravityVector() const;
virtual const TVec3f *getPosition() const;
virtual const TVec3f *getUpVec() const;
virtual const TVec3f *getFrontVec() const;
virtual const TVec3f *getSideVec() const;
virtual const TVec3f *getLastMove() const;
virtual const TVec3f *getGroundPos() const;
virtual const TVec3f *getGravityVector() const;
void *_10; // const MarioActor *
u8 _14[0x24];

View File

@ -0,0 +1,12 @@
#pragma once
#include "JSystem/JGeometry/TVec.h"
class GravityInfo;
class LiveActor;
class NameObj;
namespace MR {
void calcGravityVectorOrZero(const LiveActor *, TVec3f *, GravityInfo *, unsigned long);
void calcGravityVectorOrZero(const NameObj *, const TVec3f &, TVec3f *, GravityInfo *, unsigned long);
}

View File

@ -25,7 +25,7 @@ namespace JGeometry {
struct TVec3 {
public:
inline TVec3() {
}
TVec3(T _x, T _y, T _z);

View File

@ -655,7 +655,7 @@ void CameraManGame::updateWaterSurface() {
void CameraManGame::updateGCapture() {
CubeCameraArea::setCurrentCategory(CubeCameraArea::CATEGORY_UNKNOWN_3);
CameraTargetObj *target = CameraLocalUtil::getTarget(this);
TVec3f *position = target->getPosition();
const TVec3f *position = target->getPosition();
CubeCameraArea *area = reinterpret_cast<CubeCameraArea *>(MR::getAreaObj("CubeCamera", *position));

View File

@ -39,7 +39,7 @@ bool CameraTargetHolder::isOnGround() const {
}
bool CameraTargetHolder::isMoving() const {
TVec3f *lastMove = mTarget->getLastMove();
const TVec3f *lastMove = mTarget->getLastMove();
float length = PSVECMag(reinterpret_cast<const Vec *>(lastMove));
return length > 1.0f;

View File

@ -1,8 +1,6 @@
#include "Game/AreaObj/CubeCamera.h"
#include "Game/Camera/CameraTargetMtx.h"
CameraTargetObj::~CameraTargetObj() {
}
#include "Game/Util/GravityUtil.h"
void CameraTargetObj::init(const JMapInfoIter &rIter) {
@ -45,25 +43,115 @@ void CameraTargetObj::resetStatus() {
}
CameraTargetMtx::CameraTargetMtx(const char *pName) : CameraTargetObj(pName) {
_40 = 0.0f;
_44 = 0.0f;
_48 = 0.0f;
_4C = 0.0f;
_50 = 0.0f;
_54 = 0.0f;
_58 = 0.0f;
_5C = -1.0f;
_60 = 0.0f;
_64 = 0.0f;
_68 = 1.0f;
_6C = 0.0f;
_70 = 0.0f;
_74 = 0.0f;
_78 = 1.0f;
_7C = 0.0f;
_80 = 0.0f;
_84 = 1.0f;
_88 = 0;
_8C = 0;
_10.identity();
mPosition.x = 0.0f;
mPosition.y = 0.0f;
mPosition.z = 0.0f;
mLastMove.x = 0.0f;
mLastMove.y = 0.0f;
mLastMove.z = 0.0f;
mGravityVector.x = 0.0f;
mGravityVector.y = -1.0f;
mGravityVector.z = 0.0f;
mUp.x = 0.0f;
mUp.y = 1.0f;
mUp.z = 0.0f;
mFront.x = 0.0f;
mFront.y = 0.0f;
mFront.z = 1.0f;
mSide.x = 0.0f;
mSide.y = 0.0f;
mSide.z = 1.0f;
mInvalidLastMove = false;
mCameraArea = NULL;
mMatrix.identity();
}
CameraTargetMtx::~CameraTargetMtx() {
}
#ifdef NON_MATCHING
// Wrong instruction order for the first 4 TVec3f.set(), register mismatch
void CameraTargetMtx::movement() {
mUp.set(mMatrix.mMtx[0][1], mMatrix.mMtx[1][1], mMatrix.mMtx[2][1]);
mFront.set(mMatrix.mMtx[0][2], mMatrix.mMtx[1][2], mMatrix.mMtx[2][2]);
mSide.set(mMatrix.mMtx[0][0], mMatrix.mMtx[1][0], mMatrix.mMtx[2][0]);
TVec3f position;
position.set(mMatrix.mMtx[0][3], mMatrix.mMtx[1][3], mMatrix.mMtx[2][3]);
if (mInvalidLastMove) {
mInvalidLastMove = false;
mLastMove.z = 0.0f;
mLastMove.y = 0.0f;
mLastMove.x = 0.0f;
}
else {
register TVec3f &rPos = position;
register TVec3f &thisPos = mPosition;
register TVec3f &thisLastMove = mLastMove;
__asm {
psq_l f0, 0(rPos), 0, 0
psq_l f1, 0(thisPos), 0, 0
psq_l f2, 8(thisPos), 1, 0
ps_sub f0, f0, f1
psq_st f0, 0(thisLastMove), 0, 0
psq_l f0, 8(rPos), 1, 0
ps_sub f0, f0, f2
psq_st f0, 8(thisLastMove), 1, 0
}
}
mPosition.x = position.x;
mPosition.y = position.y;
mPosition.z = position.z;
AreaObj *area = MR::getAreaObj("CubeCamera", mPosition);
if (area == NULL) {
mCameraArea = NULL;
}
else {
mCameraArea = reinterpret_cast<CubeCameraArea *>(area);
}
MR::calcGravityVectorOrZero(this, mPosition, &mGravityVector, NULL, 0);
}
#endif
const TVec3f *CameraTargetMtx::getPosition() const {
return &mPosition;
}
const TVec3f *CameraTargetMtx::getUpVec() const {
return &mUp;
}
const TVec3f *CameraTargetMtx::getFrontVec() const {
return &mFront;
}
const TVec3f *CameraTargetMtx::getSideVec() const {
return &mSide;
}
const TVec3f *CameraTargetMtx::getLastMove() const {
return &mLastMove;
}
const TVec3f *CameraTargetMtx::getGroundPos() const {
return &mPosition;
}
const TVec3f *CameraTargetMtx::getGravityVector() const {
return &mGravityVector;
}
CubeCameraArea *CameraTargetMtx::getCubeCameraArea() const {
return mCameraArea;
}
void CameraTargetMtx::invalidateLastMove() {
mInvalidLastMove = true;
}

View File

@ -1,8 +1,28 @@
#include "Game/Camera/CameraTargetArg.h"
#include "Game/Camera/CameraTargetMtx.h"
CameraTargetArg::CameraTargetArg(CameraTargetMtx *pTargetMtx) {
mTargetObj = NULL;
mTargetMtx = pTargetMtx;
mLiveActor = NULL;
mMarioActor = NULL;
}
void CameraTargetMtx::setMtx(register MtxPtr mtx) {
register TMtx34f &dst = mMatrix;
__asm {
psq_l f0, 0x00(mtx), 0x0, 0
psq_l f1, 0x08(mtx), 0x0, 0
psq_l f2, 0x10(mtx), 0x0, 0
psq_l f3, 0x18(mtx), 0x0, 0
psq_l f4, 0x20(mtx), 0x0, 0
psq_l f5, 0x28(mtx), 0x0, 0
psq_st f0, 0x00(dst), 0x0, 0
psq_st f1, 0x08(dst), 0x0, 0
psq_st f2, 0x10(dst), 0x0, 0
psq_st f3, 0x18(dst), 0x0, 0
psq_st f4, 0x20(dst), 0x0, 0
psq_st f5, 0x28(dst), 0x0, 0
}
}