diff options
| author | Léo Lam <leo@leolam.fr> | 2021-04-26 12:29:17 +0200 |
|---|---|---|
| committer | Léo Lam <leo@leolam.fr> | 2021-04-26 12:41:20 +0200 |
| commit | a500ebc6a4fa007609e7b9dbac944e6c51e64166 (patch) | |
| tree | 75e20ee58948222d8f6809e18dfe3c74d8bce0a8 /src/KingSystem/Resource | |
| parent | 33b2c465942d6a1a29bde3b025dbaf8ef9ae3fd4 (diff) | |
ksys/res: Implement AttClient
Diffstat (limited to 'src/KingSystem/Resource')
| -rw-r--r-- | src/KingSystem/Resource/resResourceAttClient.cpp | 51 | ||||
| -rw-r--r-- | src/KingSystem/Resource/resResourceAttClient.h | 4 |
2 files changed, 54 insertions, 1 deletions
diff --git a/src/KingSystem/Resource/resResourceAttClient.cpp b/src/KingSystem/Resource/resResourceAttClient.cpp index a1e18a8f..dc00b1a7 100644 --- a/src/KingSystem/Resource/resResourceAttClient.cpp +++ b/src/KingSystem/Resource/resResourceAttClient.cpp @@ -4,6 +4,57 @@ namespace ksys::res { +AttClientList::~AttClientList() { + mClients.freeBuffer(); +} + +void AttClientList::doCreate_(u8* buffer, u32 buffer_size, sead::Heap* heap) {} + +bool AttClientList::parse_(u8* data, size_t size, sead::Heap* heap) { + if (!data) + return false; + + agl::utl::ResParameterArchive archive{data}; + const auto root = archive.getRootList(); + + mAttPos.init(&mAttPosObj); + mForceEdit.init(false, "ForceEdit", "強制編集", "", &mAttPosObj); + addObj(&mAttPosObj, "AttPos"); + + const auto AttClients = agl::utl::getResParameterList(root, "AttClients"); + if (int num; AttClients && (num = AttClients.getResParameterObjNum()) != 0) { + mClients.allocBufferAssert(num, heap); + for (auto it = mClients.begin(), end = mClients.end(); it != end; ++it) { + it->client = nullptr; + it->name.init("", "Name", "クライアントのキー名", "", &it->obj); + it->file_name.init("", "FileName", "クライアントのデータファイル名", "", &it->obj); + it->is_valid.init(true, "IsValid", "デフォルトの有効・無効状態", "", &it->obj); + + mAttClientsList.addObj( + &it->obj, sead::FormatFixedSafeString<32>("%s%d", "AttClient_", it.getIndex())); + } + } + + addList(&mAttClientsList, "AttClients"); + + applyResParameterArchive(archive); + return true; +} + +bool AttClientList::finishParsing_() { + return true; +} + +bool AttClientList::m7_() { + for (auto& client : mClients) + client.client = nullptr; + return true; +} + +bool AttClientList::isForceEdit() const { + return mForceEdit.ref(); +} + AttClient::~AttClient() { for (int i = 0; i < mChecks.size(); ++i) { if (mChecks[i]) { diff --git a/src/KingSystem/Resource/resResourceAttClient.h b/src/KingSystem/Resource/resResourceAttClient.h index 4015ad6e..dd0977fa 100644 --- a/src/KingSystem/Resource/resResourceAttClient.h +++ b/src/KingSystem/Resource/resResourceAttClient.h @@ -70,9 +70,11 @@ public: auto operator=(const AttClientList&) = delete; const AttPos& getAttPos() const { return mAttPos; } - bool isForceEdit() const { return mForceEdit.ref(); } + bool isForceEdit() const; const sead::Buffer<Client>& 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; |
