varies coses i detallets
This commit is contained in:
52
source/core/input/key_config.hpp
Normal file
52
source/core/input/key_config.hpp
Normal file
@@ -0,0 +1,52 @@
|
||||
#pragma once
|
||||
|
||||
#include <SDL3/SDL.h>
|
||||
|
||||
#include <string>
|
||||
#include <unordered_map>
|
||||
#include <vector>
|
||||
|
||||
// KeyConfig: font única de veritat per a les tecles d'UI/sistema.
|
||||
//
|
||||
// Llegeix els valors per defecte des de `data/input/keys.yaml` (recurs read-only)
|
||||
// i opcionalment aplica overrides des d'un fitxer de l'usuari (per a remapejos
|
||||
// fets des del menú de servei). Els callers consulten per `id` (ex. "menu_toggle").
|
||||
//
|
||||
// Les tecles de moviment del jugador NO viuen ací — es queden a Options::keys_game.
|
||||
|
||||
struct KeyEntry {
|
||||
std::string id;
|
||||
std::string code; // nom SDL del scancode tal com apareix al YAML
|
||||
std::string desc;
|
||||
SDL_Scancode scancode{SDL_SCANCODE_UNKNOWN};
|
||||
SDL_Scancode default_scancode{SDL_SCANCODE_UNKNOWN};
|
||||
};
|
||||
|
||||
namespace KeyConfig {
|
||||
// Inicialitza KeyConfig llegint defaults des d'un recurs (via ResourceHelper)
|
||||
// i opcionalment sobreposant overrides des d'un fitxer de disc.
|
||||
void init(const std::string& defaults_resource_path,
|
||||
const std::string& user_overrides_disk_path);
|
||||
void destroy();
|
||||
|
||||
// Consulta el scancode actual associat a un id. Torna SDL_SCANCODE_UNKNOWN si no existix.
|
||||
[[nodiscard]] auto scancode(const std::string& id) -> SDL_Scancode;
|
||||
|
||||
// Punter estable al scancode d'un id — útil per a Menu::ItemKind::KeyBind.
|
||||
// Torna nullptr si l'id no existix.
|
||||
[[nodiscard]] auto scancodePtr(const std::string& id) -> SDL_Scancode*;
|
||||
|
||||
// Estableix el scancode d'un id. No persistix per si sol — cal cridar saveOverrides().
|
||||
void setScancode(const std::string& id, SDL_Scancode sc);
|
||||
|
||||
// True si el scancode coincidix amb alguna tecla d'UI registrada.
|
||||
// Usat pel Director per a evitar que tecles d'UI activen `key_pressed_` al joc.
|
||||
[[nodiscard]] auto isGuiKey(SDL_Scancode sc) -> bool;
|
||||
|
||||
// Llistat complet de les entrades (per a HELP / debug / iteració).
|
||||
[[nodiscard]] auto entries() -> const std::vector<KeyEntry>&;
|
||||
|
||||
// Persistix al fitxer d'overrides les entrades que difereixen del default.
|
||||
// Si no s'ha proporcionat user_overrides_disk_path al init, és no-op.
|
||||
auto saveOverrides() -> bool;
|
||||
} // namespace KeyConfig
|
||||
Reference in New Issue
Block a user