summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLéo Lam <leo@leolam.fr>2021-03-13 14:23:05 +0100
committerLéo Lam <leo@leolam.fr>2021-03-13 14:36:06 +0100
commitafb4e218fa99a055a2231c347f53ca3badd42e37 (patch)
tree385f4cdacf1e8998b035ed1de42025e36b8a773d /src
parent5638f4a4e991c86269be841bafccccaee89d7c19 (diff)
ksys/res: Add GameResourceSystem header
Diffstat (limited to 'src')
-rw-r--r--src/KingSystem/Resource/CMakeLists.txt2
-rw-r--r--src/KingSystem/Resource/resGameResourceSystem.cpp7
-rw-r--r--src/KingSystem/Resource/resGameResourceSystem.h41
3 files changed, 50 insertions, 0 deletions
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