2
0
mirror of https://github.com/AxioDL/metaforce.git synced 2025-12-08 17:04:55 +00:00

Implement CScriptCameraHint scripting interface

This commit is contained in:
Jack Andersen
2017-10-04 19:40:44 -10:00
parent 213cacb0fb
commit c46010256c
7 changed files with 230 additions and 20 deletions

View File

@@ -18,6 +18,10 @@ public:
Four,
Five
};
enum class EBallCameraBehaviour
{
};
private:
TUniqueId x3dc_tooCloseActorId = kInvalidUniqueId;
float x3e0_ = 10000.f;

View File

@@ -1,22 +1,15 @@
#include "CCameraManager.hpp"
#include "CCameraShakeData.hpp"
#include "CFirstPersonCamera.hpp"
#include "Audio/CSfxManager.hpp"
#include "CGameCamera.hpp"
#include "CStateManager.hpp"
#include "Input/CRumbleManager.hpp"
#include "World/CScriptWater.hpp"
#include "World/CPlayer.hpp"
#include "World/CScriptWater.hpp"
#include "CPlayerState.hpp"
#include "GameGlobalObjects.hpp"
#include "Graphics/CGraphics.hpp"
#include "Particle/CGenDescription.hpp"
#include "CObjectList.hpp"
#include "TCastTo.hpp"
#include "CCinematicCamera.hpp"
#include "CBallCamera.hpp"
#include "CInterpolationCamera.hpp"
#include "World/CScriptCameraHint.hpp"
namespace urde
{
@@ -219,6 +212,7 @@ float CCameraManager::sub80009148() const
void CCameraManager::UpdateCameraHints(float, CStateManager& mgr)
{
}
void CCameraManager::ThinkCameras(float dt, CStateManager& mgr)
@@ -335,4 +329,44 @@ void CCameraManager::RemoveCinemaCamera(TUniqueId uid, CStateManager& mgr)
{
x4_cineCameras.erase(std::remove(x4_cineCameras.begin(), x4_cineCameras.end(), uid));
}
void CCameraManager::DeleteCameraHint(TUniqueId id, CStateManager& mgr)
{
if (TCastToPtr<CScriptCameraHint> hint = mgr.ObjectById(id))
{
auto search = std::find_if(x2b0_inactiveCameraHints.begin(), x2b0_inactiveCameraHints.end(),
[id](TUniqueId tid) { return tid == id; });
if (search == x2b0_inactiveCameraHints.end())
{
hint->ClearIdList();
hint->SetInactive(true);
if (x2b0_inactiveCameraHints.size() != 64)
x2b0_inactiveCameraHints.push_back(id);
}
}
}
void CCameraManager::AddInactiveCameraHint(TUniqueId id, CStateManager& mgr)
{
if (TCastToPtr<CScriptCameraHint> hint = mgr.ObjectById(id))
{
auto search = std::find_if(x2b0_inactiveCameraHints.begin(), x2b0_inactiveCameraHints.end(),
[id](TUniqueId tid) { return tid == id; });
if (search == x2b0_inactiveCameraHints.end() &&
x2b0_inactiveCameraHints.size() != 64)
x2b0_inactiveCameraHints.push_back(id);
}
}
void CCameraManager::AddActiveCameraHint(TUniqueId id, CStateManager& mgr)
{
if (TCastToPtr<CScriptCameraHint> hint = mgr.ObjectById(id))
{
auto search = std::find_if(x334_activeCameraHints.begin(), x334_activeCameraHints.end(),
[id](TUniqueId tid) { return tid == id; });
if (search == x334_activeCameraHints.end() && xac_ != 64 &&
x334_activeCameraHints.size() != 64)
x334_activeCameraHints.push_back(id);
}
}
}

View File

@@ -57,6 +57,9 @@ class CCameraManager
u32 xa8_ = 1000;
u32 xac_ = 0;
rstl::reserved_vector<TUniqueId, 64> x2b0_inactiveCameraHints;
rstl::reserved_vector<TUniqueId, 64> x334_activeCameraHints;
union
{
struct
@@ -110,7 +113,6 @@ public:
CFirstPersonCamera* GetFirstPersonCamera() { return x7c_fpCamera; }
CBallCamera* GetBallCamera() { return x80_ballCamera; }
CBallCamera* BallCamera(CStateManager&) const;
CGameArea::CAreaFog& Fog() { return x3c_fog; }
float sub80009148() const;
@@ -131,6 +133,11 @@ public:
int GetFluidCounter() const { return x74_fluidCounter; }
float GetCameraBobMagnitude() const;
bool HasBallCameraInitialPositionHint(CStateManager& mgr) const;
void DeleteCameraHint(TUniqueId id, CStateManager& mgr);
void AddInactiveCameraHint(TUniqueId id, CStateManager& mgr);
void AddActiveCameraHint(TUniqueId id, CStateManager& mgr);
};
}