1#pragma once
2
3#include "Library/Nerve/NerveStateBase.h"
4
5#include "System/GameDataHolderAccessor.h"
6
7namespace al {
8struct ActorInitInfo;
9class HtmlViewer;
10class KeyRepeatCtrl;
11class LayoutInitInfo;
12class PauseCameraCtrl;
13class Scene;
14struct SceneInitInfo;
15class SimpleLayoutAppearWaitEnd;
16class WindowConfirm;
17class WipeSimple;
18} // namespace al
19class FooterParts;
20class GameDataHolder;
21class MenuSelectParts;
22class SceneAudioSystemPauseController;
23class StageSceneLayout;
24class StageSceneStateEndSeparatePlay;
25class StageSceneStateOption;
26class StageSceneStateStartSeparatePlay;
27
28class StageSceneStatePauseMenu : public al::HostStateBase<al::Scene> {
29public:
30 static const s32 cMenuItemAmount = 5;
31 enum class StartType { Title, Normal, AfterTitle };
32
33 StageSceneStatePauseMenu(const char* name, al::Scene* host,
34 al::SimpleLayoutAppearWaitEnd* menuLayout,
35 GameDataHolder* gameDataHolder, const al::SceneInitInfo& sceneInitInfo,
36 const al::ActorInitInfo& actorInitInfo,
37 const al::LayoutInitInfo& layoutInitInfo,
38 al::WindowConfirm* windowConfirm, StageSceneLayout* stageSceneLayout,
39 bool isTitle,
40 SceneAudioSystemPauseController* sceneAudioSystemPauseController);
41
42 void appear() override;
43 void kill() override;
44
45 void killPauseMenu();
46 void killMarioModel();
47 bool isNeedKillHost() const;
48 void startNormal();
49 void startAfterTitle();
50 void killAllOptionLayout();
51 bool isEndToCancel() const;
52 bool isEndToHelp() const;
53 bool isLoadData() const;
54 s32 getSelectedFileId() const;
55 bool isChangeLanguage() const;
56 const char* getLanguage() const;
57 bool isNewGame() const;
58 bool isModeSelectEnd() const;
59 bool checkNeedKillByHostAndEnd();
60
61 void startActionMario(const char*);
62 al::LiveActor* getMarioActor() const;
63
64 bool isDrawLayout() const;
65 bool isDrawLayoutMain() const;
66 bool isDrawViewRenderer() const;
67 bool isDrawChromakey() const;
68
69 void exeAppear();
70 void setNormal();
71 void appearMarioModel();
72 void updatePlayerPose();
73 void exeWait();
74 void changeNerveAndReturn(const al::Nerve* nerve);
75 void exeFadeBeforeHelp();
76 void exeStartHelp();
77 void exeWaitDraw();
78 void exeEnd();
79 void exeStartSeparatePlay();
80 void exeEndSeparatePlay();
81 void exeOption();
82 void exeSave();
83 void exeConfirmNewGame();
84 void exeNotExistEmptyFile();
85
86 void startPauseCamera();
87 void setAfterTitle();
88
89private:
90 al::SimpleLayoutAppearWaitEnd* mMenuLayout = nullptr;
91 al::SimpleLayoutAppearWaitEnd* mMenuGuide = nullptr;
92 al::SimpleLayoutAppearWaitEnd* mMenuRight = nullptr;
93 FooterParts* mFooterParts;
94 MenuSelectParts* mSelectParts = nullptr;
95 al::WipeSimple* mMenuWipe = nullptr;
96 al::WipeSimple* mHelpWipe = nullptr;
97 StartType mStartType = StartType::Title;
98 StageSceneStateStartSeparatePlay* mStateStartSeparatePlay = nullptr;
99 StageSceneStateEndSeparatePlay* mStateEndSeparatePlay = nullptr;
100 StageSceneStateOption* mStateOption = nullptr;
101 al::LiveActor* mMarioActor = nullptr;
102 char field_0x80[40];
103 GameDataHolderAccessor mGameDataHolderAccessor;
104 al::PauseCameraCtrl* mPauseCameraCtrl = nullptr;
105 al::WindowConfirm* mWindowConfirm = nullptr;
106 bool mIsNewGame = false;
107 al::KeyRepeatCtrl* mKeyRepeatCtrl = nullptr;
108 StageSceneLayout* mStageSceneLayout = nullptr;
109 bool mIsNormal = true;
110 bool mIsShowMarioModel = false;
111 f32 mPrevNearClipDistance = 25.0f;
112 SceneAudioSystemPauseController* mSceneAudioSystemPauseController = nullptr;
113 al::HtmlViewer* mHtmlViewer = nullptr;
114};
115