afegida estructura per al modo quiosco

This commit is contained in:
2026-03-08 08:57:04 +01:00
parent 723ab3d800
commit a8240a5d82
4 changed files with 56 additions and 0 deletions

1
.gitignore vendored
View File

@@ -1,3 +1,4 @@
.cache/
.vscode/ .vscode/
*data/config/config.yaml *data/config/config.yaml
*stats.txt *stats.txt

View File

@@ -88,4 +88,11 @@ constexpr int GAMEPAD_BUTTON_RIGHT = SDL_GAMEPAD_BUTTON_DPAD_RIGHT; // Botón d
constexpr int GAMEPAD_BUTTON_JUMP = SDL_GAMEPAD_BUTTON_WEST; // Botón salto por defecto constexpr int GAMEPAD_BUTTON_JUMP = SDL_GAMEPAD_BUTTON_WEST; // Botón salto por defecto
} // namespace Controls } // namespace Controls
// --- KIOSK ---
namespace Kiosk {
constexpr bool ENABLED = false; // Modo kiosko desactivado por defecto
constexpr const char* TEXT = ""; // Texto del modo kiosko por defecto
constexpr bool INFINITE_LIVES = false; // Vidas infinitas en modo kiosko desactivadas por defecto
} // namespace Kiosk
} // namespace Defaults } // namespace Defaults

View File

@@ -454,6 +454,37 @@ void loadGamepadControlsFromYaml(const fkyaml::node& yaml) {
} }
} }
// Carga configuración del modo kiosko desde YAML
void loadKioskConfigFromYaml(const fkyaml::node& yaml) {
if (yaml.contains("kiosk")) {
const auto& k = yaml["kiosk"];
if (k.contains("enabled")) {
try {
kiosk.enabled = k["enabled"].get_value<bool>();
} catch (...) {
kiosk.enabled = Defaults::Kiosk::ENABLED;
}
}
if (k.contains("text")) {
try {
kiosk.text = k["text"].get_value<std::string>();
} catch (...) {
kiosk.text = Defaults::Kiosk::TEXT;
}
}
if (k.contains("infinite_lives")) {
try {
kiosk.infinite_lives = k["infinite_lives"].get_value<bool>();
} catch (...) {
kiosk.infinite_lives = Defaults::Kiosk::INFINITE_LIVES;
}
}
}
}
// Crea e inicializa las opciones del programa // Crea e inicializa las opciones del programa
void init() { void init() {
#ifdef _DEBUG #ifdef _DEBUG
@@ -516,6 +547,7 @@ auto loadFromFile() -> bool {
loadVideoConfigFromYaml(yaml); loadVideoConfigFromYaml(yaml);
loadKeyboardControlsFromYaml(yaml); loadKeyboardControlsFromYaml(yaml);
loadGamepadControlsFromYaml(yaml); loadGamepadControlsFromYaml(yaml);
loadKioskConfigFromYaml(yaml);
if (console) { if (console) {
std::cout << "Config file loaded successfully\n\n"; std::cout << "Config file loaded successfully\n\n";
@@ -598,6 +630,14 @@ auto saveToFile() -> bool {
file << " button_right: " << gamepadButtonToString(gamepad_controls.button_right) << "\n"; file << " button_right: " << gamepadButtonToString(gamepad_controls.button_right) << "\n";
file << " button_jump: " << gamepadButtonToString(gamepad_controls.button_jump) << "\n"; file << " button_jump: " << gamepadButtonToString(gamepad_controls.button_jump) << "\n";
// KIOSK
file << "\n";
file << "# KIOSK MODE\n";
file << "kiosk:\n";
file << " enabled: " << (kiosk.enabled ? "true" : "false") << "\n";
file << " text: \"" << kiosk.text << "\"\n";
file << " infinite_lives: " << (kiosk.infinite_lives ? "true" : "false") << "\n";
file.close(); file.close();
if (console) { if (console) {

View File

@@ -53,6 +53,13 @@ struct Stats {
std::string worst_nightmare{Defaults::Stats::WORST_NIGHTMARE}; // Habitación con más muertes acumuladas std::string worst_nightmare{Defaults::Stats::WORST_NIGHTMARE}; // Habitación con más muertes acumuladas
}; };
// Estructura para el modo kiosko
struct Kiosk {
bool enabled{Defaults::Kiosk::ENABLED}; // Indica si el modo kiosko está activo
std::string text{Defaults::Kiosk::TEXT}; // Texto a mostrar en el modo kiosko
bool infinite_lives{Defaults::Kiosk::INFINITE_LIVES}; // Indica si el jugador tiene vidas infinitas en modo kiosko
};
// Estructura con opciones de la ventana // Estructura con opciones de la ventana
struct Window { struct Window {
std::string caption{Texts::WINDOW_CAPTION}; // Texto que aparece en la barra de título de la ventana std::string caption{Texts::WINDOW_CAPTION}; // Texto que aparece en la barra de título de la ventana
@@ -117,6 +124,7 @@ inline Window window{}; // Opciones relativas a la ventana
inline Audio audio{}; // Opciones relativas al audio inline Audio audio{}; // Opciones relativas al audio
inline KeyboardControls keyboard_controls{}; // Teclas usadas para jugar inline KeyboardControls keyboard_controls{}; // Teclas usadas para jugar
inline GamepadControls gamepad_controls{}; // Botones del gamepad usados para jugar inline GamepadControls gamepad_controls{}; // Botones del gamepad usados para jugar
inline Kiosk kiosk{}; // Opciones del modo kiosko
// Ruta completa del fichero de configuración (establecida mediante setConfigFile) // Ruta completa del fichero de configuración (establecida mediante setConfigFile)
inline std::string config_file_path{}; inline std::string config_file_path{};