mirror of
https://github.com/SMGCommunity/Petari.git
synced 2025-02-26 00:45:52 +00:00
CameraTargetMtx
This commit is contained in:
parent
1ee8695a95
commit
c7b6bb44d8
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
};
|
@ -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];
|
||||
|
12
include/Game/Util/GravityUtil.h
Normal file
12
include/Game/Util/GravityUtil.h
Normal 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);
|
||||
}
|
@ -25,7 +25,7 @@ namespace JGeometry {
|
||||
struct TVec3 {
|
||||
public:
|
||||
inline TVec3() {
|
||||
|
||||
|
||||
}
|
||||
|
||||
TVec3(T _x, T _y, T _z);
|
||||
|
@ -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));
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
}
|
@ -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
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user