#pragma once #include #include #include #include #include "Runtime/CFactoryMgr.hpp" #include "Runtime/IOStreams.hpp" #include "Runtime/Character/CSegId.hpp" #include "Runtime/Character/CSegIdList.hpp" #include "Runtime/Character/TSegIdMap.hpp" #include namespace metaforce { class CCharLayoutNode { public: struct Bone { CSegId x0_parentId; zeus::CVector3f x4_origin; std::vector x10_children; void read(CInputStream& in); }; private: TSegIdMap x0_boneMap; public: explicit CCharLayoutNode(CInputStream& in); const TSegIdMap& GetBoneMap() const { return x0_boneMap; } }; class CCharLayoutInfo { std::shared_ptr x0_node; CSegIdList x8_segIdList; std::map> x18_segIdMap; public: explicit CCharLayoutInfo(CInputStream& in); const std::shared_ptr& GetRootNode() const { return x0_node; } const CSegIdList& GetSegIdList() const { return x8_segIdList; } zeus::CVector3f GetFromParentUnrotated(const CSegId& id) const; zeus::CVector3f GetFromRootUnrotated(const CSegId& id) const; CSegId GetSegIdFromString(std::string_view name) const; }; CFactoryFnReturn FCharLayoutInfo(const SObjectTag&, CInputStream&, const CVParamTransfer&, CObjectReference* selfRef); } // namespace metaforce