1#pragma once
2
3#include <basis/seadTypes.h>
4
5namespace al {
6class ISceneObj;
7struct ActorInitInfo;
8
9class SceneObjHolder {
10public:
11 SceneObjHolder(ISceneObj* (*)(s32), s32);
12 ISceneObj* create(s32);
13 ISceneObj* tryGetObj(s32) const;
14 ISceneObj* getObj(s32) const;
15 bool isExist(s32) const;
16 void setSceneObj(ISceneObj*, s32);
17 void initAfterPlacementSceneObj(const ActorInitInfo&);
18
19 template <typename T>
20 inline T* tryGetObj() const {
21 return static_cast<T*>(tryGetObj(T::sSceneObjId));
22 }
23
24 template <typename T>
25 inline T* getObj() const {
26 return static_cast<T*>(getObj(T::sSceneObjId));
27 }
28
29private:
30 ISceneObj* (*mCreator)(s32);
31 ISceneObj** mSceneObjArray;
32 s32 mArraySize;
33};
34
35} // namespace al
36