diff options
| author | Léo Lam <leo@leolam.fr> | 2022-03-31 12:48:14 +0200 |
|---|---|---|
| committer | Léo Lam <leo@leolam.fr> | 2022-03-31 23:17:34 +0200 |
| commit | 9d02ca33d84d44f9fb9fa7c7728d4e3386b83093 (patch) | |
| tree | 10f4746aebc91f078f365f43b86e340294809680 /lib/gsys/src | |
| parent | 6ce04bccaa6c2dc2ead9f787f770891a0c0f7754 (diff) | |
gsys: Add Model, ModelAccessKey and ModelUnit stubs
Diffstat (limited to 'lib/gsys/src')
| -rw-r--r-- | lib/gsys/src/gsys/gsysModelAccessKey.cpp | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/lib/gsys/src/gsys/gsysModelAccessKey.cpp b/lib/gsys/src/gsys/gsysModelAccessKey.cpp new file mode 100644 index 00000000..065aee05 --- /dev/null +++ b/lib/gsys/src/gsys/gsysModelAccessKey.cpp @@ -0,0 +1,61 @@ +#include "gsys/gsysModelAccessKey.h" +#include <basis/seadRawPrint.h> +#include <prim/seadMemUtil.h> +#include <prim/seadScopedLock.h> +#include "gsys/gsysModel.h" + +namespace gsys { + +IModelAccesssHandle::IModelAccesssHandle() = default; + +IModelAccesssHandle::~IModelAccesssHandle() { + ; +} + +bool IModelAccesssHandle::search(const Model* p_model, const sead::SafeString& name) { + SEAD_ASSERT(p_model != nullptr); + SEAD_ASSERT_MSG(!sead::MemUtil::isStack(name.cstr()), "String[%s] is on stack.", name.cstr()); + + if (mModel != p_model) { + remove(); + p_model->add_(this); + mModel = p_model; + } + + mName = name; + return search(); +} + +void IModelAccesssHandle::remove() { + if (!mModel) + return; + + auto lock = sead::makeScopedLock(mModel->getCS()); + if (!mListNode.isLinked()) + return; + + SEAD_ASSERT(mModel != nullptr); + mModel->remove_(this); + mModel = nullptr; + removeImpl_(); +} + +bool IModelAccesssHandle::search() { + if (!mListNode.isLinked()) + return false; + + SEAD_ASSERT(mModel != nullptr); + return searchImpl_(); +} + +BoneAccessKeyEx::BoneAccessKeyEx() = default; + +BoneAccessKeyEx::~BoneAccessKeyEx() { + remove(); +} + +void BoneAccessKeyEx::removeImpl_() { + mKey.reset(); +} + +} // namespace gsys |
