Files
prime/src/MetroidPrime/ScriptObjects/CScriptCameraWaypoint.cpp
Henrique Gemignani Passos Lima 890d2bb2d1 Add almost matching CScriptCameraWaypoint
2022-10-21 19:43:34 +03:00

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); }