feat(controls): redefinició de tecles i botons del mando des del menú de servei
This commit is contained in:
1 parent
4739354875
commit
37fdcb4751
15 files changed
+1169
-80
No files matched your search
@@ -1,5 +1,8 @@
|
||||
#pragma once
|
||||
|
||||
#include <SDL3/SDL.h>
|
||||
|
||||
#include <cstdint>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
@@ -114,9 +117,49 @@ namespace Options {
|
||||
std::string path;
|
||||
};
|
||||
|
||||
// Tecles de joc d'un jugador (vinculacions remapeables des del menú).
|
||||
// Cada camp és un `SDL_Scancode` literal; els defaults venen de
|
||||
// `Defaults::KeysGame*` segons el slot (P1 fletxes, P2 WASD).
|
||||
struct Keyboard {
|
||||
SDL_Scancode up{SDL_SCANCODE_UNKNOWN};
|
||||
SDL_Scancode down{SDL_SCANCODE_UNKNOWN};
|
||||
SDL_Scancode left{SDL_SCANCODE_UNKNOWN};
|
||||
SDL_Scancode right{SDL_SCANCODE_UNKNOWN};
|
||||
SDL_Scancode jump{SDL_SCANCODE_UNKNOWN};
|
||||
SDL_Scancode attack{SDL_SCANCODE_UNKNOWN};
|
||||
};
|
||||
|
||||
// Identificadors d'acció per als setters genèrics: una sola funció
|
||||
// `setKeyboardBinding(player_id, action, scancode)` cobreix les 12
|
||||
// possibles vinculacions sense haver de generar 12 setters individuals.
|
||||
enum class KeyboardAction : std::uint8_t {
|
||||
UP,
|
||||
DOWN,
|
||||
LEFT,
|
||||
RIGHT,
|
||||
JUMP,
|
||||
ATTACK,
|
||||
};
|
||||
|
||||
struct Controls {
|
||||
GamepadAssignment gamepad_p1{};
|
||||
GamepadAssignment gamepad_p2{};
|
||||
Keyboard keyboard_p1{
|
||||
.up = Defaults::KeysGame::UP,
|
||||
.down = Defaults::KeysGame::DOWN,
|
||||
.left = Defaults::KeysGame::LEFT,
|
||||
.right = Defaults::KeysGame::RIGHT,
|
||||
.jump = Defaults::KeysGame::JUMP,
|
||||
.attack = Defaults::KeysGame::ATTACK,
|
||||
};
|
||||
Keyboard keyboard_p2{
|
||||
.up = Defaults::KeysGameP2::UP,
|
||||
.down = Defaults::KeysGameP2::DOWN,
|
||||
.left = Defaults::KeysGameP2::LEFT,
|
||||
.right = Defaults::KeysGameP2::RIGHT,
|
||||
.jump = Defaults::KeysGameP2::JUMP,
|
||||
.attack = Defaults::KeysGameP2::ATTACK,
|
||||
};
|
||||
};
|
||||
|
||||
// --- Getters de l'estat (read-only) ---
|
||||
@@ -153,6 +196,12 @@ namespace Options {
|
||||
// = desassignació. `player_id`: 0 = P1, 1 = P2.
|
||||
void setGamepadAssignment(int player_id, const std::string& name, const std::string& path);
|
||||
|
||||
// Assigna un nou scancode a una acció d'un jugador i persisteix a
|
||||
// `config.yaml`. `player_id`: 0 = P1, 1 = P2. Sense validació de
|
||||
// conflictes — replicant la referència AEE, el mateix scancode pot
|
||||
// quedar associat a múltiples accions si l'usuari ho elegeix.
|
||||
void setKeyboardBinding(int player_id, KeyboardAction action, SDL_Scancode scancode);
|
||||
|
||||
// --- API pública: càrrega/desament de fitxers ---
|
||||
void setConfigFile(const std::string& path);
|
||||
auto loadFromFile() -> bool;
|
||||
|
||||
Reference in new issue
Block a user