summaryrefslogtreecommitdiff
path: root/src/toBeSorted/arc_managers/layout_arc_manager.cpp
diff options
context:
space:
mode:
authorrobojumper <robojumper@gmail.com>2025-08-21 12:16:10 +0200
committerrobojumper <robojumper@gmail.com>2025-08-21 12:16:10 +0200
commitda63feb111ea145e33be6d6bf108e6d8f559e77b (patch)
treeb489f48d55cb80423a5958a7168e40788bcce848 /src/toBeSorted/arc_managers/layout_arc_manager.cpp
parent816086d764f95400ae44a72d5f83bdaa968e3456 (diff)
Fix a bunch of splits and implement LayoutArc/ObjectArcControl
Diffstat (limited to 'src/toBeSorted/arc_managers/layout_arc_manager.cpp')
-rw-r--r--src/toBeSorted/arc_managers/layout_arc_manager.cpp66
1 files changed, 65 insertions, 1 deletions
diff --git a/src/toBeSorted/arc_managers/layout_arc_manager.cpp b/src/toBeSorted/arc_managers/layout_arc_manager.cpp
index ce329680..091fe504 100644
--- a/src/toBeSorted/arc_managers/layout_arc_manager.cpp
+++ b/src/toBeSorted/arc_managers/layout_arc_manager.cpp
@@ -2,7 +2,6 @@
#include "d/d_heap.h"
-
LayoutArcManager *LayoutArcManager::sInstance;
LayoutArcManager::LayoutArcManager() {
@@ -57,3 +56,68 @@ bool LayoutArcManager::create(EGG::Heap *heap) {
GetInstance()->init(heap);
return true;
}
+
+LayoutArcControl::~LayoutArcControl() {
+ if (mLayoutArcs != nullptr) {
+ release();
+ }
+}
+
+void LayoutArcControl::set(const char *const *layoutArcs, s32 numArcs) {
+ mLayoutArcs = layoutArcs;
+ mNumArcs = numArcs;
+}
+
+bool LayoutArcControl::load(EGG::Heap *heap) const {
+ if (mLayoutArcs == nullptr) {
+ return true;
+ }
+
+ const char *const *ptr = mLayoutArcs;
+ for (int i = 0; i < mNumArcs; i++) {
+ LayoutArcManager::GetInstance()->loadLayoutArcFromDisk(*ptr, heap);
+ ptr++;
+ }
+
+ return true;
+}
+
+bool LayoutArcControl::allLoaded() const {
+ if (mLayoutArcs == nullptr) {
+ return true;
+ }
+
+ const char *const *ptr = mLayoutArcs;
+ for (int i = 0; i < mNumArcs; i++) {
+ dArcResult_e res = LayoutArcManager::GetInstance()->ensureLoaded1(*ptr);
+ if (res != D_ARC_RESULT_OK) {
+ return false;
+ }
+ ptr++;
+ }
+ return true;
+}
+
+bool LayoutArcControl::release() {
+ if (mLayoutArcs == nullptr) {
+ return true;
+ }
+
+ const char *const *ptr = mLayoutArcs;
+ for (int i = 0; i < mNumArcs; i++) {
+ dArcResult_e res = LayoutArcManager::GetInstance()->ensureLoaded2(*ptr);
+ if (res != D_ARC_RESULT_ERROR_NOT_FOUND && res != D_ARC_RESULT_OK) {
+ return false;
+ }
+ ptr++;
+ }
+
+ ptr = mLayoutArcs;
+ for (int i = 0; i < mNumArcs; i++) {
+ LayoutArcManager::GetInstance()->decrement(*ptr);
+ ptr++;
+ }
+ mLayoutArcs = nullptr;
+
+ return true;
+}