diff options
Diffstat (limited to 'src/KingSystem/System/OverlayArenaSystem.h')
| -rw-r--r-- | src/KingSystem/System/OverlayArenaSystem.h | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/src/KingSystem/System/OverlayArenaSystem.h b/src/KingSystem/System/OverlayArenaSystem.h new file mode 100644 index 00000000..46dc9b88 --- /dev/null +++ b/src/KingSystem/System/OverlayArenaSystem.h @@ -0,0 +1,102 @@ +#pragma once + +#include <heap/seadDisposer.h> +#include <prim/seadDelegate.h> +#include <prim/seadTypedBitFlag.h> +#include <thread/seadAtomic.h> +#include "KingSystem/Resource/resHandle.h" +#include "KingSystem/System/OverlayArenaSystemS1.h" +#include "KingSystem/System/OverlayArenaSystemS2.h" +#include "KingSystem/Utils/Thread/Event.h" +#include "KingSystem/Utils/Types.h" + +namespace sead { +class Heap; +class SZSDecompressor; +} // namespace sead + +namespace ksys { + +namespace util { +class Task; +class TaskThread; +} // namespace util + +class OverlayArena; +class SystemPauseMgr; + +// FIXME: incomplete +class OverlayArenaSystem { + SEAD_SINGLETON_DISPOSER(OverlayArenaSystem) + + OverlayArenaSystem(); + virtual ~OverlayArenaSystem(); + +public: + struct InitArg { + SystemPauseMgr* system_pause_mgr; + }; + + bool init(const InitArg& arg, sead::Heap* heap); + + void getSzsDecompressor(sead::SZSDecompressor** decompressor) const; + OverlayArena* getArena() const; + OverlayArena* getTeraSzsWorkArena() const; + OverlayArena* getAudioArena() const; + OverlayArena* getUnknownArena() const; + + void createTeraWorkHeap(); + void createStubbed(); + void createMovieHeap(); + +private: + enum class Flag { + _1 = 0x1, + _2 = 0x2, + }; + + void createHeaps(); + void destroyHeaps(); + + void createSzsDecompressor(); + void createTexArcWorkHeap(); + void createArena(); + void createTeraSzsWorkArena(); + void createAudioArena(); + void createJpegHeap(); + void createPlacementTreeHeap(); + + bool delegatedFunction(); + + sead::TypedBitFlag<Flag, u8> mFlags; + u32 _2c = 0; + sead::Heap* mFixedHeap = nullptr; + sead::Heap* mMovableMemoryHeap = nullptr; + sead::Heap* mGameDataWorkHeap = nullptr; + sead::Heap* mMovieHeap = nullptr; + sead::Heap* mPlacementTreeHeap = nullptr; + sead::Heap* mTeraWorkHeap = nullptr; + sead::Heap* mSzsDecompressorInstHeap = nullptr; + sead::Heap* mSzsHeap = nullptr; + sead::SZSDecompressor* mSzsDecompressor = nullptr; + sead::Heap* mTexArcWorkHeap = nullptr; + OverlayArena* mArena = nullptr; + OverlayArena* mTeraSzsWorkArena = nullptr; + OverlayArena* mAudioArena = nullptr; + OverlayArena* mUnknownArena = nullptr; + sead::Heap* mJpegHeap = nullptr; + SystemPauseMgr* mSystemPauseMgr = nullptr; + OverlayArenaSystemS1 mS1; + u32 _b8 = 0; + util::TaskThread* mPrepareThread = nullptr; + util::Task* mTask = nullptr; + sead::DelegateR<OverlayArenaSystem, bool> mDelegate; + OverlayArenaSystemS2 mS2; + sead::Atomic<u32> _130 = 0; + sead::Atomic<u32> _134 = 0; + res::Handle mResHandle; + util::Event mEvent; +}; +KSYS_CHECK_SIZE_NX150(OverlayArenaSystem, 0x1c8); + +} // namespace ksys |
