summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLéo Lam <leo@leolam.fr>2021-04-04 16:30:31 +0200
committerLéo Lam <leo@leolam.fr>2021-04-04 16:31:07 +0200
commitf3f4cb78a4789ff4b3fe1d7ecb1b48bfe573412a (patch)
treea222918e5716a88e5c2e922d8a9cf75fe7e2d1f0 /src
parent62181dd4db468a921f6a66a4e3e191d075ec1b34 (diff)
ksys/gdt: Implement Manager::loadShopGameDataInfo
Diffstat (limited to 'src')
-rw-r--r--src/KingSystem/GameData/gdtManager.cpp36
-rw-r--r--src/KingSystem/GameData/gdtManager.h4
2 files changed, 38 insertions, 2 deletions
diff --git a/src/KingSystem/GameData/gdtManager.cpp b/src/KingSystem/GameData/gdtManager.cpp
index 7597cc49..8258bd56 100644
--- a/src/KingSystem/GameData/gdtManager.cpp
+++ b/src/KingSystem/GameData/gdtManager.cpp
@@ -13,9 +13,13 @@
#include "KingSystem/GameData/gdtTriggerParam.h"
#include "KingSystem/Map/mapMubinIter.h"
#include "KingSystem/Resource/resEntryFactory.h"
+#include "KingSystem/Resource/resLoadRequest.h"
#include "KingSystem/Resource/resResourceGameData.h"
#include "KingSystem/Resource/resSystem.h"
#include "KingSystem/System/OverlayArenaSystem.h"
+#include "KingSystem/Utils/Byaml/Byaml.h"
+#include "KingSystem/Utils/Byaml/ByamlArrayIter.h"
+#include "KingSystem/Utils/Debug.h"
#include "KingSystem/Utils/HeapUtil.h"
#include "KingSystem/Utils/InitTimeInfo.h"
#include "KingSystem/Utils/SafeDelete.h"
@@ -134,6 +138,38 @@ void Manager::init(sead::Heap* heap, sead::Framework* framework) {
mNumFlagsToReset = 0;
}
+void Manager::loadShopGameDataInfo(const sead::SafeString& path) {
+ res::LoadRequest req;
+ req.mRequester = "gdtManager";
+ req._26 = false;
+ if (!sead::DynamicCast<res::Resource>(mShopGameDataInfoHandle.load(path, &req)))
+ return;
+
+ auto* res = sead::DynamicCast<sead::DirectResource>(mShopGameDataInfoHandle.getResource());
+ if (!res)
+ return;
+
+ al::ByamlIter root{res->getRawData()};
+ al::ByamlIter iter;
+ al::ByamlIter hashes;
+
+ if (root.tryGetIterByKey(&iter, "ShopAreaInfo")) {
+ iter.tryGetIterByKey(&mShopAreaInfoValues, "Values");
+ if (iter.tryGetIterByKey(&hashes, "Hashes")) {
+ mShopAreaInfoHashes = al::ByamlArrayIter(hashes.getRootNode()).getDataTable();
+ }
+ }
+ util::PrintDebugFmt("ShopAreaInfo: %d %d", mShopAreaInfoValues.getSize(), hashes.getSize());
+
+ if (root.tryGetIterByKey(&iter, "SoldOutInfo")) {
+ iter.tryGetIterByKey(&mShopSoldOutInfoValues, "Values");
+ if (iter.tryGetIterByKey(&hashes, "Hashes")) {
+ mShopSoldOutInfoHashes = al::ByamlArrayIter(hashes.getRootNode()).getDataTable();
+ }
+ }
+ util::PrintDebugFmt("SoldOutInfo: %d %d", mShopSoldOutInfoValues.getSize(), hashes.getSize());
+}
+
void Manager::unloadResources() {
for (s32 i = 0; i < mBgdataHandles.size(); ++i)
mBgdataHandles[i].requestUnload();
diff --git a/src/KingSystem/GameData/gdtManager.h b/src/KingSystem/GameData/gdtManager.h
index 01a80926..555f8a01 100644
--- a/src/KingSystem/GameData/gdtManager.h
+++ b/src/KingSystem/GameData/gdtManager.h
@@ -624,9 +624,9 @@ private:
res::Handle mShopGameDataInfoHandle;
al::ByamlIter mShopAreaInfoValues;
- const u8* mShopAreaInfoHashes = nullptr;
+ const u32* mShopAreaInfoHashes = nullptr;
al::ByamlIter mShopSoldOutInfoValues;
- const u8* mShopSoldOutInfoHashes = nullptr;
+ const u32* mShopSoldOutInfoHashes = nullptr;
TriggerParamRef mParamBypassPerm{&mFlagBuffer1, &mFlagBuffer, false, false, false};
TriggerParamRef mParam{&mFlagBuffer1, &mFlagBuffer, true, false, false};