#pragma once #include #include #include #include "Runtime/Streams/IOStreams.hpp" #include "Runtime/RetroTypes.hpp" #include "Runtime/Character/CEffectComponent.hpp" #include "Runtime/Character/CPASDatabase.hpp" #include namespace metaforce { class CCharacterInfo { friend class CAnimData; public: struct CParticleResData { std::vector x0_part; std::vector x10_swhc; std::vector x20_elsc; std::vector x30_elsc; CParticleResData(CInputStream& in, u16 tableCount); CParticleResData(std::vector part, std::vector swhc, std::vector elsc1, std::vector elsc2) : x0_part(std::move(part)), x10_swhc(std::move(swhc)), x20_elsc(std::move(elsc1)), x30_elsc(std::move(elsc2)) {} }; private: u16 x0_tableCount; std::string x4_name; CAssetId x14_cmdl; CAssetId x18_cskr; CAssetId x1c_cinf; std::vector>> x20_animInfo; CPASDatabase x30_pasDatabase; CParticleResData x44_partRes; u32 x84_unk; std::vector> x88_aabbs; std::vector>> x98_effects; CAssetId xa8_cmdlOverlay; CAssetId xac_cskrOverlay; std::vector xb0_animIdxs; public: explicit CCharacterInfo(CInputStream& in); std::string_view GetCharacterName() const { return x4_name; } CAssetId GetModelId() const { return x14_cmdl; } CAssetId GetSkinRulesId() const { return x18_cskr; } CAssetId GetCharLayoutInfoId() const { return x1c_cinf; } const std::vector>& GetAnimBBoxList() const { return x88_aabbs; } const std::vector>>& GetEffectList() const { return x98_effects; } CAssetId GetIceModelId() const { return xa8_cmdlOverlay; } CAssetId GetIceSkinRulesId() const { return xac_cskrOverlay; } const CParticleResData& GetParticleResData() const { return x44_partRes; } s32 GetAnimationIndex(s32 idx) const { return xb0_animIdxs.at(idx); } const CPASDatabase& GetPASDatabase() const { return x30_pasDatabase; } s32 GetAnimationIndex(std::string_view) const; }; } // namespace metaforce