mirror of
https://github.com/MonsterDruide1/OdysseyDecomp
synced 2026-05-06 23:38:32 +00:00
132 lines
4.4 KiB
C++
132 lines
4.4 KiB
C++
#include "Scene/FirstSequenceScene.h"
|
|
|
|
#include <common/aglDrawContext.h>
|
|
#include <gfx/seadViewport.h>
|
|
|
|
#include "Library/Audio/AudioDirectorInitInfo.h"
|
|
#include "Library/Audio/System/AudioKeeperFunction.h"
|
|
#include "Library/Bgm/BgmLineFunction.h"
|
|
#include "Library/Draw/GraphicsFunction.h"
|
|
#include "Library/Framework/GameFrameworkNx.h"
|
|
#include "Library/Layout/LayoutActionFunction.h"
|
|
#include "Library/Layout/LayoutInitInfo.h"
|
|
#include "Library/Layout/LayoutSystem.h"
|
|
#include "Library/Layout/LayoutUtil.h"
|
|
#include "Library/Message/LanguageUtil.h"
|
|
#include "Library/Nerve/NerveSetupUtil.h"
|
|
#include "Library/Nerve/NerveUtil.h"
|
|
#include "Library/Scene/SceneObjUtil.h"
|
|
#include "Library/Scene/SceneUtil.h"
|
|
#include "Library/System/GameSystemInfo.h"
|
|
|
|
#include "Layout/BootLayout.h"
|
|
#include "Scene/SceneObjFactory.h"
|
|
#include "Scene/SceneStateSelectMode.h"
|
|
#include "Scene/StageScene.h"
|
|
#include "System/Application.h"
|
|
#include "System/GameDataFile.h"
|
|
#include "System/GameDataFunction.h"
|
|
#include "Util/ScenePrepoFunction.h"
|
|
|
|
namespace {
|
|
NERVE_IMPL(FirstSequenceScene, Wipe)
|
|
NERVE_IMPL(FirstSequenceScene, SelectMode)
|
|
|
|
NERVES_MAKE_NOSTRUCT(FirstSequenceScene, Wipe, SelectMode)
|
|
} // namespace
|
|
|
|
FirstSequenceScene::FirstSequenceScene() : al::Scene("FirstSequenceScene") {}
|
|
|
|
FirstSequenceScene::~FirstSequenceScene() {
|
|
Application::instance()->getGameFramework()->enableClearRenderBuffer();
|
|
}
|
|
|
|
void FirstSequenceScene::init(const al::SceneInitInfo& initInfo) {
|
|
initDrawSystemInfo(initInfo);
|
|
|
|
initSceneObjHolder(SceneObjFactory::createSceneObjHolder());
|
|
al::setSceneObj(this, GameDataFunction::getGameDataHolder(initInfo.gameDataHolder),
|
|
SceneObjID_GameDataHolder);
|
|
|
|
initSceneStopCtrl();
|
|
|
|
al::AudioDirectorInitInfo audioDirectorInitInfo;
|
|
al::initAudioDirector2D(this, initInfo, audioDirectorInitInfo);
|
|
alAudioSystemFunction::disableAudioMaximizer(initInfo.gameSystemInfo);
|
|
al::initSceneAudioKeeper(this, initInfo, nullptr);
|
|
|
|
initLayoutKit(initInfo);
|
|
getLayoutKit()->createExecuteDirector(0x80);
|
|
al::LayoutInitInfo layoutInitInfo;
|
|
al::initLayoutInitInfo(&layoutInitInfo, this, initInfo);
|
|
|
|
mBootLayout = new BootLayout(layoutInitInfo);
|
|
mBootLayout->appear();
|
|
mBootLayout->end();
|
|
|
|
initNerve(&Wipe, 1);
|
|
|
|
mWaveVibrationHolder = initInfo.gameSystemInfo->waveVibrationHolder;
|
|
|
|
mStateSelectMode = new SceneStateSelectMode("モード選択", this, layoutInitInfo, nullptr,
|
|
nullptr, mWaveVibrationHolder);
|
|
al::initNerveState(this, mStateSelectMode, &SelectMode, "モード選択");
|
|
|
|
getLayoutKit()->endInit();
|
|
}
|
|
|
|
void FirstSequenceScene::appear() {
|
|
al::Scene::appear();
|
|
|
|
Application::instance()->getGameFramework()->disableClearRenderBuffer();
|
|
|
|
al::startBgm(this, "Stage", -1, 0);
|
|
}
|
|
|
|
void FirstSequenceScene::control() {
|
|
al::isStopScene(this);
|
|
}
|
|
|
|
void FirstSequenceScene::drawMain() const {
|
|
agl::DrawContext* drawContext = al::getSceneDrawContext(this);
|
|
agl::RenderBuffer* framebuffer = al::getSceneFrameBufferMain(this);
|
|
|
|
sead::Viewport viewport(*framebuffer);
|
|
viewport.apply(drawContext, *framebuffer);
|
|
framebuffer->bind(drawContext);
|
|
|
|
al::setRenderBuffer(getLayoutKit(), framebuffer);
|
|
framebuffer->clear(drawContext, sead::FrameBuffer::cColor | sead::FrameBuffer::cDepth,
|
|
sead::Color4f::cGray, al::getDepthClearValue(), 0);
|
|
al::setRenderBuffer(getLayoutKit(), framebuffer);
|
|
|
|
al::drawLayoutKit(this, "2Dバック(メイン画面)");
|
|
al::drawLayoutKit(this, "2Dベース(メイン画面)");
|
|
al::drawLayoutKit(this, "2Dオーバー(メイン画面)");
|
|
}
|
|
|
|
void FirstSequenceScene::setNoWipe() {
|
|
mBootLayout->endImmidiate();
|
|
|
|
al::setNerve(this, &SelectMode);
|
|
}
|
|
|
|
void FirstSequenceScene::exeWipe() {
|
|
rs::updateKitListLayoutOnlyLayoutScene(this);
|
|
|
|
if (al::isActionEnd(mBootLayout))
|
|
al::setNerve(this, &SelectMode);
|
|
}
|
|
|
|
void FirstSequenceScene::exeSelectMode() {
|
|
if (al::updateNerveState(this)) {
|
|
GameDataHolder* gameDataHolder = GameDataFunction::getGameDataHolder(this);
|
|
|
|
rs::trySavePrepoSettingsState(gameDataHolder->getGameDataFile()->isKidsMode(),
|
|
al::getLanguageString(), *gameDataHolder->getGameConfigData(),
|
|
GameDataFunction::getSaveDataIdForPrepo(this),
|
|
GameDataFunction::getPlayTimeAcrossFile(this));
|
|
kill();
|
|
}
|
|
}
|