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:
@@ -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)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
};
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -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&)
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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);
|
||||
|
||||
47
Runtime/Camera/CInterpolationCamera.cpp
Normal file
47
Runtime/Camera/CInterpolationCamera.cpp
Normal 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)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
23
Runtime/Camera/CInterpolationCamera.hpp
Normal file
23
Runtime/Camera/CInterpolationCamera.hpp
Normal 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__
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user