Get Exo off the DataSpec

This commit is contained in:
Phillip Stephens 2022-02-20 16:35:43 -08:00
parent 1655d229cf
commit 64d4b0388c
Signed by: Antidote
GPG Key ID: F8BEE4C83DACA60D
1 changed files with 53 additions and 16 deletions

View File

@ -22,6 +22,8 @@
#include "Runtime/World/CWorld.hpp" #include "Runtime/World/CWorld.hpp"
#include "Runtime/World/ScriptLoader.hpp" #include "Runtime/World/ScriptLoader.hpp"
#include "Runtime/Streams/IOStreams.hpp"
#include "TCastTo.hpp" // Generated file, do not modify include path #include "TCastTo.hpp" // Generated file, do not modify include path
namespace metaforce::MP1 { namespace metaforce::MP1 {
@ -174,26 +176,59 @@ static CPatternedInfo LoadPatternedInfo(CInputStream& in) {
return CPatternedInfo(in, pcount.second); return CPatternedInfo(in, pcount.second);
} }
using CameraShakeData = DataSpec::DNAMP1::MetroidPrimeStage1::MassivePrimeStruct::CameraShakeData; struct SExoCameraShakePoint {
float x0_attackTime{};
float x4_sustainTime{};
float x8_duration{};
float xc_magnitude{};
SExoCameraShakePoint() = default;
SExoCameraShakePoint(CInputStream& in)
: x0_attackTime(in.ReadFloat())
, x4_sustainTime(in.ReadFloat())
, x8_duration(in.ReadFloat())
, xc_magnitude(in.ReadFloat()) {}
};
static SCameraShakePoint BuildCameraShakePoint(CameraShakeData::CameraShakerComponent::CameraShakePoint& sp) { struct SExoCameraShakerComponent {
return SCameraShakePoint(false, sp.attackTime, sp.sustainTime, sp.duration, sp.magnitude); bool x0_useModulation{};
SExoCameraShakePoint x4_am{};
SExoCameraShakePoint x14_fm{};
SExoCameraShakerComponent() = default;
explicit SExoCameraShakerComponent(CInputStream& in)
: x0_useModulation(in.ReadBool()), x4_am(in.Get<SExoCameraShakePoint>()), x14_fm(in.Get<SExoCameraShakePoint>()) {}
};
struct SExoCameraShakeData {
bool x0_useSfx{};
float x4_duration{};
float x8_sfxDist{};
std::array<SExoCameraShakerComponent, 3> xc_components{};
SExoCameraShakeData() = default;
explicit SExoCameraShakeData(CInputStream& in)
: x0_useSfx(in.ReadBool()), x4_duration(in.ReadFloat()), x8_sfxDist(in.ReadFloat()) {
for (auto& component : xc_components) {
component = in.Get<SExoCameraShakerComponent>();
}
}
};
static SCameraShakePoint BuildCameraShakePoint(SExoCameraShakePoint& sp) {
return {false, sp.x0_attackTime, sp.x4_sustainTime, sp.x8_duration, sp.xc_magnitude};
} }
static CCameraShakerComponent BuildCameraShakerComponent(CameraShakeData::CameraShakerComponent& comp) { static CCameraShakerComponent BuildCameraShakerComponent(SExoCameraShakerComponent& comp) {
return CCameraShakerComponent(comp.useModulation, BuildCameraShakePoint(comp.am), BuildCameraShakePoint(comp.fm)); return {comp.x0_useModulation, BuildCameraShakePoint(comp.x4_am), BuildCameraShakePoint(comp.x14_fm)};
} }
static CCameraShakeData LoadCameraShakeData(CInputStream& in) { static CCameraShakeData LoadCameraShakeData(CInputStream& in) {
#if 0 auto shakeData = in.Get<SExoCameraShakeData>();
CameraShakeData shakeData; return {shakeData.x4_duration,
shakeData.read(in); shakeData.x8_sfxDist,
return CCameraShakeData(shakeData.duration, shakeData.sfxDist, u32(shakeData.useSfx), zeus::skZero3f, u32(shakeData.x0_useSfx),
BuildCameraShakerComponent(shakeData.shakerComponents[0]), zeus::skZero3f,
BuildCameraShakerComponent(shakeData.shakerComponents[1]), BuildCameraShakerComponent(shakeData.xc_components[0]),
BuildCameraShakerComponent(shakeData.shakerComponents[2])); BuildCameraShakerComponent(shakeData.xc_components[1]),
#endif BuildCameraShakerComponent(shakeData.xc_components[2])};
return {};
} }
static rstl::reserved_vector<SPrimeStruct4, 4> LoadPrimeStruct4s(CInputStream& in) { static rstl::reserved_vector<SPrimeStruct4, 4> LoadPrimeStruct4s(CInputStream& in) {
@ -206,8 +241,9 @@ static rstl::reserved_vector<SPrimeStruct4, 4> LoadPrimeStruct4s(CInputStream& i
static rstl::reserved_vector<SPrimeStruct6, 4> LoadPrimeStruct6s(CInputStream& in) { static rstl::reserved_vector<SPrimeStruct6, 4> LoadPrimeStruct6s(CInputStream& in) {
rstl::reserved_vector<SPrimeStruct6, 4> ret; rstl::reserved_vector<SPrimeStruct6, 4> ret;
for (int i = 0; i < 4; ++i) for (int i = 0; i < 4; ++i) {
ret.emplace_back(in); ret.emplace_back(in);
}
return ret; return ret;
} }
@ -1492,7 +1528,8 @@ TUniqueId CMetroidPrimeExo::GetNextAttackWaypoint(CStateManager& mgr, bool b1) {
return lastUid; return lastUid;
} }
TUniqueId CMetroidPrimeExo::GetWaypointForBehavior(CStateManager& mgr, EScriptObjectState state, EScriptObjectMessage msg) { TUniqueId CMetroidPrimeExo::GetWaypointForBehavior(CStateManager& mgr, EScriptObjectState state,
EScriptObjectMessage msg) {
if (TCastToConstPtr<CMetroidPrimeRelay> relay = mgr.GetObjectById(x568_relayId)) { if (TCastToConstPtr<CMetroidPrimeRelay> relay = mgr.GetObjectById(x568_relayId)) {
rstl::reserved_vector<TUniqueId, 8> uids; rstl::reserved_vector<TUniqueId, 8> uids;
for (const auto& conn : relay->GetConnectionList()) { for (const auto& conn : relay->GetConnectionList()) {