summaryrefslogtreecommitdiff
path: root/src/KingSystem/Map/mapPlacementMap.cpp
diff options
context:
space:
mode:
authorBrian Savage <savage13@gmail.com>2022-01-28 08:28:23 -0500
committerBrian Savage <savage13@gmail.com>2022-01-29 07:51:03 -0500
commit7a3c0b261a3009eed7abf0f12969abdb83294473 (patch)
tree3e9f54c1d83bc50efccea35a432de31c02d6fca3 /src/KingSystem/Map/mapPlacementMap.cpp
parent532e83a2facccdfc46cc8b499457c727660eec35 (diff)
Add initial PlacementMap functions
Diffstat (limited to 'src/KingSystem/Map/mapPlacementMap.cpp')
-rw-r--r--src/KingSystem/Map/mapPlacementMap.cpp48
1 files changed, 47 insertions, 1 deletions
diff --git a/src/KingSystem/Map/mapPlacementMap.cpp b/src/KingSystem/Map/mapPlacementMap.cpp
index ea3531d1..dbadb05f 100644
--- a/src/KingSystem/Map/mapPlacementMap.cpp
+++ b/src/KingSystem/Map/mapPlacementMap.cpp
@@ -1,14 +1,19 @@
+
#include "KingSystem/Map/mapPlacementMap.h"
+#include <prim/seadScopedLock.h>
+#include <thread/seadReadWriteLock.h>
namespace ksys::map {
PlacementMap::PlacementMap() {
mInitStatus = InitStatus::None;
mParsedNumStaticObjs = 0xFFFFFFFF;
- mStaticMapLoaded = StaticMap::None;
+ mStaticMapLoaded = false;
+ mStaticMapParsed = false;
mNumStaticObjs = 0xFFFFFFFF;
mMat = sead::Matrix34f::ident;
mDistanceToCurrentMapUnit = 0;
+ _0 = 0;
mSkipLoadStaticMap = 0;
_38c = 0xFFFFFFFF;
mIdx = 0;
@@ -33,4 +38,45 @@ PlacementMap::~PlacementMap() {
}
}
+void PlacementMap::unload() {
+ sead::ReadWriteLock* lock = &mPa->mLock;
+ lock->writeLock();
+ mPa->resetGroup(mDynamicGroupIdx);
+ mDynamicGroupIdx = 0xFFFFFFFF;
+ lock->writeUnlock();
+
+ mCs.lock();
+ mDynamicMubinRes.requestUnload();
+ mCs.unlock();
+}
+
+phys::BodyGroup* PlacementMap::getFieldBodyGroup(int field_group_idx) {
+ const auto lock = sead::makeScopedLock(mCs);
+
+ auto* r = mRes[0].mRes.getResource();
+ if (auto* sc = sead::DynamicCast<phys::StaticCompound>(r)) {
+ if (field_group_idx < sc->getNumFieldBodyGroups()) {
+ return sc->getFieldBodyGroup(field_group_idx);
+ }
+ }
+ return nullptr;
+}
+
+void PlacementMap::x_7(int idx, int unknown, s8 column, s8 row, const sead::SafeString& mubin_path,
+ const sead::SafeString& folder_and_file, int map_id_maybe,
+ bool skip_load_static_map) {
+ _388 = unknown;
+ mIdx = idx;
+ mCol = column;
+ mRow = row;
+ mMubinPath.copy(mubin_path);
+ mFolderAndFile.copy(folder_and_file);
+ _38c = map_id_maybe; // Index in open world map
+ mSkipLoadStaticMap = skip_load_static_map;
+}
+
+void PlacementMap::unloadHksc(int hksc_idx) {
+ mRes[hksc_idx].mRes.requestUnload();
+}
+
} // namespace ksys::map