summaryrefslogtreecommitdiff
path: root/src/Game/DLC/aocManager.cpp
diff options
context:
space:
mode:
authorLéo Lam <leo@leolam.fr>2021-03-26 21:07:12 +0100
committerLéo Lam <leo@leolam.fr>2021-03-27 02:34:08 +0100
commitaa766a1977251cf3be30795a947af979ebd21bad (patch)
treed0eb49defb567d502187096756d7f320c63153cc /src/Game/DLC/aocManager.cpp
parent1bd2f03de8a21803fb192a09f37fd52b43b44cd1 (diff)
Implement more parts of aocManager
Diffstat (limited to 'src/Game/DLC/aocManager.cpp')
-rw-r--r--src/Game/DLC/aocManager.cpp45
1 files changed, 45 insertions, 0 deletions
diff --git a/src/Game/DLC/aocManager.cpp b/src/Game/DLC/aocManager.cpp
index 80d2711a..947bbba4 100644
--- a/src/Game/DLC/aocManager.cpp
+++ b/src/Game/DLC/aocManager.cpp
@@ -1 +1,46 @@
#include "Game/DLC/aocManager.h"
+#include <filedevice/seadFileDeviceMgr.h>
+#include "KingSystem/Utils/SafeDelete.h"
+
+#ifdef NNSDK
+#include <nn/fs.h>
+#endif
+
+namespace uking::aoc {
+
+SEAD_SINGLETON_DISPOSER_IMPL(Manager)
+
+Manager::Manager() : mGdtReinitSlot{this, &Manager::onGdtReinit} {
+ resetFlags();
+}
+
+Manager::~Manager() {
+ if (auto* gdm = ksys::gdt::Manager::instance())
+ gdm->removeReinitCallback(mGdtReinitSlot);
+
+ mFileDevicePrefix.deregister();
+ mFileDevicePrefix2.deregister();
+ mVersionFileDevPrefix.deregister();
+
+ if (mFileDevice) {
+ sead::FileDeviceMgr::instance()->unmount("aoc");
+ ksys::util::safeDelete(mFileDevice);
+ }
+
+#ifdef NNSDK
+ if (mAocFsCache) {
+ nn::fs::Unmount("aoc");
+ ksys::util::safeDelete(mAocFsCache);
+ }
+#endif
+}
+
+void Manager::resetFlags() {
+ mFlagAocVerAtLastPlay = ksys::gdt::InvalidHandle;
+ mFlagLatestAocVerPlayed = ksys::gdt::InvalidHandle;
+ mFlagHasAocVer1 = ksys::gdt::InvalidHandle;
+ mFlagHasAocVer2 = ksys::gdt::InvalidHandle;
+ mFlagHasAocVer3 = ksys::gdt::InvalidHandle;
+}
+
+} // namespace uking::aoc