ksys/gdt: Implement Manager::loadShopGameDataInfo

This commit is contained in:
Léo Lam 2021-04-04 16:30:31 +02:00
parent 62181dd4db
commit f3f4cb78a4
No known key found for this signature in database
GPG Key ID: 0DF30F9081000741
3 changed files with 39 additions and 3 deletions

View File

@ -76019,7 +76019,7 @@
0x0000007100dcf6b4,sub_7100DCF6B4,704,_ZN4ksys3gdt7Manager14IncreaseLoggerC2Ev
0x0000007100dcf974,EntryFactoryBgdata::dtor,68,_ZN4ksys3res12EntryFactoryINS0_8GameDataEED2Ev
0x0000007100dcf9b8,GameDataMgr::loadGameDataFromArc,1692,
0x0000007100dd0054,GameDataMgr::loadShopGameDataInfo,600,
0x0000007100dd0054,GameDataMgr::loadShopGameDataInfo,600,_ZN4ksys3gdt7Manager20loadShopGameDataInfoERKN4sead14SafeStringBaseIcEE
0x0000007100dd02ac,GameDataMgr::unloadResources,288,_ZN4ksys3gdt7Manager15unloadResourcesEv
0x0000007100dd03cc,GameDataMgr::calc,896,
0x0000007100dd074c,GameDataMgr::calc0,548,

Can't render this file because it is too large.

View File

@ -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();

View File

@ -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};