refactor(#28): renombrar Options → ConfigYaml + netejar aliases
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) <noreply@anthropic.com>
This commit is contained in:
@@ -20,7 +20,7 @@ namespace Ja {
|
|||||||
// --- Clase Audio: gestor d'àudio (singleton) ---
|
// --- Clase Audio: gestor d'àudio (singleton) ---
|
||||||
// Port del subsistema d'àudio del projecte ../aee, desacoblat d'Options:
|
// Port del subsistema d'àudio del projecte ../aee, desacoblat d'Options:
|
||||||
// la configuración entra per la struct Audio::Config a init()/applySettings(),
|
// 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.
|
// 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
|
// Els volums es manegen internament como a float 0.0–1.0; la capa de
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
// © 2026 JailDesigner
|
// © 2026 JailDesigner
|
||||||
//
|
//
|
||||||
// Struct POD que conté la configuració runtime que els sistemes de `core/`
|
// 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().
|
// que omple aquesta struct a init() i loadFromFile().
|
||||||
//
|
//
|
||||||
// Es passa per referència (mutable quan cal) al constructor dels sistemes
|
// 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
|
// Capa de persistència delegada cap a l'EngineConfig. Permet al Director
|
||||||
// orquestrar init/load/save sense conèixer cap esquema concret (YAML,
|
// 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 {
|
struct ConfigPersistence {
|
||||||
std::function<void()> init_defaults; // Restaura valors per defecte
|
std::function<void()> init_defaults; // Restaura valors per defecte
|
||||||
std::function<void(const std::string& path)> set_path; // Indica on guardar
|
std::function<void(const std::string& path)> set_path; // Indica on guardar
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ class SDLManager {
|
|||||||
// `cfg` ha de viure tant com el manager (el posseeix el Director).
|
// `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
|
// `on_persist` es crida després de mutar la config (per exemple a
|
||||||
// toggleVSync) per delegar la persistència en una capa externa
|
// 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<void()> on_persist = {});
|
SDLManager(int width, int height, bool fullscreen, Config::EngineConfig& cfg, std::function<void()> on_persist = {});
|
||||||
~SDLManager();
|
~SDLManager();
|
||||||
|
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ class Director {
|
|||||||
public:
|
public:
|
||||||
// `cfg` ha de viure tant com el Director (típicament owned per main).
|
// `cfg` ha de viure tant com el Director (típicament owned per main).
|
||||||
// `persistence` encapsula init/load/save delegats a la capa concreta
|
// `persistence` encapsula init/load/save delegats a la capa concreta
|
||||||
// (game/Options::*).
|
// (game/ConfigYaml::*).
|
||||||
Director(std::vector<std::string> const& args,
|
Director(std::vector<std::string> const& args,
|
||||||
Config::EngineConfig& cfg,
|
Config::EngineConfig& cfg,
|
||||||
Config::ConfigPersistence persistence);
|
Config::ConfigPersistence persistence);
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#include "options.hpp"
|
#include "config_yaml.hpp"
|
||||||
|
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
@@ -9,7 +9,17 @@
|
|||||||
#include "external/fkyaml_node.hpp"
|
#include "external/fkyaml_node.hpp"
|
||||||
#include "project.h"
|
#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 ==========
|
// ========== FUNCIONS AUXILIARS PER CONVERSIÓ DE CONTROLES ==========
|
||||||
|
|
||||||
@@ -506,4 +516,4 @@ namespace Options {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace Options
|
} // namespace ConfigYaml
|
||||||
@@ -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 <string>
|
||||||
|
|
||||||
|
#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
|
||||||
@@ -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 <string>
|
|
||||||
|
|
||||||
#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
|
|
||||||
+10
-10
@@ -1,33 +1,33 @@
|
|||||||
// main.cpp - Punt d'entrada de l'aplicació
|
// main.cpp - Punt d'entrada de l'aplicació
|
||||||
// © 2026 JailDesigner
|
// © 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
|
// 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 <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#include "core/config/engine_config.hpp"
|
#include "core/config/engine_config.hpp"
|
||||||
#include "core/system/director.hpp"
|
#include "core/system/director.hpp"
|
||||||
#include "game/options.hpp"
|
#include "game/config_yaml.hpp"
|
||||||
|
|
||||||
auto main(int argc, char* argv[]) -> int {
|
auto main(int argc, char* argv[]) -> int {
|
||||||
// Convertir arguments a std::vector<std::string>
|
// Convertir arguments a std::vector<std::string>
|
||||||
std::vector<std::string> args(argv, argv + argc);
|
std::vector<std::string> args(argv, argv + argc);
|
||||||
|
|
||||||
// Capa de persistència delegada: lambdes prim que enllacen el contracte
|
// 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{
|
const Config::ConfigPersistence PERSISTENCE{
|
||||||
.init_defaults = [] { Options::init(); },
|
.init_defaults = [] { ConfigYaml::init(); },
|
||||||
.set_path = [](const std::string& path) { Options::setConfigFile(path); },
|
.set_path = [](const std::string& path) { ConfigYaml::setConfigFile(path); },
|
||||||
.load = [] { return Options::loadFromFile(); },
|
.load = [] { return ConfigYaml::loadFromFile(); },
|
||||||
.save = [] { return Options::saveToFile(); },
|
.save = [] { return ConfigYaml::saveToFile(); },
|
||||||
};
|
};
|
||||||
|
|
||||||
// El Director rep la struct d'engine_config + la capa de persistència.
|
// El Director rep la struct d'engine_config + la capa de persistència.
|
||||||
// No coneix Options::* directament.
|
// No coneix ConfigYaml:: directament.
|
||||||
Director director(args, Options::engine_config, PERSISTENCE);
|
Director director(args, ConfigYaml::engine_config, PERSISTENCE);
|
||||||
|
|
||||||
return director.run();
|
return director.run();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user