#pragma once #include #include #include #include "Runtime/IOStreams.hpp" #include "Runtime/RetroTypes.hpp" #include "Runtime/Character/CEffectComponent.hpp" #include "Runtime/Character/CPASDatabase.hpp" #include namespace urde { 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(const std::vector& part, const std::vector& swhc, const std::vector& elsc1, const std::vector& elsc2) : x0_part(part), x10_swhc(swhc), x20_elsc(elsc1), x30_elsc(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 = 0; CAssetId xac_cskrOverlay = 0; std::vector xb0_animIdxs; public: 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; } const s32 GetAnimationIndex(std::string_view) const; }; } // namespace urde