#pragma once #include #include #include #include #include #include "KingSystem/ActorSystem/Attention/actAttention.h" #include "KingSystem/Resource/Actor/resResourceAttPos.h" #include "KingSystem/Resource/resResource.h" #include "KingSystem/Utils/ParamIO.h" #include "KingSystem/Utils/Types.h" namespace ksys::res { class AttCheck; class AttClient : public ParamIO, public Resource { SEAD_RTTI_OVERRIDE(AttClient, Resource) public: AttClient() : ParamIO("atcl", 0) {} ~AttClient() override; act::AttType getAttType() const { return mAttType; } act::AttActionCode getActionCode() const { return mActionCode; } act::AttPriorityType getPriorityType() const { return mPriorityType; } const sead::SafeString& getPriorityTypeStr() const { return mPriorityTypeStr; } const sead::Buffer& getChecks() const { return mChecks; } int getNumChecks() const; // TODO: check functions void appendPriority(sead::BufferedSafeString* str); void doCreate_(u8*, u32, sead::Heap*) override; bool needsParse() const override { return true; } bool parse_(u8* data, size_t size, sead::Heap* heap) override; private: act::AttType mAttType = act::AttType::Action; act::AttActionCode mActionCode = act::AttActionCode::None; act::AttPriorityType mPriorityType = act::AttPriorityType::Default; sead::FixedSafeString<32> mPriorityTypeStr; agl::utl::ParameterObj mAttClientParamsObj; agl::utl::Parameter> mAttTypeParam; agl::utl::Parameter> mActionTypeParam; agl::utl::Parameter> mPriorityTypeParam; sead::Buffer mChecks; }; KSYS_CHECK_SIZE_NX150(AttClient, 0x428); class AttClientList : public ParamIO, public Resource { SEAD_RTTI_OVERRIDE(AttClientList, Resource) public: struct Client { const char* getFileName() const { return file_name.ref().cstr(); } agl::utl::Parameter name; agl::utl::Parameter file_name; agl::utl::Parameter is_valid; agl::utl::ParameterObj obj; AttClient* client; }; KSYS_CHECK_SIZE_NX150(Client, 0xa8); AttClientList() : ParamIO("atcllist", 0) {} ~AttClientList() override; AttClientList(const AttClientList&) = delete; auto operator=(const AttClientList&) = delete; const AttPos& getAttPos() const { return mAttPos; } bool isForceEdit() const; const sead::Buffer& getClients() const { return mClients; } // TODO: one more function void addClient_(s32 index, AttClient* client) { mClients[index].client = client; } void doCreate_(u8* buffer, u32 buffer_size, sead::Heap* heap) override; bool needsParse() const override { return true; } bool parse_(u8* data, size_t size, sead::Heap* heap) override; bool finishParsing_() override; bool m7_() override; private: agl::utl::ParameterList mAttClientsList; agl::utl::ParameterObj mAttPosObj; AttPos mAttPos; agl::utl::Parameter mForceEdit; sead::Buffer mClients; }; KSYS_CHECK_SIZE_NX150(AttClientList, 0x3f0); } // namespace ksys::res