summaryrefslogtreecommitdiff
path: root/src/KingSystem/Resource
diff options
context:
space:
mode:
authorLéo Lam <leo@leolam.fr>2021-04-26 12:29:17 +0200
committerLéo Lam <leo@leolam.fr>2021-04-26 12:41:20 +0200
commita500ebc6a4fa007609e7b9dbac944e6c51e64166 (patch)
tree75e20ee58948222d8f6809e18dfe3c74d8bce0a8 /src/KingSystem/Resource
parent33b2c465942d6a1a29bde3b025dbaf8ef9ae3fd4 (diff)
ksys/res: Implement AttClient
Diffstat (limited to 'src/KingSystem/Resource')
-rw-r--r--src/KingSystem/Resource/resResourceAttClient.cpp51
-rw-r--r--src/KingSystem/Resource/resResourceAttClient.h4
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;