1#include "Scene/StageSceneStateEndSeparatePlay.h"
2
3#include "Library/Nerve/NerveSetupUtil.h"
4#include "Library/Nerve/NerveUtil.h"
5#include "Library/Play/Layout/WipeSimple.h"
6
7#include "Scene/StageSceneStatePauseMenu.h"
8#include "Util/StageInputFunction.h"
9
10namespace {
11NERVE_IMPL(StageSceneStateEndSeparatePlay, FadeOut);
12NERVE_IMPL(StageSceneStateEndSeparatePlay, FadeIn);
13NERVE_IMPL(StageSceneStateEndSeparatePlay, Applet);
14NERVE_IMPL(StageSceneStateEndSeparatePlay, WaitDraw);
15
16NERVES_MAKE_NOSTRUCT(StageSceneStateEndSeparatePlay, Applet);
17NERVES_MAKE_STRUCT(StageSceneStateEndSeparatePlay, FadeOut, FadeIn, WaitDraw);
18} // namespace
19
20StageSceneStateEndSeparatePlay::StageSceneStateEndSeparatePlay(const char* name,
21 StageSceneStatePauseMenu* host,
22 const al::LayoutInitInfo& info,
23 al::WipeSimple* wipeSimple,
24 al::GamePadSystem* gamePadSystem)
25 : al::HostStateBase<StageSceneStatePauseMenu>(name, host), mGamePadSystem(gamePadSystem),
26 mWipeSimple(wipeSimple) {
27 initNerve(nerve: &NrvStageSceneStateEndSeparatePlay.FadeOut, stateCount: 0);
28}
29
30void StageSceneStateEndSeparatePlay::appear() {
31 al::NerveStateBase::appear();
32 mIsCancel = false;
33 al::setNerve(user: this, nerve: &NrvStageSceneStateEndSeparatePlay.FadeOut);
34}
35
36bool StageSceneStateEndSeparatePlay::isNeedRequestGraphicsPreset() const {
37 return (mIsCancel && al::isNerve(user: this, nerve: &NrvStageSceneStateEndSeparatePlay.FadeIn)) ||
38 al::isNerve(user: this, nerve: &NrvStageSceneStateEndSeparatePlay.FadeOut);
39}
40
41void StageSceneStateEndSeparatePlay::exeFadeOut() {
42 if (al::isFirstStep(user: this))
43 mWipeSimple->startClose();
44 if (mWipeSimple->isCloseEnd())
45 al::setNerve(user: this, nerve: &Applet);
46}
47
48void StageSceneStateEndSeparatePlay::exeApplet() {
49 if (ControllerAppletFunction::connectControllerSinglePlay(mGamePadSystem))
50 rs::changeSeparatePlayMode(getScene(), false);
51 else
52 mIsCancel = true;
53 al::setNerve(user: this, nerve: &NrvStageSceneStateEndSeparatePlay.WaitDraw);
54}
55
56al::Scene* StageSceneStateEndSeparatePlay::getScene() {
57 return getHost()->getHost();
58}
59
60void StageSceneStateEndSeparatePlay::exeFadeIn() {
61 if (al::isFirstStep(user: this))
62 mWipeSimple->startOpen();
63 if (mWipeSimple->isOpenEnd())
64 kill();
65}
66
67void StageSceneStateEndSeparatePlay::exeWaitDraw() {
68 if (al::isFirstStep(user: this) && !mIsCancel)
69 getHost()->killPauseMenu();
70 if (al::isGreaterEqualStep(user: this, step: 2))
71 al::setNerve(user: this, nerve: &NrvStageSceneStateEndSeparatePlay.FadeIn);
72}
73
74bool StageSceneStateEndSeparatePlay::isDrawViewRenderer() const {
75 if (isDead() || mIsCancel)
76 return false;
77 return al::isNerve(user: this, nerve: &NrvStageSceneStateEndSeparatePlay.WaitDraw) ||
78 al::isNerve(user: this, nerve: &NrvStageSceneStateEndSeparatePlay.FadeIn);
79}
80