diff options
| author | Brian Savage <savage13@gmail.com> | 2022-01-28 08:28:23 -0500 |
|---|---|---|
| committer | Brian Savage <savage13@gmail.com> | 2022-01-29 07:51:03 -0500 |
| commit | 7a3c0b261a3009eed7abf0f12969abdb83294473 (patch) | |
| tree | 3e9f54c1d83bc50efccea35a432de31c02d6fca3 /src/KingSystem/Map/mapPlacementMap.cpp | |
| parent | 532e83a2facccdfc46cc8b499457c727660eec35 (diff) | |
Add initial PlacementMap functions
Diffstat (limited to 'src/KingSystem/Map/mapPlacementMap.cpp')
| -rw-r--r-- | src/KingSystem/Map/mapPlacementMap.cpp | 48 |
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 |
