From 36d114214dc75a9ddb43e1fb77ef42a0524a4714 Mon Sep 17 00:00:00 2001 From: Pistonight Date: Thu, 8 Aug 2024 21:23:21 -0700 Subject: [PATCH] title resource stuff --- data/uking_functions.csv | 10 ++--- src/KingSystem/System/UI/ArcResourceMgr.h | 7 +++ .../System/UI/LayoutResourceMgr.cpp | 41 ++++++++++++++++++ src/KingSystem/System/UI/LayoutResourceMgr.h | 43 +++++++++++++++---- 4 files changed, 87 insertions(+), 14 deletions(-) diff --git a/data/uking_functions.csv b/data/uking_functions.csv index b22818ff..365cecd0 100644 --- a/data/uking_functions.csv +++ b/data/uking_functions.csv @@ -88340,15 +88340,15 @@ Address,Quality,Size,Name 0x00000071010a2fa0,O,000188,_ZN4ksys2ui17LayoutResourceMgr18checkLangFontReadyEv 0x00000071010a305c,O,000136,_ZNK4ksys2ui17LayoutResourceMgr24checkExtraLangFontsReadyEv 0x00000071010a30e4,O,000136,_ZN4ksys2ui17LayoutResourceMgr11loadVersionEv -0x00000071010a316c,U,000372,LayoutResourceMgr::ready_1 +0x00000071010a316c,W,000372,_ZN4ksys2ui17LayoutResourceMgr17checkVersionReadyEv 0x00000071010a32e0,U,001584,LayoutResourceMgr::loadALotOfResources 0x00000071010a3910,W,000064,_ZN4sead12PerfJobQueue13measureEndRunEv -0x00000071010a3950,U,000072,LayoutResourceMgr::loadLayoutCommonArchive +0x00000071010a3950,W,000072,_ZN4ksys2ui17LayoutResourceMgr23loadCommonLayoutArchiveEPN4sead7ExpHeapE 0x00000071010a3998,U,000288,LayoutResourceMgr::loadArcResource 0x00000071010a3ab8,U,000104,LayoutResourceMgr::deleteSOmething -0x00000071010a3b20,U,000208,LayoutResourceMgr::loadTitleResource -0x00000071010a3bf0,U,000016,LayoutResourceMgr::loadTitleResource2 -0x00000071010a3c00,U,000104,LayoutResourceMgr::deleteSomethingElse +0x00000071010a3b20,O,000208,_ZN4ksys2ui17LayoutResourceMgr15loadTitleLayoutEPN4sead4HeapE +0x00000071010a3bf0,O,000016,_ZN4ksys2ui17LayoutResourceMgr23loadTitleLayoutResourceEv +0x00000071010a3c00,O,000104,_ZN4ksys2ui17LayoutResourceMgr25unloadTitleLayoutResourceEv 0x00000071010a3c68,U,000264,LayoutResourceMgr::x 0x00000071010a3d70,U,000076,LayoutResourceMgr::x_0 0x00000071010a3dbc,U,000068,LayoutResourceMgr::checkHorse diff --git a/src/KingSystem/System/UI/ArcResourceMgr.h b/src/KingSystem/System/UI/ArcResourceMgr.h index 06907912..a36e1640 100644 --- a/src/KingSystem/System/UI/ArcResourceMgr.h +++ b/src/KingSystem/System/UI/ArcResourceMgr.h @@ -1,8 +1,13 @@ #pragma once #include +#include #include "KingSystem/Utils/Types.h" +namespace sead { +class ExpHeap; +} + namespace ksys::ui { class ArcResourceMgr { @@ -10,6 +15,8 @@ public: ArcResourceMgr() = default; virtual ~ArcResourceMgr(); + virtual void loadArchive(sead::ExpHeap* heap, const sead::SafeString& path); + private: // TODO: fields /* sead::TList */ diff --git a/src/KingSystem/System/UI/LayoutResourceMgr.cpp b/src/KingSystem/System/UI/LayoutResourceMgr.cpp index b2e098e8..31d41eb1 100644 --- a/src/KingSystem/System/UI/LayoutResourceMgr.cpp +++ b/src/KingSystem/System/UI/LayoutResourceMgr.cpp @@ -150,4 +150,45 @@ void LayoutResourceMgr::loadVersion() { mVersionHandle->requestLoad("System/Version.txt", &req, nullptr); } +// non-matching +bool LayoutResourceMgr::checkVersionReady() { + if (!mVersionHandle) { + if (!mVersionHandle->isReady()) { + return false; + } + auto* resource = sead::DynamicCast(mVersionHandle->getResource()); + instance()->mVersionString = reinterpret_cast(resource->getRawData()); + if (mVersionHandle) { + delete mVersionHandle; + mVersionHandle = nullptr; + } + } + return true; +} + +void LayoutResourceMgr::loadCommonLayoutArchive(sead::ExpHeap* heap) { + mArcResourceMgr->loadArchive(heap, "Layout/Common.sblarc"); +} + +void LayoutResourceMgr::loadTitleLayout(sead::Heap* heap) { + mTitleLayout.allocate(heap); + + res::LoadRequest req; + req.mRequester = "ui::LayoutResourceMgr"; + req.mLoadDataAlignment = 0x1000; + req._22 = false; + req._26 = false; + req._c = 2; + + res::Handle::Status status = res::Handle::Status::NoFile; + mTitleLayout.getHandle().requestLoad("Layout/Title.blarc", &req, &status); +} + +bool LayoutResourceMgr::loadTitleLayoutResource() { + return loadArcResource(mTitleLayout, "Title"); +} + +void LayoutResourceMgr::unloadTitleLayoutResource() { + mTitleLayout.deallocate(); +} } // namespace ksys::ui diff --git a/src/KingSystem/System/UI/LayoutResourceMgr.h b/src/KingSystem/System/UI/LayoutResourceMgr.h index 76f36d65..143ed6f9 100644 --- a/src/KingSystem/System/UI/LayoutResourceMgr.h +++ b/src/KingSystem/System/UI/LayoutResourceMgr.h @@ -6,8 +6,8 @@ #include #include "KingSystem/Resource/resHandle.h" #include "KingSystem/Utils/Types.h" - -#include "ArcResourceMgr.h" +#include "KingSystem/System/UI/ArcResourceMgr.h" +#include "KingSystem/System/UI/ArcResource.h" namespace nn::pl { enum SharedFontType : int { Unknown = 0 }; @@ -21,6 +21,31 @@ class LayoutResourceMgr { SEAD_SINGLETON_DISPOSER(LayoutResourceMgr) LayoutResourceMgr() = default; virtual ~LayoutResourceMgr(); +private: + class Archive { + public: + void allocate(sead::Heap* heap) { + mHandle = new (heap) res::Handle; + _sizeA8Buf = new (heap) u8[0xA8]; + } + void deallocate() { + if (mResource) { + delete mResource; + mResource = nullptr; + } else { + delete mHandle; + delete[] _sizeA8Buf; + } + mHandle = nullptr; + _sizeA8Buf = nullptr; + } + + res::Handle& getHandle() { return *mHandle; } + private: + res::Handle* mHandle = nullptr; + ArcResource* mResource = nullptr; + u8* _sizeA8Buf = nullptr; + }; public: @@ -31,16 +56,16 @@ public: bool checkLangFontReady(); bool checkExtraLangFontsReady() const; void loadVersion(); + bool checkVersionReady(); + void loadCommonLayoutArchive(sead::ExpHeap* heap); + void loadTitleLayout(sead::Heap* heap); + bool loadTitleLayoutResource(); + void unloadTitleLayoutResource(); + + bool loadArcResource(Archive& archive, const char* name); private: - class Archive { - public: - res::Handle* mHandle = nullptr; - void* _8 = nullptr; - void* _sizeA8Buf = nullptr; - }; - res::Handle* mMsgPackHandle = nullptr; res::Handle* mLangFontHandle = nullptr; res::Handle* mVersionHandle = nullptr;