1#pragma once
2
3#include <container/seadPtrArray.h>
4
5namespace al {
6struct ExecuteOrder;
7struct ExecuteSystemInitInfo;
8class ExecutorListActorModelDrawBase;
9class ExecutorListActorDraw;
10class ExecutorListBase;
11class ExecutorListFunctor;
12class ExecutorListIUseExecutorDraw;
13class ExecutorListLayoutDrawBase;
14class FunctorBase;
15class IUseExecutor;
16class LayoutActor;
17class LiveActor;
18
19class ExecuteTableHolderDraw {
20public:
21 ExecuteTableHolderDraw();
22 virtual ~ExecuteTableHolderDraw();
23 void init(const char* name, const ExecuteSystemInitInfo& initInfo, const ExecuteOrder* orders,
24 s32 orderCount);
25 void registerExecutorListActorModel(ExecutorListActorModelDrawBase* listActorModel);
26 void registerExecutorListActor(ExecutorListActorDraw* listActor);
27 void registerExecutorListLayout(ExecutorListLayoutDrawBase* listLayout);
28 void registerExecutorListUser(ExecutorListIUseExecutorDraw* listUser);
29 void registerExecutorListFunctor(ExecutorListFunctor* listFunctor);
30 void registerExecutorListAll(ExecutorListBase* list);
31 void tryRegisterActor(LiveActor* actor, const char* listName);
32 void tryRegisterActorModel(LiveActor* actor, const char* listName);
33 void tryRegisterLayout(LayoutActor* layout, const char* listName);
34 void tryRegisterUser(IUseExecutor* user, const char* listName);
35 void tryRegisterFunctor(const FunctorBase& functor, const char* listName);
36 void createExecutorListTable();
37 void execute() const;
38 void executeList(const char* listName) const;
39 bool isActive() const;
40
41 const char* getName() { return mName; }
42
43private:
44 const char* mName;
45 sead::PtrArray<ExecutorListBase> mActiveExecutors;
46 sead::PtrArray<ExecutorListBase> mExecutorsAll;
47 sead::PtrArray<ExecutorListActorDraw> mExecutorsActor;
48 sead::PtrArray<ExecutorListActorModelDrawBase> mExecutorsActorModel;
49 sead::PtrArray<ExecutorListLayoutDrawBase> mExecutorsLayout;
50 sead::PtrArray<ExecutorListIUseExecutorDraw> mExecutorsUser;
51 sead::PtrArray<ExecutorListFunctor> mExecutorsFunctor;
52};
53
54static_assert(sizeof(ExecuteTableHolderDraw) == 0x80);
55
56} // namespace al
57