mirror of
https://github.com/PrimeDecomp/prime.git
synced 2025-12-13 08:06:08 +00:00
57 lines
1.9 KiB
C++
57 lines
1.9 KiB
C++
#include "MetroidPrime/ScriptObjects/CScriptCameraWaypoint.hpp"
|
|
|
|
#include "MetroidPrime/CActorParameters.hpp"
|
|
|
|
CScriptCameraWaypoint::CScriptCameraWaypoint(TUniqueId uid, const rstl::string& name,
|
|
const CEntityInfo& info, const CTransform4f& xf,
|
|
bool active, float hfov, uint w1)
|
|
: CActor(uid, active, name, info, xf, CModelData::CModelDataNull(), CMaterialList(kMT_NoStepLogic),
|
|
CActorParameters::None(), kInvalidUniqueId)
|
|
, xe8_hfov(hfov)
|
|
, xec_(w1) {}
|
|
|
|
CScriptCameraWaypoint::~CScriptCameraWaypoint() {}
|
|
|
|
void CScriptCameraWaypoint::AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId uid,
|
|
CStateManager& mgr) {
|
|
CActor::AcceptScriptMsg(msg, uid, mgr);
|
|
if (GetActive()) {
|
|
switch (msg) {
|
|
case kSM_Arrived:
|
|
SendScriptMsgs(kSS_Arrived, mgr, kSM_None);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
TUniqueId CScriptCameraWaypoint::GetRandomNextWaypointId(const CStateManager& mgr) const {
|
|
rstl::vector< TUniqueId > candidateIds;
|
|
|
|
rstl::vector< SConnection >::const_iterator conn = x20_conns.begin();
|
|
|
|
for (; conn != x20_conns.end(); ++conn) {
|
|
if (conn->x0_state == kSS_Arrived && conn->x4_msg == kSM_Next) {
|
|
TUniqueId uid = mgr.GetIdForScript(conn->x8_objId);
|
|
if (uid == kInvalidUniqueId)
|
|
continue;
|
|
|
|
candidateIds.reserve(candidateIds.size() + 1);
|
|
candidateIds.push_back(uid);
|
|
}
|
|
}
|
|
|
|
if (candidateIds.empty())
|
|
return kInvalidUniqueId;
|
|
|
|
return candidateIds[mgr.GetActiveRandom()->Range(0, s32(candidateIds.size() - 1))];
|
|
}
|
|
|
|
void CScriptCameraWaypoint::AddToRenderer(const CFrustumPlanes&,
|
|
const CStateManager&) override const {}
|
|
|
|
void CScriptCameraWaypoint::Render(const CStateManager&) override const {}
|
|
|
|
void CScriptCameraWaypoint::Accept(IVisitor& visitor) { visitor.Visit(*this); }
|