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