#pragma once #include #include #include #include #include #include #include #include "KingSystem/Resource/resResource.h" #include "KingSystem/Utils/Types.h" namespace ksys::map { class Object; } namespace ksys::phys { struct ActorInfo; class BodyGroup; struct StaticCompoundInfo; class StaticCompound : public res::Resource, public sead::hostio::Node { SEAD_RTTI_OVERRIDE(StaticCompound, res::Resource) public: StaticCompound(); ~StaticCompound() override; void setMapObject(u32 hash_id, u32 srt_hash, map::Object* object); map::Object* getMapObject(int shape_idx) const; bool disableCollision(int actor_idx, bool x); BodyGroup* getFieldBodyGroup(int idx); bool hasFieldBodyGroup(BodyGroup* group) const; // res::Resource interface void doCreate_(u8* buffer, u32 buffer_size, sead::Heap* parent_heap) override; bool needsParse() const override { return true; } bool finishParsing_() override; bool m7_() override; void cleanUp(); bool calledFromMapDtor(); int getNumFieldBodyGroups() const { return mFieldBodyGroups.size(); } bool x_3(); void x_4(); StaticCompound* sub_7100FCAD0C(sead::Matrix34f& mtx); private: enum class Flag { Initialised = 1 << 0, }; sead::TypedBitFlag mFlags; sead::Heap* mHeap{}; const StaticCompoundInfo* mStaticCompoundInfo{}; void* mBuffer{}; int mBufferSize{}; void* mContainerBuffer{}; int mContainerBufferSize{}; sead::Buffer mFieldBodyGroups; sead::FixedSafeString<32> mName; sead::Matrix34f mMtx = sead::Matrix34f::ident; sead::Buffer mMapObjects{}; sead::CriticalSection mCS; }; KSYS_CHECK_SIZE_NX150(StaticCompound, 0x140); } // namespace ksys::phys