feat(demo): attract mode amb pilot IA, escenaris curats i música contínua del títol
This commit is contained in:
@@ -94,7 +94,15 @@ TitleScene::TitleScene(SDLManager& sdl, SceneContext& context)
|
||||
}
|
||||
|
||||
TitleScene::~TitleScene() {
|
||||
Audio::get()->stopMusic();
|
||||
// Attract mode: si saltem a la demo, NO parem la música — ha de seguir
|
||||
// sonant durant tot el cicle TÍTOL→DEMO→LOGO→TÍTOL. La resta de sortides
|
||||
// (partida normal, EXIT) sí paren.
|
||||
const bool ENTERING_DEMO =
|
||||
context_.nextScene() == SceneType::GAME &&
|
||||
context_.getMatchConfig().mode == GameConfig::Mode::DEMO;
|
||||
if (!ENTERING_DEMO) {
|
||||
Audio::get()->stopMusic();
|
||||
}
|
||||
}
|
||||
|
||||
void TitleScene::initTitle() {
|
||||
@@ -340,6 +348,25 @@ void TitleScene::update(float delta_time) {
|
||||
handleSkipInput();
|
||||
handleStartInput();
|
||||
}
|
||||
|
||||
// Attract mode: al state MAIN, acumular inactivitat; qualsevol botó
|
||||
// arcade la reseteja. En esgotar el timeout, saltar a la demo (mode DEMO,
|
||||
// P1 actiu) sense fer fadeOut de la música (a diferència del START real).
|
||||
if (current_state_ == TitleState::MAIN && !INPUT_BLOCKED) {
|
||||
if (Input::get()->checkAnyPlayerAction(ARCADE_BUTTONS, Input::ALLOW_REPEAT)) {
|
||||
idle_timer_ = 0.0F;
|
||||
} else {
|
||||
idle_timer_ += delta_time;
|
||||
}
|
||||
if (idle_timer_ >= TITLE_DEMO_TIMEOUT) {
|
||||
GameConfig::MatchConfig demo_cfg;
|
||||
demo_cfg.player1_active = true;
|
||||
demo_cfg.player2_active = false;
|
||||
demo_cfg.mode = GameConfig::Mode::DEMO;
|
||||
context_.setMatchConfig(demo_cfg);
|
||||
context_.setNextScene(SceneType::GAME);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void TitleScene::updateStarfieldFadeInState(float delta_time) {
|
||||
|
||||
Reference in New Issue
Block a user