1#pragma once
2
3#include <container/seadPtrArray.h>
4
5#include "Library/Scene/DemoDirector.h"
6
7namespace al {
8class PlayerHolder;
9class GraphicsSystemInfo;
10class WipeSimple;
11} // namespace al
12class IUseDemoSkip;
13class Shine;
14class ShineTowerRocket;
15class RiseMapPartsHolder;
16class DemoChangeEffectObj;
17class DemoHackFirstDirector;
18
19class ProjectDemoDirector : public al::DemoDirector {
20public:
21 enum class DemoType {
22 RiseMapParts = 0x1,
23 EndHack = 0x3,
24 UNK5 = 0x4,
25 UNK6 = 0x5,
26 ShineGet = 0x6,
27 UNK8 = 0x7,
28 UNK9 = 0x8,
29 UNK10 = 0x9,
30 };
31
32 ProjectDemoDirector(const al::PlayerHolder*, al::GraphicsSystemInfo*);
33
34 void endInit(const al::ActorInitInfo&) override;
35 void updateSystemOnly();
36 void updateDemoSyncEventKeeper();
37 void updateDemoActor(al::EffectSystem*) override;
38 bool isActiveDemo(const char*);
39 bool isActiveDemoWithPlayer();
40 bool isActiveDemoWithCinemaCaption() const;
41 bool requestStartDemo(const char*, ProjectDemoDirector::DemoType);
42 void requestEndDemo(const char*, ProjectDemoDirector::DemoType);
43 bool requestStartDemoShineMainGet(Shine*, const char*);
44 void requestEndDemoShineMainGet(const char*);
45 bool requestStartDemoShineGrandGet(Shine*, const char*);
46 void requestEndDemoShineGrandGet(const char*);
47 void setShine(Shine*);
48 void clearShine();
49 bool requestStartDemoScenarioCamera(const char*);
50 void requestEndDemoScenarioCamera(const char*);
51 void addDemoAppearFromHomeToList(ShineTowerRocket*);
52 bool requestStartDemoAppearFromHome(const char*);
53 void requestEndDemoAppearFromHome(const char*);
54 void addDemoReturnToHomeToList(ShineTowerRocket*);
55 bool requestStartDemoReturnToHome(const char*);
56 void requestEndDemoReturnToHome(const char*);
57 void addDemoRiseMapPartsToList(RiseMapPartsHolder*);
58 bool requestStartDemoRiseMapParts(const char*);
59 void requestEndDemoRiseMapParts(const char*);
60 bool isExistDemoWorldLandInList() const;
61 bool isExistDemoAppearFromHomeInList() const;
62 bool isExistDemoReturnToHome() const;
63 bool isExistDemoRiseMapPartsInList() const;
64 void startCloseDemoFade(s32);
65 void startOpenDemoFade(s32);
66 bool isDemoFadeCloseEnd() const;
67 bool isDemoFadeOpenEnd() const;
68 bool isWipeStateEnableOpenMenuOrSnapShotMode() const;
69 DemoHackFirstDirector* tryCreateDemoHackFirstDirector(al::LiveActor*, s32,
70 const al::ActorInitInfo&);
71 void noticeDemoStartToDemoHackFirstDirector();
72 void setDemoEnvironmentChangeFlag(bool);
73 void registerDemoChangeEffectObj(DemoChangeEffectObj*);
74 bool startDemo(const char*) override;
75 void endDemo(const char*) override;
76
77private:
78 al::PlayerHolder* mPlayerHolder;
79 al::GraphicsSystemInfo* mGfxSysInfo;
80 ShineTowerRocket* mShineTowerRocket;
81 RiseMapPartsHolder* mRiseMapPartsHolder;
82 s32* mDemoList;
83 Shine* mDemoShine;
84 DemoType mDemoType;
85 IUseDemoSkip* mDemoSkipRequester;
86 bool mIsDemoSkipping;
87 void* mCinemaCaption;
88 al::WipeSimple* mDemoWipe;
89 DemoHackFirstDirector* mDemoHackFirstDirector;
90 void* _b0;
91 bool mIsDemoEnvironmentChangeFlag;
92 sead::PtrArray<DemoChangeEffectObj> mDemoChangeEffectObjArray;
93 s32 _d0;
94 void* _d8;
95 u16 _e0;
96 s32 _e4;
97};
98