feat(input): binding START per jugador (teclat 1/2 fix, mando remapejable; pausa només per F11)
This commit is contained in:
1 parent
165499b9d4
commit
5710568af8
9 files changed
+21
-9
No files matched your search
@@ -27,6 +27,8 @@ class Player : public AnimatedSprite {
|
||||
SDL_Scancode right;
|
||||
SDL_Scancode jump;
|
||||
SDL_Scancode attack;
|
||||
// No remapejable des del menú de servei: P1 → "1", P2 → "2".
|
||||
SDL_Scancode start;
|
||||
};
|
||||
|
||||
// Estat d'alt nivell del jugador. Ortogonal a `Facing`/`Cardinal`
|
||||
|
||||
@@ -14,7 +14,6 @@
|
||||
#include <vector>
|
||||
|
||||
#include "core/audio/audio.hpp"
|
||||
#include "core/input/gamepad_manager.hpp"
|
||||
#include "core/input/global_inputs.hpp"
|
||||
#include "core/input/key_config.hpp"
|
||||
#include "core/locale/locale.hpp"
|
||||
@@ -348,6 +347,7 @@ GameScene::GameScene(Config config)
|
||||
.right = kb_p1.right,
|
||||
.jump = kb_p1.jump,
|
||||
.attack = kb_p1.attack,
|
||||
.start = Defaults::KeysGame::START,
|
||||
};
|
||||
const Player::Controls CONTROLS_P2{
|
||||
.up = kb_p2.up,
|
||||
@@ -356,6 +356,7 @@ GameScene::GameScene(Config config)
|
||||
.right = kb_p2.right,
|
||||
.jump = kb_p2.jump,
|
||||
.attack = kb_p2.attack,
|
||||
.start = Defaults::KeysGameP2::START,
|
||||
};
|
||||
// Spawn lligat a la porta: tots els jugadors apareixen davant del
|
||||
// passadís de sortida. `computeSpawn` deriva les coordenades de
|
||||
@@ -1044,11 +1045,9 @@ void GameScene::handlePauseInput() {
|
||||
if (editor_.active()) { return; }
|
||||
#endif
|
||||
const SDL_Scancode PAUSE_SC = KeyConfig::get().scancode("pause");
|
||||
SDL_Gamepad* pad = GamepadManager::get().getPrimary();
|
||||
for (const auto& event : EventBuffer::events) {
|
||||
const bool KEY_HIT = (event.type == SDL_EVENT_KEY_DOWN && PAUSE_SC != SDL_SCANCODE_UNKNOWN && event.key.scancode == PAUSE_SC);
|
||||
const bool PAD_HIT = (event.type == SDL_EVENT_GAMEPAD_BUTTON_DOWN && pad != nullptr && event.gbutton.which == SDL_GetGamepadID(pad) && event.gbutton.button == SDL_GAMEPAD_BUTTON_START);
|
||||
if (!KEY_HIT && !PAD_HIT) { continue; }
|
||||
if (!KEY_HIT) { continue; }
|
||||
|
||||
// Determinem cap a quin estat anem. Si estem quiets (IDLE o
|
||||
// PAUSED) arranquem la transició contrària. Si estem en marxa
|
||||
|
||||
@@ -58,10 +58,12 @@ class GameScene : public Scene {
|
||||
// crida `setState` (que reseteja la `Transition`).
|
||||
void updateRoomTransition(int delta_ms);
|
||||
|
||||
// Consumeix events d'aquest frame (F11 del KeyConfig "pause" o botó
|
||||
// START del gamepad primari) per disparar les transicions de pausa.
|
||||
// No alterna un flag binari: inicia (o inverteix mid-flight) un
|
||||
// "dial" de temps que frena el món amb easing.
|
||||
// Consumeix events d'aquest frame (F11 del KeyConfig "pause") per
|
||||
// disparar les transicions de pausa. El mando ja no participa: el
|
||||
// botó START és ara una acció remapeable per dispositiu i el menú
|
||||
// de servei fa de pausa quan cal. No alterna un flag binari: inicia
|
||||
// (o inverteix mid-flight) un "dial" de temps que frena el món amb
|
||||
// easing.
|
||||
void handlePauseInput();
|
||||
|
||||
// Avança la transició activa, recalcula `pause_.scale` i aplica el
|
||||
|
||||
Reference in new issue
Block a user