1#pragma once
2
3#include <basis/seadTypes.h>
4
5#include "Library/Sequence/Sequence.h"
6
7#include "System/GameDataHolderAccessor.h"
8
9class HakoniwaStateDemoOpening;
10class HakoniwaStateDemoEnding;
11class HakoniwaStateDemoWorldWarp;
12class HakoniwaStateSimpleDemo;
13class HakoniwaStateBootLoadData;
14class HakoniwaStateDeleteScene;
15class WorldResourceLoader;
16class StageScene;
17class GameDataHolderAccessor;
18class BootLayout;
19class TimeBalloonSequenceInfo;
20class CollectBgmPlayer;
21class LoadLayoutCtrl;
22
23namespace al {
24class WipeHolder;
25class Scene;
26class AudioDirector;
27class LayoutKit;
28class SimpleLayoutAppearWaitEnd;
29class AsyncFunctorThread;
30class SeadAudioPlayer;
31class AudioBusSendFader;
32class SimpleAudioUser;
33class ScreenCaptureExecutor;
34class GamePadSystem;
35class EffectSystem;
36
37} // namespace al
38
39class HakoniwaSequence : public al::Sequence {
40public:
41 HakoniwaSequence(const char* name);
42
43 void init(const al::SequenceInitInfo& info) override;
44 void update() override;
45 void drawMain() const override;
46
47 void updatePadSystem();
48 void destroySceneHeap(bool destroyResource);
49 void initSystem();
50 bool isEnableSave() const;
51
52 void exeBootLoadData();
53 void exeDemoOpening();
54 void exeLoadWorldResource();
55 void exeLoadWorldResourceWithBoot();
56 void exeLoadStage();
57 void exePlayStage();
58 void exeDemoWorldWarp();
59 void exeDemoEnding();
60 void exeDestroy();
61 void exeMiss();
62 void exeMissCoinSub();
63 void exeMissEnd();
64 void exeDemoLava();
65 void exeFadeToNewGame();
66 void exeChangeLanguage();
67 void exeWaitWriteData();
68 void exeWaitLoadData();
69 void exeWaitWriteDataModeChange();
70 void exeWaitLoadDataModeChange();
71
72 bool isDisposable() const override;
73 al::Scene* getCurrentScene() const override;
74
75private:
76 al::Scene* mCurrentScene;
77 GameDataHolderAccessor mGameDataHolderAccessor;
78 al::GamePadSystem* mGamePadSystem;
79 HakoniwaStateDemoOpening* mStateDemoOpening;
80 HakoniwaStateDemoEnding* mStateDemoEnding;
81 HakoniwaStateDemoWorldWarp* mStateDemoWorldWarp;
82 HakoniwaStateSimpleDemo* mStateSimpleDemo;
83 HakoniwaStateBootLoadData* mStateBootLoadData;
84 HakoniwaStateDeleteScene* mStateDeleteScene;
85 al::LayoutKit* mLayoutKit;
86 bool _100;
87 sead::FixedSafeString<128> mStageName;
88 s32 mNextScenarioNum;
89 s32 _1a4;
90 al::ScreenCaptureExecutor* mScreenCaptureExecutor;
91 al::WipeHolder* mWipeHolder;
92 bool mIsMissEnd;
93 al::SimpleLayoutAppearWaitEnd* mCounterMiss;
94 s32 mCurrentCoins;
95 s32 mFinalCoins;
96 BootLayout* mBootLayout;
97 al::EffectSystem* mEffectSystem;
98 al::AsyncFunctorThread* mInitThread;
99 bool mIsInitialized;
100 al::SeadAudioPlayer* mSeAudioPlayer;
101 al::SeadAudioPlayer* mBgmAudioPlayer;
102 al::AudioBusSendFader* mAudioBusSendFader;
103 WorldResourceLoader* mResourceLoader;
104 sead::Heap* mPlayerResourceHeap;
105 sead::FixedSafeString<128> mCapName;
106 sead::FixedSafeString<128> mCostumeName;
107 al::SimpleAudioUser* mPlayerAudioUser;
108 bool mIsHackEnd;
109 TimeBalloonSequenceInfo* mBalloonSeqInfo;
110 CollectBgmPlayer* mCollectBgmPlayer;
111 sead::FixedSafeString<128> mLanguage;
112 s32 mFileId;
113 LoadLayoutCtrl* mLoadLayoutCtrl;
114 bool mIsKidsMode;
115};
116
117static_assert(sizeof(HakoniwaSequence) == 0x418, "HakoniwaSequnce size");
118