2
0
mirror of https://github.com/AxioDL/metaforce.git synced 2025-12-09 07:07:42 +00:00

Implement CStateManager::Update

This commit is contained in:
Jack Andersen
2017-03-23 19:30:16 -10:00
parent 5a6e40c5aa
commit db12dd2ea2
68 changed files with 1165 additions and 117 deletions

View File

@@ -1,4 +1,5 @@
#include "CBallCamera.hpp"
#include "TCastTo.hpp"
namespace urde
{
@@ -11,6 +12,11 @@ CBallCamera::CBallCamera(TUniqueId uid, TUniqueId id2, const zeus::CTransform& x
{
}
void CBallCamera::Accept(IVisitor& visitor)
{
visitor.Visit(this);
}
void CBallCamera::ProcessInput(const CFinalInput&, CStateManager& mgr)
{
}

View File

@@ -11,6 +11,7 @@ class CBallCamera : public CGameCamera
public:
CBallCamera(TUniqueId, TUniqueId, const zeus::CTransform& xf, float, float, float, float);
void Accept(IVisitor& visitor);
void ProcessInput(const CFinalInput&, CStateManager& mgr);
void Reset(const zeus::CTransform&, CStateManager& mgr);
};

View File

@@ -7,6 +7,11 @@
namespace urde
{
void CCameraFilterPass::Update(float dt)
{
}
void CCameraFilterPass::DrawFilter(EFilterType type, EFilterShape shape, const zeus::CColor& color,
const CTexture* tex, float uvScale)
{

View File

@@ -42,6 +42,7 @@ private:
static void DrawFilterShape(EFilterShape shape, const zeus::CColor& color,
const CTexture* tex, float uvScale);
public:
void Update(float dt);
void SetFilter(EFilterType type, EFilterShape shape, float, const zeus::CColor& color, u32) {}
void DisableFilter(float) {}
@@ -70,6 +71,7 @@ private:
//bool x2d_noPersistentCopy = false;
//u32 x30_persistentBuf = 0;
public:
void Draw();
void Update(float dt);
void SetBlur(EBlurType type, float amount, float duration);

View File

@@ -15,6 +15,8 @@
#include "CObjectList.hpp"
#include "TCastTo.hpp"
#include "CCinematicCamera.hpp"
#include "CBallCamera.hpp"
#include "CInterpolationCamera.hpp"
namespace urde
{
@@ -170,6 +172,25 @@ const CGameCamera* CCameraManager::GetCurrentCamera(const CStateManager& stateMg
return static_cast<const CGameCamera*>(camList->GetObjectById(GetCurrentCameraId()));
}
void CCameraManager::CreateStandardCameras(CStateManager& stateMgr)
{
TUniqueId fpId = stateMgr.AllocateUniqueId();
x7c_fpCamera = new CFirstPersonCamera(fpId, zeus::CTransform::Identity(),
stateMgr.Player()->GetUniqueId(), g_tweakPlayer->GetX184(),
sFirstPersonFOV, sNearPlane, sFarPlane, sAspect);
stateMgr.AddObject(x7c_fpCamera);
stateMgr.Player()->SetCameraState(CPlayer::EPlayerCameraState::Zero, stateMgr);
SetCurrentCameraId(fpId, stateMgr);
x80_ballCamera = new CBallCamera(stateMgr.AllocateUniqueId(), stateMgr.Player()->GetUniqueId(),
zeus::CTransform::Identity(), sThirdPersonFOV,
sNearPlane, sFarPlane, sAspect);
stateMgr.AddObject(x80_ballCamera);
x88_interpCamera = new CInterpolationCamera(stateMgr.AllocateUniqueId(), zeus::CTransform::Identity());
stateMgr.AddObject(x88_interpCamera);
}
void CCameraManager::SkipCinematic(CStateManager& stateMgr)
{
TUniqueId camId = GetCurrentCameraId();
@@ -263,4 +284,17 @@ void CCameraManager::SetSpecialCameras(CFirstPersonCamera& fp, CBallCamera& ball
x7c_fpCamera = &fp;
x80_ballCamera = &ball;
}
void CCameraManager::ProcessInput(const CFinalInput& input, CStateManager& stateMgr)
{
for (CEntity* ent : stateMgr.GetCameraObjectList())
{
if (!ent)
continue;
CGameCamera& cam = static_cast<CGameCamera&>(*ent);
if (input.ControllerIdx() != cam.x16c_controllerIdx)
continue;
cam.ProcessInput(input, stateMgr);
}
}
}

View File

@@ -13,6 +13,8 @@ class CStateManager;
class CGameCamera;
class CCameraShakeData;
class CScriptWater;
class CInterpolationCamera;
class CFinalInput;
class CCameraManager
{
@@ -32,6 +34,7 @@ class CCameraManager
CFirstPersonCamera* x7c_fpCamera = nullptr;
CBallCamera* x80_ballCamera = nullptr;
s16 x84_rumbleId = -1;
CInterpolationCamera* x88_interpCamera = nullptr;
float x90_ = 0.f;
float x94_ = 1.f;
float x98_ = 0.f;
@@ -87,6 +90,7 @@ public:
CGameCamera* GetCurrentCamera(CStateManager& stateMgr) const;
const CGameCamera* GetCurrentCamera(const CStateManager& stateMgr) const;
void SetCurrentCameraId(TUniqueId id, CStateManager& stateMgr) {x0_curCameraId = id;}
void CreateStandardCameras(CStateManager& stateMgr);
TUniqueId GetCurrentCameraId() const
{
if (x4_cineCameras.size())
@@ -116,6 +120,8 @@ public:
void UpdateListener(CStateManager&);
float CalculateFogDensity(CStateManager&, const CScriptWater*);
void ProcessInput(const CFinalInput& input, CStateManager& stateMgr);
};
}

View File

@@ -19,6 +19,11 @@ CFirstPersonCamera::CFirstPersonCamera(TUniqueId uid, const zeus::CTransform& xf
{
}
void CFirstPersonCamera::Accept(IVisitor& visitor)
{
visitor.Visit(this);
}
void CFirstPersonCamera::PreThink(float, CStateManager&) {}
void CFirstPersonCamera::Think(float, CStateManager&)

View File

@@ -25,8 +25,10 @@ class CFirstPersonCamera : public CGameCamera
float x1d4_ = 0.f;
public:
CFirstPersonCamera(TUniqueId, const zeus::CTransform& xf, TUniqueId, float, float, float, float, float);
CFirstPersonCamera(TUniqueId, const zeus::CTransform& xf, TUniqueId, float,
float fov, float nearplane, float farplane, float aspect);
void Accept(IVisitor& visitor);
void PreThink(float, CStateManager&);
void Think(float, CStateManager&);
void ProcessInput(const CFinalInput&, CStateManager& mgr);

View File

@@ -8,7 +8,7 @@ namespace urde
CGameCamera::CGameCamera(TUniqueId uid, bool active, const std::string& name, const CEntityInfo& info,
const zeus::CTransform& xf, float fovy, float znear, float zfar, float aspect, TUniqueId uid2,
bool b1, u32 w1)
bool b1, u32 controllerIdx)
: CActor(uid, active, name, info, xf, CModelData::CModelDataNull(), CMaterialList(EMaterialTypes::Unknown),
CActorParameters::None(), kInvalidUniqueId)
, xe8_watchedObject(uid2)
@@ -17,7 +17,7 @@ CGameCamera::CGameCamera(TUniqueId uid, bool active, const std::string& name, co
, x160_znear(znear)
, x164_zfar(zfar)
, x168_aspect(aspect)
, x16c_(w1)
, x16c_controllerIdx(controllerIdx)
, x170_24_perspDirty(true)
, x170_25_disablesInput(b1)
, x180_(fovy)

View File

@@ -10,6 +10,9 @@ class CFinalInput;
class CGameCamera : public CActor
{
friend class CStateManager;
friend class CCameraManager;
TUniqueId xe8_watchedObject;
zeus::CMatrix4f xec_perspectiveMatrix;
zeus::CTransform x12c_;
@@ -17,7 +20,7 @@ class CGameCamera : public CActor
float x160_znear;
float x164_zfar;
float x168_aspect;
u32 x16c_;
u32 x16c_controllerIdx;
bool x170_24_perspDirty : 1;
bool x170_25_disablesInput : 1;
float x174_ = 0.f;
@@ -27,7 +30,7 @@ class CGameCamera : public CActor
float x184_fov;
public:
CGameCamera(TUniqueId, bool active, const std::string& name, const CEntityInfo& info, const zeus::CTransform& xf,
float fov, float nearz, float farz, float aspect, TUniqueId, bool, u32);
float fov, float nearz, float farz, float aspect, TUniqueId, bool, u32 controllerIdx);
void AcceptScriptMsg(EScriptObjectMessage, TUniqueId, CStateManager&);
void SetActive(bool active);

View File

@@ -0,0 +1,47 @@
#include "CInterpolationCamera.hpp"
#include "CCameraManager.hpp"
#include "TCastTo.hpp"
namespace urde
{
CInterpolationCamera::CInterpolationCamera(TUniqueId uid, const zeus::CTransform& xf)
: CGameCamera(uid, false, "Interpolation Camera",
CEntityInfo(kInvalidAreaId, CEntity::NullConnectionList, kInvalidEditorId),
xf, CCameraManager::ThirdPersonFOV(), CCameraManager::NearPlane(),
CCameraManager::FarPlane(), CCameraManager::Aspect(), kInvalidUniqueId, false, 0)
{
}
void CInterpolationCamera::Accept(IVisitor& visitor)
{
visitor.Visit(this);
}
void CInterpolationCamera::AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId sender, CStateManager& mgr)
{
CGameCamera::AcceptScriptMsg(msg, sender, mgr);
}
void CInterpolationCamera::ProcessInput(const CFinalInput& input, CStateManager& mgr)
{
// Empty
}
void CInterpolationCamera::Render(const CStateManager& mgr) const
{
// Empty
}
void CInterpolationCamera::Reset(const zeus::CTransform&, CStateManager& mgr)
{
// Empty
}
void CInterpolationCamera::Think(float, CStateManager& mgr)
{
}
}

View File

@@ -0,0 +1,23 @@
#ifndef __URDE_CINTERPOLATIONCAMERA_HPP__
#define __URDE_CINTERPOLATIONCAMERA_HPP__
#include "CGameCamera.hpp"
namespace urde
{
class CInterpolationCamera : public CGameCamera
{
public:
CInterpolationCamera(TUniqueId uid, const zeus::CTransform& xf);
void Accept(IVisitor& visitor);
void AcceptScriptMsg(EScriptObjectMessage, TUniqueId, CStateManager&);
void ProcessInput(const CFinalInput&, CStateManager& mgr);
void Render(const CStateManager&) const;
void Reset(const zeus::CTransform&, CStateManager& mgr);
void Think(float, CStateManager &);
};
}
#endif // __URDE_CINTERPOLATIONCAMERA_HPP__

View File

@@ -3,6 +3,7 @@ set(CAMERA_SOURCES
CGameCamera.hpp CGameCamera.cpp
CFirstPersonCamera.hpp CFirstPersonCamera.cpp
CBallCamera.hpp CBallCamera.cpp
CInterpolationCamera.hpp CInterpolationCamera.cpp
CPathCamera.hpp CPathCamera.cpp
CCinematicCamera.hpp CCinematicCamera.cpp
CCameraShakeData.hpp CCameraShakeData.cpp