1#pragma once
2
3#include <basis/seadTypes.h>
4
5#include "Library/HostIO/HioNode.h"
6
7namespace al {
8class ExecuteRequestKeeper;
9class ExecuteTableHolderDraw;
10class ExecuteTableHolderUpdate;
11struct ExecuteSystemInitInfo;
12class FunctorBase;
13class IUseExecutor;
14class LayoutActor;
15class LiveActor;
16
17class ExecuteDirector : public HioNode {
18public:
19 ExecuteDirector(s32 count);
20 virtual ~ExecuteDirector();
21 void init(const ExecuteSystemInitInfo& initInfo);
22 void registerActorUpdate(LiveActor* actor, const char* listName);
23 void registerActorDraw(LiveActor* actor, const char* listName);
24 void registerActorModelDraw(LiveActor* actor, const char* listName);
25 void registerLayoutUpdate(LayoutActor* layout, const char* listName);
26 void registerLayoutDraw(LayoutActor* layout, const char* listName);
27 void registerUser(IUseExecutor* user, const char* listName);
28 void registerFunctor(const FunctorBase& functor, const char* listName);
29 void registerFunctorDraw(const FunctorBase& functor, const char* listName);
30 void createExecutorListTable();
31 void execute(const char* tableName) const;
32 void executeList(const char* tableName, const char* listName) const;
33 void draw(const char* tableName) const;
34 void drawList(const char* tableName, const char* listName) const;
35 bool isActiveDraw(const char* tableName) const;
36
37private:
38 s32 mRequestCount;
39 s32 mUpdateTableCount = 0;
40 ExecuteTableHolderUpdate** mUpdateTables = nullptr;
41 s32 mDrawTableCount = 0;
42 ExecuteTableHolderDraw** mDrawTables = nullptr;
43 ExecuteRequestKeeper* mRequestKeeper = nullptr;
44};
45
46static_assert(sizeof(ExecuteDirector) == 0x30);
47
48} // namespace al
49