OdysseyDecomp/lib/al/Library/Scene/SceneObjHolder.cpp
2024-07-09 21:48:16 +02:00

47 lines
1.2 KiB
C++

#include "Library/Scene/SceneObjHolder.h"
#include "Library/Scene/ISceneObj.h"
namespace al {
SceneObjHolder::SceneObjHolder(ISceneObj* (*creator)(s32), s32 size)
: mCreator(creator), mArraySize(size) {
mSceneObjArray = new ISceneObj*[size];
for (s32 i = 0; i < mArraySize; i++)
mSceneObjArray[i] = nullptr;
}
ISceneObj* SceneObjHolder::create(s32 index) {
if (mSceneObjArray[index]) // already exists
return mSceneObjArray[index];
mSceneObjArray[index] = mCreator(index);
mSceneObjArray[index]->initSceneObj();
return mSceneObjArray[index];
}
ISceneObj* SceneObjHolder::tryGetObj(s32 index) const {
return mSceneObjArray[index];
}
ISceneObj* SceneObjHolder::getObj(s32 index) const {
return mSceneObjArray[index];
}
bool SceneObjHolder::isExist(s32 index) const {
return mSceneObjArray[index] != nullptr;
}
void SceneObjHolder::setSceneObj(ISceneObj* obj, s32 index) {
mSceneObjArray[index] = obj;
}
void SceneObjHolder::initAfterPlacementSceneObj(const ActorInitInfo& info) {
for (s32 i = 0; i < mArraySize; i++)
if (mSceneObjArray[i])
mSceneObjArray[i]->initAfterPlacementSceneObj(info);
}
} // namespace al