Habilita la regla 1 de la nova FSM de joc: durant PLAYING, qualsevol
slot DISABLED pot pulsar START per entrar a partida amb spawn aeri al
seu costat de la porta i vides reseteades. Quan un jugador esgota les
vides, `respawnFromDying` el deixa a DISABLED i publica `player_disabled`
al bus; GameScene i HUD reaccionen, deixant el slot disponible per a un
nou join. Afegeix prompts al HUD ("PULSA START / PER JUGAR" o
"ESPERA / PER JUGAR") segons l'estat de la RoomFsm.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
33 lines
1.3 KiB
C++
33 lines
1.3 KiB
C++
#include "game/scenes/start_input.hpp"
|
|
|
|
#include <SDL3/SDL.h>
|
|
|
|
#include <algorithm>
|
|
|
|
#include "core/input/gamepad_bindings.hpp"
|
|
#include "core/input/gamepad_manager.hpp"
|
|
#include "core/system/event_buffer.hpp"
|
|
#include "game/options.hpp"
|
|
#include "utils/defaults.hpp"
|
|
|
|
namespace Input::Detect {
|
|
|
|
auto pressedStart(int player_id) -> bool {
|
|
const SDL_Scancode KB = (player_id == 0) ? Defaults::KeysGame::START : Defaults::KeysGameP2::START;
|
|
SDL_Gamepad* pad = GamepadManager::get().getForPlayer(player_id);
|
|
const SDL_JoystickID PAD_ID = (pad != nullptr) ? SDL_GetGamepadID(pad) : 0;
|
|
const auto& slot = (player_id == 0) ? Options::controls().gamepad_p1
|
|
: Options::controls().gamepad_p2;
|
|
const int START_BTN = GamepadBindings::get().getButton(slot.name, slot.path, GamepadBindings::Action::START);
|
|
|
|
return std::ranges::any_of(EventBuffer::events, [&](const SDL_Event& ev) {
|
|
if (ev.type == SDL_EVENT_KEY_DOWN && ev.key.scancode == KB) { return true; }
|
|
if (ev.type == SDL_EVENT_GAMEPAD_BUTTON_DOWN && pad != nullptr && ev.gbutton.which == PAD_ID && static_cast<int>(ev.gbutton.button) == START_BTN) {
|
|
return true;
|
|
}
|
|
return false;
|
|
});
|
|
}
|
|
|
|
} // namespace Input::Detect
|