1#pragma once
2
3#include <basis/seadTypes.h>
4#include <container/seadPtrArray.h>
5
6#include "Library/Area/IUseAreaObj.h"
7
8namespace al {
9class PlayerHolder;
10class CameraDirector;
11class SwitchOnAreaGroup;
12class SwitchKeepOnAreaGroup;
13class SwitchAreaTargetInfo;
14
15class SwitchAreaDirector : public IUseAreaObj {
16public:
17 static SwitchAreaDirector* tryCreate(AreaObjDirector* areaObjDirector,
18 const PlayerHolder* playerHolder,
19 const CameraDirector* cameraDirector,
20 s32 switchOnAreaGroupCount,
21 s32 switchKeepOnAreaGroupCount);
22
23 SwitchAreaDirector(AreaObjDirector* areaObjDirector, const PlayerHolder* playerHolder,
24 const CameraDirector* cameraDirector, s32 switchOnAreaGroupCount,
25 s32 switchKeepOnAreaGroupCount);
26
27 AreaObjDirector* getAreaObjDirector() const override { return mAreaObjDirector; }
28
29 void update();
30 void endInit();
31 void registerSwitchOnAreaGroup(SwitchOnAreaGroup* switchOnAreaGroup);
32 void registerSwitchKeepOnAreaGroup(SwitchKeepOnAreaGroup* switchKeepOnAreaGroup);
33
34private:
35 AreaObjDirector* mAreaObjDirector;
36 const PlayerHolder* mPlayerHolder;
37 const CameraDirector* mCameraDirector;
38 SwitchAreaTargetInfo* mSwitchAreaTargetInfo = nullptr;
39 sead::PtrArray<SwitchOnAreaGroup> mSwitchOnAreaGroups = {};
40 sead::PtrArray<SwitchKeepOnAreaGroup> mSwitchKeepOnAreaGroups = {};
41 bool mHasSwitchAreas = false;
42};
43
44static_assert(sizeof(SwitchAreaDirector) == 0x50);
45
46} // namespace al
47