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

Initial CMetroidPrimeExo imps

This commit is contained in:
2020-09-13 21:12:00 -07:00
parent 82c62b0312
commit 130c60ccc8
5 changed files with 720 additions and 4 deletions

View File

@@ -1,5 +1,7 @@
#include "Runtime/MP1/World/CMetroidPrimeRelay.hpp"
#include "Runtime/MP1/World/CMetroidPrimeExo.hpp"
#include "Runtime/CStateManager.hpp"
#include "TCastTo.hpp" // Generated file, do not modify include path
namespace urde::MP1 {
@@ -27,5 +29,44 @@ CMetroidPrimeRelay::CMetroidPrimeRelay(TUniqueId uid, std::string_view name, con
, xcb8_roomParms(std::move(roomParms)) {}
void CMetroidPrimeRelay::Accept(IVisitor& visitor) { visitor.Visit(this); }
void CMetroidPrimeRelay::AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId objId, CStateManager& mgr) {
if (x34_mpUid == objId) {
ForwardMessageToMetroidPrimeExo(msg, mgr);
}
if (msg == EScriptObjectMessage::InitializedInArea) {
GetOrBuildMetroidPrimeExo(mgr);
}
}
void CMetroidPrimeRelay::ForwardMessageToMetroidPrimeExo(EScriptObjectMessage msg, CStateManager& mgr) {
if (auto* exo = CPatterned::CastTo<CMetroidPrimeExo>(mgr.ObjectById(x34_mpUid))) {
mgr.SendScriptMsg(exo, GetUniqueId(), msg);
}
}
void CMetroidPrimeRelay::GetOrBuildMetroidPrimeExo(CStateManager& mgr) {
if (!GetActive()) {
return;
}
for (const auto& act : mgr.GetPhysicsActorObjectList()) {
if (CPatterned::CastTo<CMetroidPrimeExo>(act) != nullptr) {
return;
}
}
const auto& animParms = x74_parms.x4_patternedInfo.GetAnimationParameters();
CModelData mData(
CAnimRes(animParms.GetACSFile(), animParms.GetCharacter(), x68_scale, animParms.GetInitialAnimation(), true));
auto* exo = new CMetroidPrimeExo(
mgr.AllocateUniqueId(), "Metroid Prime! (Stage 1)"sv, CEntityInfo(GetAreaId(), NullConnectionList), x38_xf, std::move(mData),
x74_parms.x4_patternedInfo, x74_parms.x13c_actorParms, x74_parms.x1a4_, x74_parms.x1a8_, x74_parms.x27c_,
x74_parms.x350_, x74_parms.x424_, x74_parms.x460_particle1, x74_parms.x464_, x74_parms.x708_wpsc1,
x74_parms.x70c_dInfo1, x74_parms.x728_shakeData1, x74_parms.x7fc_wpsc2, x74_parms.x800_dInfo2,
x74_parms.x81c_shakeData2, x74_parms.x8f0_, x74_parms.x92c_, x74_parms.x948_, x74_parms.xa1c_particle2,
x74_parms.xa20_swoosh, x74_parms.xa24_particle3, x74_parms.xa28_particle4, x74_parms.xa2c_);
mgr.AddObject(exo);
mgr.SendScriptMsg(exo, kInvalidUniqueId, EScriptObjectMessage::InitializedInArea);
}
} // namespace urde::MP1