mirror of
https://github.com/AxioDL/metaforce.git
synced 2025-12-09 21:47:59 +00:00
Add CBallCamera stubs, more implementations
This commit is contained in:
@@ -6,6 +6,7 @@
|
||||
|
||||
namespace urde
|
||||
{
|
||||
class CPlayer;
|
||||
|
||||
class CCameraSpring
|
||||
{
|
||||
@@ -63,7 +64,18 @@ public:
|
||||
Eight
|
||||
};
|
||||
private:
|
||||
u32 x188_ = 0;
|
||||
struct SFailsafeState
|
||||
{
|
||||
zeus::CTransform x0_;
|
||||
zeus::CTransform x30_;
|
||||
zeus::CVector3f x60_;
|
||||
zeus::CVector3f x6c_;
|
||||
zeus::CVector3f x78_;
|
||||
zeus::CVector3f x84_;
|
||||
std::vector<zeus::CVector3f> x90_;
|
||||
};
|
||||
|
||||
EBallCameraBehaviour x188_behaviour = EBallCameraBehaviour::Zero;
|
||||
bool x18c_24_ : 1;
|
||||
bool x18c_25_ : 1;
|
||||
bool x18c_26_ : 1;
|
||||
@@ -83,15 +95,15 @@ private:
|
||||
bool x18e_24_ : 1;
|
||||
bool x18e_25_ : 1;
|
||||
bool x18e_26_ : 1;
|
||||
bool x18e_27_ : 1;
|
||||
bool x18e_28_ : 1;
|
||||
float x190_origMinDistance;
|
||||
float x194_minDistance;
|
||||
bool x18e_27_nearbyDoorClosed : 1;
|
||||
bool x18e_28_nearbyDoorClosing : 1;
|
||||
float x190_curMinDistance;
|
||||
float x194_targetMinDistance;
|
||||
float x198_maxDistance;
|
||||
float x19c_backwardsDistance;
|
||||
float x1a0_elevation;
|
||||
float x1a4_origAnglePerSecond;
|
||||
float x1a8_anglePerSecond;
|
||||
float x1a4_curAnglePerSecond;
|
||||
float x1a8_targetAnglePerSecond;
|
||||
float x1ac_ = 1.5533431f;
|
||||
float x1b0_ = 1.5533431f;
|
||||
zeus::CVector3f x1b4_lookAtOffset;
|
||||
@@ -108,39 +120,25 @@ private:
|
||||
std::vector<CCameraCollider> x264_smallColliders;
|
||||
std::vector<CCameraCollider> x274_mediumColliders;
|
||||
std::vector<CCameraCollider> x284_largeColliders;
|
||||
float x294_ = 0.f;
|
||||
float x298_ = 0.f;
|
||||
float x29c_ = 0.f;
|
||||
float x2a0_ = 0.f;
|
||||
float x2a4_ = 0.f;
|
||||
float x2a8_ = 1.f;
|
||||
float x2ac_ = 0.f;
|
||||
float x2b0_ = 0.f;
|
||||
float x2b4_ = 1.f;
|
||||
float x2b8_ = 0.f;
|
||||
float x2bc_ = 0.f;
|
||||
float x2c0_ = 1.f;
|
||||
zeus::CVector3f x294_;
|
||||
zeus::CVector3f x2a0_ = zeus::CVector3f::skUp;
|
||||
zeus::CVector3f x2ac_ = zeus::CVector3f::skUp;
|
||||
zeus::CVector3f x2b8_ = zeus::CVector3f::skUp;
|
||||
u32 x2c4_ = 0;
|
||||
u32 x2c8_ = 0;
|
||||
u32 x2cc_ = 0;
|
||||
u32 x2d0_ = 0;
|
||||
u32 x2d4_ = 0;
|
||||
u32 x2d8_ = 0;
|
||||
float x2dc_ = 0.f;
|
||||
float x2e0_ = 0.f;
|
||||
float x2e4_ = 0.f;
|
||||
zeus::CVector3f x2dc_;
|
||||
float x2e8_ = 0.f;
|
||||
float x2ec_ = 0.f;
|
||||
zeus::CVector3f x2f0_;
|
||||
zeus::CVector3f x2fc_;
|
||||
float x308_ = 0.f;
|
||||
float x30c_ = 0.f;
|
||||
float x310_ = 0.f;
|
||||
float x314_ = 0.f;
|
||||
float x318_ = 0.f;
|
||||
float x31c_ = 0.f;
|
||||
float x320_ = 0.f;
|
||||
float x324_ = 0.f;
|
||||
zeus::CVector3f x310_;
|
||||
zeus::CVector3f x31c_;
|
||||
u32 x328_ = 0;
|
||||
float x32c_ = 1.f;
|
||||
float x330_ = 0.2f;
|
||||
@@ -153,6 +151,7 @@ private:
|
||||
u32 x36c_ = 0;
|
||||
bool x370_24_ : 1;
|
||||
float x374_ = 0.f;
|
||||
float x378_;
|
||||
CCameraSpline x37c_camSpline;
|
||||
CMaterialList x3c8_ = {EMaterialTypes::Unknown};
|
||||
bool x3d0_24_ : 1;
|
||||
@@ -180,24 +179,71 @@ private:
|
||||
CCameraSpring x448_ballCameraBoostSpring;
|
||||
zeus::CVector3f x45c_;
|
||||
float x468_;
|
||||
TUniqueId x46c_ = kInvalidUniqueId;
|
||||
TUniqueId x46c_collisionActorId = kInvalidUniqueId;
|
||||
float x470_ = 0.f;
|
||||
float x474_ = 0.f;
|
||||
u32 x478_ = 0;
|
||||
std::unique_ptr<SFailsafeState> x47c_failsafeState;
|
||||
std::unique_ptr<u32> x480_;
|
||||
|
||||
void SetupColliders(std::vector<CCameraCollider>& out, float xMag, float zMag, float radius, int count,
|
||||
float tardis, float max, float startAngle);
|
||||
void ResetSpline(CStateManager& mgr);
|
||||
void BuildSpline(CStateManager& mgr);
|
||||
bool ShouldResetSpline(CStateManager& mgr) const;
|
||||
void UpdatePlayerMovement(float dt, CStateManager& mgr);
|
||||
void UpdateTransform(const zeus::CVector3f& lookDir, const zeus::CVector3f& pos, float dt, CStateManager& mgr);
|
||||
zeus::CVector3f ConstrainYawAngle(const CPlayer& player, float f1, float f2, float dt) const;
|
||||
void CheckFailsafe(float dt, CStateManager& mgr);
|
||||
void UpdateObjectTooCloseId(CStateManager& mgr);
|
||||
void UpdateAnglePerSecond(float dt);
|
||||
void UpdateUsingPathCameras(float dt, CStateManager& mgr);
|
||||
zeus::CVector3f GetFixedLookTarget(const zeus::CVector3f& pos, CStateManager& mgr) const;
|
||||
void UpdateUsingFixedCameras(float dt, CStateManager& mgr);
|
||||
zeus::CVector3f ComputeVelocity(const zeus::CVector3f& curVel, const zeus::CVector3f& posDelta) const;
|
||||
zeus::CVector3f TweenVelocity(const zeus::CVector3f& curVel, const zeus::CVector3f& newVel, float rate, float dt);
|
||||
zeus::CVector3f MoveCollisionActor(const zeus::CVector3f& pos, float dt, CStateManager& mgr);
|
||||
void UpdateUsingFreeLook(float dt, CStateManager& mgr);
|
||||
zeus::CVector3f InterpolateCameraElevation(const zeus::CVector3f& camPos) const;
|
||||
zeus::CVector3f CalculateCollidersCentroid(const std::vector<CCameraCollider>& colliderList, int w1) const;
|
||||
zeus::CVector3f ApplyColliders();
|
||||
void UpdateColliders(const zeus::CTransform& xf, std::vector<CCameraCollider>& colliderList, int& r6, int r7,
|
||||
float f1, const rstl::reserved_vector<TUniqueId, 1024>& nearList, float f2,
|
||||
CStateManager& mgr);
|
||||
void AvoidGeometry(const zeus::CTransform& xf, const rstl::reserved_vector<TUniqueId, 1024>& nearList,
|
||||
float dt, CStateManager& mgr);
|
||||
void AvoidGeometryFull(const zeus::CTransform& xf, const rstl::reserved_vector<TUniqueId, 1024>& nearList,
|
||||
float dt, CStateManager& mgr);
|
||||
zeus::CAABox CalculateCollidersBoundingBox(const std::vector<CCameraCollider>& colliderList,
|
||||
CStateManager& mgr) const;
|
||||
int CountObscuredColliders(const std::vector<CCameraCollider>& colliderList) const;
|
||||
void UpdateCollidersDistances(std::vector<CCameraCollider>& colliderList, float f1, float f2, float f3);
|
||||
void UpdateUsingColliders(float dt, CStateManager& mgr);
|
||||
void UpdateUsingSpindleCameras(float dt, CStateManager& mgr);
|
||||
zeus::CVector3f ClampElevationToWater(zeus::CVector3f& pos, CStateManager& mgr) const;
|
||||
void UpdateUsingTransitions(float dt, CStateManager& mgr);
|
||||
zeus::CTransform UpdateCameraPositions(float dt, const zeus::CTransform& oldXf, const zeus::CTransform& newXf);
|
||||
bool CheckFailsafeFromMorphBallState(CStateManager& mgr) const;
|
||||
bool SplineIntersectTest(CMaterialList& intersectMat, CStateManager& mgr) const;
|
||||
bool IsBallNearDoor(CStateManager& mgr) const;
|
||||
void ActivateFailsafe(float dt, CStateManager& mgr);
|
||||
void ConstrainElevationAndDistance(float& elevation, float& distance, float f1, CStateManager& mgr);
|
||||
zeus::CVector3f FindDesiredPosition(float distance, float elevation, const zeus::CVector3f& dir, CStateManager& mgr);
|
||||
static bool DetectCollision(const zeus::CVector3f& from, const zeus::CVector3f& to, float margin,
|
||||
float& d, CStateManager& mgr);
|
||||
|
||||
public:
|
||||
CBallCamera(TUniqueId uid, TUniqueId watchedId, const zeus::CTransform& xf,
|
||||
float fovy, float znear, float zfar, float aspect);
|
||||
|
||||
void Accept(IVisitor& visitor);
|
||||
void ProcessInput(const CFinalInput&, CStateManager& mgr);
|
||||
void AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId objId, CStateManager& stateMgr);
|
||||
void ProcessInput(const CFinalInput& input, CStateManager& mgr);
|
||||
void Reset(const zeus::CTransform&, CStateManager& mgr);
|
||||
void Render(const CStateManager& mgr) const;
|
||||
EBallCameraState GetState() const { return x400_state; }
|
||||
void SetState(EBallCameraState state, CStateManager& mgr);
|
||||
void Think(float dt, CStateManager& mgr);
|
||||
bool TransitionFromMorphBallState(CStateManager& mgr);
|
||||
TUniqueId GetTooCloseActorId() const { return x3dc_tooCloseActorId; }
|
||||
float GetX3E0() const { return x3e0_; }
|
||||
@@ -205,12 +251,14 @@ public:
|
||||
void TeleportCamera(const zeus::CTransform& xf, CStateManager& mgr);
|
||||
const zeus::CVector3f& GetX1D8() const { return x1d8_; }
|
||||
void ResetToTweaks(CStateManager& mgr);
|
||||
void UpdateLookAtPosition(float offset, CStateManager& mgr);
|
||||
void UpdateLookAtPosition(float dt, CStateManager& mgr);
|
||||
zeus::CTransform UpdateLookDirection(const zeus::CVector3f& dir, CStateManager& mgr);
|
||||
void SetX470(float f) { x470_ = f; }
|
||||
void SetX474(float f) { x474_ = f; }
|
||||
void ApplyCameraHint(CStateManager& mgr);
|
||||
void ResetPosition();
|
||||
void DoorClosed(TUniqueId doorId);
|
||||
void DoorClosing(TUniqueId doorId);
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user