summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--data/uking_functions.csv6
-rw-r--r--src/KingSystem/Resource/CMakeLists.txt2
-rw-r--r--src/KingSystem/Resource/resGameResourceSystem.cpp7
-rw-r--r--src/KingSystem/Resource/resGameResourceSystem.h41
4 files changed, 53 insertions, 3 deletions
diff --git a/data/uking_functions.csv b/data/uking_functions.csv
index 9f745287..61609093 100644
--- a/data/uking_functions.csv
+++ b/data/uking_functions.csv
@@ -79909,9 +79909,9 @@
0x0000007100ec9c3c,sub_7100EC9C3C,328,
0x0000007100ec9d84,sub_7100EC9D84,1308,
0x0000007100eca2a0,sub_7100ECA2A0,248,
-0x0000007100eca398,sub_7100ECA398,100,
-0x0000007100eca3fc,sub_7100ECA3FC,108,
-0x0000007100eca468,ResourceSystem::createInstance,152,
+0x0000007100eca398,sub_7100ECA398,100,_ZN4ksys3res18GameResourceSystem18SingletonDisposer_D2Ev
+0x0000007100eca3fc,sub_7100ECA3FC,108,_ZN4ksys3res18GameResourceSystem18SingletonDisposer_D0Ev
+0x0000007100eca468,ResourceSystem::createInstance,152,_ZN4ksys3res18GameResourceSystem14createInstanceEPN4sead4HeapE
0x0000007100eca500,sub_7100ECA500,68,
0x0000007100eca544,PlayReport::dtor_delete,68,
0x0000007100eca588,ResourceSystem::init,80,
diff --git a/src/KingSystem/Resource/CMakeLists.txt b/src/KingSystem/Resource/CMakeLists.txt
index e2e23994..6236e6bd 100644
--- a/src/KingSystem/Resource/CMakeLists.txt
+++ b/src/KingSystem/Resource/CMakeLists.txt
@@ -98,6 +98,8 @@ target_sources(uking PRIVATE
resCurrentResNameMgr.h
resEntryFactory.cpp
resEntryFactory.h
+ resGameResourceSystem.cpp
+ resGameResourceSystem.h
resHandle.cpp
resHandle.h
resInfoContainer.cpp
diff --git a/src/KingSystem/Resource/resGameResourceSystem.cpp b/src/KingSystem/Resource/resGameResourceSystem.cpp
new file mode 100644
index 00000000..ef5cfe46
--- /dev/null
+++ b/src/KingSystem/Resource/resGameResourceSystem.cpp
@@ -0,0 +1,7 @@
+#include "KingSystem/Resource/resGameResourceSystem.h"
+
+namespace ksys::res {
+
+SEAD_SINGLETON_DISPOSER_IMPL(GameResourceSystem)
+
+} // namespace ksys::res
diff --git a/src/KingSystem/Resource/resGameResourceSystem.h b/src/KingSystem/Resource/resGameResourceSystem.h
new file mode 100644
index 00000000..cab62608
--- /dev/null
+++ b/src/KingSystem/Resource/resGameResourceSystem.h
@@ -0,0 +1,41 @@
+#pragma once
+
+#include <heap/seadDisposer.h>
+
+namespace ksys::res {
+
+class CompactionMgr;
+
+// Also known as game::ResourceSystem (?)
+class GameResourceSystem {
+ SEAD_SINGLETON_DISPOSER(GameResourceSystem)
+ GameResourceSystem() = default;
+ virtual ~GameResourceSystem();
+
+public:
+ struct InitArg {
+ sead::Heap* heap;
+ };
+
+ bool init(const InitArg& arg);
+
+ void calc();
+ void pauseCompaction();
+ void resumeCompaction();
+
+private:
+ CompactionMgr* mCompactionMgr = nullptr;
+ bool mPauseCompaction = false;
+};
+
+class ScopedCompactionPauser {
+public:
+ ScopedCompactionPauser() { GameResourceSystem::instance()->pauseCompaction(); }
+ ~ScopedCompactionPauser() { GameResourceSystem::instance()->resumeCompaction(); }
+ ScopedCompactionPauser(const ScopedCompactionPauser&) = delete;
+ ScopedCompactionPauser(ScopedCompactionPauser&&) = delete;
+ auto operator=(const ScopedCompactionPauser&) = delete;
+ auto operator=(ScopedCompactionPauser&&) = delete;
+};
+
+} // namespace ksys::res