diff options
Diffstat (limited to 'src/KingSystem/Resource/resResourceAttClient.cpp')
| -rw-r--r-- | src/KingSystem/Resource/resResourceAttClient.cpp | 51 |
1 files changed, 51 insertions, 0 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]) { |
