From 329ae7a38e674feb4c69d2c2cefaa6d6be77bdad Mon Sep 17 00:00:00 2001 From: Sergio Valor Date: Wed, 20 May 2026 19:47:18 +0200 Subject: [PATCH] =?UTF-8?q?refactor(#28):=20renombrar=20Options=20?= =?UTF-8?q?=E2=86=92=20ConfigYaml=20+=20netejar=20aliases?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Pas 7 final del hallazgo #28. La capa de game/options havia esdevingut exclusivament una capa de persistència YAML que llegia i escrivia Config::EngineConfig. El nom "Options" no reflectia bé aquest rol. Canvis: - Renomenats fitxers: game/options.{hpp,cpp} → game/config_yaml.{hpp,cpp} (preservant la història de git via mv). - Renomenat namespace: Options → ConfigYaml. - Esborrades del .hpp les referències-alias inline (window, rendering, player1, player2, keyboard_controls, gamepad_controls, console) que ja no tenien call-sites externs (només existien per a la transició). El .hpp ara només exposa engine_config + version + path + funcions. - A config_yaml.cpp s'introdueixen aliases internes (anonymous namespace) per mantenir llegible el codi de la implementació, sense exposar-les. - Actualitzat main.cpp per a usar ConfigYaml::*. - Actualitzats els comentaris stale a sdl_manager.hpp, director.hpp, engine_config.hpp i audio.hpp. Co-Authored-By: Claude Opus 4.7 (1M context) --- source/core/audio/audio.hpp | 2 +- source/core/config/engine_config.hpp | 4 +- source/core/rendering/sdl_manager.hpp | 2 +- source/core/system/director.hpp | 2 +- source/game/{options.cpp => config_yaml.cpp} | 16 ++++-- source/game/config_yaml.hpp | 43 +++++++++++++++ source/game/options.hpp | 56 -------------------- source/main.cpp | 20 +++---- 8 files changed, 71 insertions(+), 74 deletions(-) rename source/game/{options.cpp => config_yaml.cpp} (97%) create mode 100644 source/game/config_yaml.hpp delete mode 100644 source/game/options.hpp diff --git a/source/core/audio/audio.hpp b/source/core/audio/audio.hpp index e37e141..e9f522f 100644 --- a/source/core/audio/audio.hpp +++ b/source/core/audio/audio.hpp @@ -20,7 +20,7 @@ namespace Ja { // --- Clase Audio: gestor d'àudio (singleton) --- // Port del subsistema d'àudio del projecte ../aee, desacoblat d'Options: // la configuración entra per la struct Audio::Config a init()/applySettings(), -// en lloc de llegir directament Options::audio. Això deixa audio.cpp independent +// en lloc de llegir directament ConfigYaml::*. Això deixa audio.cpp independent // del layout d'Options i permet substituir la font de configuración. // // Els volums es manegen internament como a float 0.0–1.0; la capa de diff --git a/source/core/config/engine_config.hpp b/source/core/config/engine_config.hpp index 1d0b9bb..32f91c8 100644 --- a/source/core/config/engine_config.hpp +++ b/source/core/config/engine_config.hpp @@ -2,7 +2,7 @@ // © 2026 JailDesigner // // Struct POD que conté la configuració runtime que els sistemes de `core/` -// llegeixen i muten. La capa de persistència (YAML) viu a `game/options.cpp`, +// llegeixen i muten. La capa de persistència (YAML) viu a `game/config_yaml.cpp`, // que omple aquesta struct a init() i loadFromFile(). // // Es passa per referència (mutable quan cal) al constructor dels sistemes @@ -61,7 +61,7 @@ namespace Config { // Capa de persistència delegada cap a l'EngineConfig. Permet al Director // orquestrar init/load/save sense conèixer cap esquema concret (YAML, - // SQLite, ...) ni la capa que el conté (`game/options.cpp`). + // SQLite, ...) ni la capa que el conté (`game/config_yaml.cpp`). struct ConfigPersistence { std::function init_defaults; // Restaura valors per defecte std::function set_path; // Indica on guardar diff --git a/source/core/rendering/sdl_manager.hpp b/source/core/rendering/sdl_manager.hpp index a1273c7..f5b0dfe 100644 --- a/source/core/rendering/sdl_manager.hpp +++ b/source/core/rendering/sdl_manager.hpp @@ -21,7 +21,7 @@ class SDLManager { // `cfg` ha de viure tant com el manager (el posseeix el Director). // `on_persist` es crida després de mutar la config (per exemple a // toggleVSync) per delegar la persistència en una capa externa - // (game/Options::saveToFile), mantenint sdl_manager agnòstic. + // (game/ConfigYaml::saveToFile), mantenint sdl_manager agnòstic. SDLManager(int width, int height, bool fullscreen, Config::EngineConfig& cfg, std::function on_persist = {}); ~SDLManager(); diff --git a/source/core/system/director.hpp b/source/core/system/director.hpp index c6ce16e..712202a 100644 --- a/source/core/system/director.hpp +++ b/source/core/system/director.hpp @@ -17,7 +17,7 @@ class Director { public: // `cfg` ha de viure tant com el Director (típicament owned per main). // `persistence` encapsula init/load/save delegats a la capa concreta - // (game/Options::*). + // (game/ConfigYaml::*). Director(std::vector const& args, Config::EngineConfig& cfg, Config::ConfigPersistence persistence); diff --git a/source/game/options.cpp b/source/game/config_yaml.cpp similarity index 97% rename from source/game/options.cpp rename to source/game/config_yaml.cpp index 8a383bd..18d9f6b 100644 --- a/source/game/options.cpp +++ b/source/game/config_yaml.cpp @@ -1,4 +1,4 @@ -#include "options.hpp" +#include "config_yaml.hpp" #include #include @@ -9,7 +9,17 @@ #include "external/fkyaml_node.hpp" #include "project.h" -namespace Options { +namespace ConfigYaml { + + namespace { + // Aliases internes per a la implementació, no exposades al .hpp. + // Permeten escriure window.width en lloc d'engine_config.window.width. + Config::WindowConfig& window = engine_config.window; + Config::RenderingConfig& rendering = engine_config.rendering; + Config::PlayerBindings& player1 = engine_config.player1; + Config::PlayerBindings& player2 = engine_config.player2; + bool& console = engine_config.console; + } // namespace // ========== FUNCIONS AUXILIARS PER CONVERSIÓ DE CONTROLES ========== @@ -506,4 +516,4 @@ namespace Options { return true; } -} // namespace Options +} // namespace ConfigYaml diff --git a/source/game/config_yaml.hpp b/source/game/config_yaml.hpp new file mode 100644 index 0000000..95322b3 --- /dev/null +++ b/source/game/config_yaml.hpp @@ -0,0 +1,43 @@ +// config_yaml.hpp - Capa de persistència YAML de Config::EngineConfig +// © 2026 JailDesigner +// +// La configuració runtime viu en Config::EngineConfig (core/config/). +// Aquest fitxer afegeix una capa de persistència YAML que llegeix i +// escriu aquesta struct a disc. La connexió amb el Director es fa via +// Config::ConfigPersistence (lambdes a `main.cpp`), mantenint `core/` +// agnòstic respecte d'aquesta capa. + +#pragma once + +#include + +#include "core/config/engine_config.hpp" + +namespace ConfigYaml { + + // Única font de veritat de la configuració runtime. La capa YAML llegeix + // i escriu aquí; els consumidors (Director i sistemes de core/) reben + // referència a aquesta struct via injecció. + inline Config::EngineConfig engine_config{ + .player2 = { + .keyboard = { + .key_left = SDL_SCANCODE_A, + .key_right = SDL_SCANCODE_D, + .key_thrust = SDL_SCANCODE_W, + .key_shoot = SDL_SCANCODE_LSHIFT, + .key_start = SDL_SCANCODE_2, + }, + .gamepad_name = "", + }, + }; + + // Persistència YAML (no exposada a `core/`). + inline std::string version{}; // Versión del config per validació + inline std::string config_file_path{}; // Establert per setConfigFile() + + void init(); // Inicialitzar engine_config amb els valors per defecte + void setConfigFile(const std::string& path); + auto loadFromFile() -> bool; + auto saveToFile() -> bool; + +} // namespace ConfigYaml diff --git a/source/game/options.hpp b/source/game/options.hpp deleted file mode 100644 index ef8b3dd..0000000 --- a/source/game/options.hpp +++ /dev/null @@ -1,56 +0,0 @@ -// options.hpp - Persistència YAML i globals d'opcions (capa game) -// © 2026 JailDesigner -// -// La configuració runtime viu en una struct única (Config::EngineConfig, -// definida a `core/config/engine_config.hpp`). Aquest fitxer hi posa al -// damunt la capa de persistència YAML i les compatibilitats històriques -// (Options::window, Options::rendering, ...) com a referències inline a -// camps d'aquesta struct. Cost runtime zero, callsites existents no -// requereixen cap canvi. - -#pragma once - -#include - -#include "core/config/engine_config.hpp" - -namespace Options { - - // Única font de veritat de la configuració runtime. Tota la resta de - // globals d'aquest namespace són referències inline a camps d'aquesta - // struct. - inline Config::EngineConfig engine_config{ - .player2 = { - .keyboard = { - .key_left = SDL_SCANCODE_A, - .key_right = SDL_SCANCODE_D, - .key_thrust = SDL_SCANCODE_W, - .key_shoot = SDL_SCANCODE_LSHIFT, - .key_start = SDL_SCANCODE_2, - }, - .gamepad_name = "", - }, - }; - - // Aliases (referències) per al codi existent. - inline Config::WindowConfig& window = engine_config.window; - inline Config::RenderingConfig& rendering = engine_config.rendering; - inline Config::PlayerBindings& player1 = engine_config.player1; - inline Config::PlayerBindings& player2 = engine_config.player2; - inline Config::KeyboardBindings& keyboard_controls = engine_config.keyboard_controls; - inline Config::GamepadBindings& gamepad_controls = engine_config.gamepad_controls; - inline bool& console = engine_config.console; - - // Persistència YAML (es queda en game/, no en core/) - inline std::string version{}; // Versión del config per validació - inline std::string config_file_path{}; // Establert per setConfigFile() - - // Funciones públiques - - void init(); // Inicialitzar con valors per defecte - void setConfigFile( - const std::string& path); // Establir ruta del file de config - auto loadFromFile() -> bool; // Carregar config YAML - auto saveToFile() -> bool; // Guardar config YAML - -} // namespace Options diff --git a/source/main.cpp b/source/main.cpp index 68c7663..58a7458 100644 --- a/source/main.cpp +++ b/source/main.cpp @@ -1,33 +1,33 @@ // main.cpp - Punt d'entrada de l'aplicació // © 2026 JailDesigner // -// Aquí orquestrem la capa de persistència (YAML via game/Options::*) i +// Aquí orquestrem la capa de persistència (YAML via game/ConfigYaml::*) i // injectem el resultat al Director. El Director queda independent de -// game/options.hpp i pot operar només amb Config::EngineConfig. +// game/config_yaml.hpp i pot operar només amb Config::EngineConfig. #include #include #include "core/config/engine_config.hpp" #include "core/system/director.hpp" -#include "game/options.hpp" +#include "game/config_yaml.hpp" auto main(int argc, char* argv[]) -> int { // Convertir arguments a std::vector std::vector args(argv, argv + argc); // Capa de persistència delegada: lambdes prim que enllacen el contracte - // de Config::ConfigPersistence amb la implementació YAML de Options::*. + // de Config::ConfigPersistence amb la implementació YAML de ConfigYaml::*. const Config::ConfigPersistence PERSISTENCE{ - .init_defaults = [] { Options::init(); }, - .set_path = [](const std::string& path) { Options::setConfigFile(path); }, - .load = [] { return Options::loadFromFile(); }, - .save = [] { return Options::saveToFile(); }, + .init_defaults = [] { ConfigYaml::init(); }, + .set_path = [](const std::string& path) { ConfigYaml::setConfigFile(path); }, + .load = [] { return ConfigYaml::loadFromFile(); }, + .save = [] { return ConfigYaml::saveToFile(); }, }; // El Director rep la struct d'engine_config + la capa de persistència. - // No coneix Options::* directament. - Director director(args, Options::engine_config, PERSISTENCE); + // No coneix ConfigYaml:: directament. + Director director(args, ConfigYaml::engine_config, PERSISTENCE); return director.run(); }