diff options
| author | Léo Lam <leo@leolam.fr> | 2020-10-12 01:46:14 +0200 |
|---|---|---|
| committer | Léo Lam <leo@leolam.fr> | 2020-10-12 01:46:30 +0200 |
| commit | afec1a82cc097dcfd7d08f84a221a5a920d1b2be (patch) | |
| tree | d33fe39ae8c28d4642338e7b02bc6fe9e436c262 /src/KingSystem/Resource/resHandle.cpp | |
| parent | 0a0d287e37d6353616885205fdb8a0c525c37ce4 (diff) | |
ksys/res: Implement Handle destructor
Diffstat (limited to 'src/KingSystem/Resource/resHandle.cpp')
| -rw-r--r-- | src/KingSystem/Resource/resHandle.cpp | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/src/KingSystem/Resource/resHandle.cpp b/src/KingSystem/Resource/resHandle.cpp index f3369b2b..1655a485 100644 --- a/src/KingSystem/Resource/resHandle.cpp +++ b/src/KingSystem/Resource/resHandle.cpp @@ -2,6 +2,8 @@ #include <container/seadBuffer.h> #include <prim/seadSafeString.h> #include <time/seadTickTime.h> +#include "KingSystem/Resource/resResourceMgrTask.h" +#include "KingSystem/Resource/resSystem.h" namespace ksys::res { @@ -40,4 +42,31 @@ const sead::Buffer<const sead::SafeString> sStatusStrings{0x11, sStatusStrings_} Handle::Handle() = default; +Handle::~Handle() { + unload(); +} + +void Handle::unload() { + if (!mFlags.isOn(Flag::_2)) + return; + + mFlags.reset(Flag::_7); + mFlags.set(Flag::_4); + + if (mTaskHandle.hasTask()) { + mTaskHandle.removeTaskFromQueue(); + if (!mUnit) { + stubbedLogFunction(); + mStatus = Status::_14; + return; + } + } + + if (!mUnit) + return; + + if (ResourceMgrTask::instance()) + ResourceMgrTask::instance()->requestUnload(this); +} + } // namespace ksys::res |
