refactor(#28): Director rep EngineConfig + ConfigPersistence, main orquestra
Pas 5/N del hallazgo #28. Director deixa d'incloure game/options.hpp i les seves crides a Options::*. El seu ctor accepta ara: - Config::EngineConfig& cfg → la struct runtime (window, console, ...). - Config::ConfigPersistence → 4 lambdes (init/set_path/load/save) que delegen la persistència a la capa concreta (game/Options::*). Cap més referència a Options:: ni a "game/..." dins del Director: - cfg_->* substitueix tot Options::* (window, console, player1/2, rendering, engine_config). - persistence_.{init,save,load,set_path} substitueix les funcions d'I/O de YAML. run() i checkProgramArguments deixen de ser estàtics (necessiten accés a cfg_ i persistence_). Això també desfà el smell del hallazgo #37 (Director::run estàtic que llegia estat d'instància). main.cpp queda com a orquestrador: construeix la struct ConfigPersistence amb lambdes que enllacen amb Options::* i la injecta al Director. Afegit: Config::ConfigPersistence a engine_config.hpp. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
+20
-5
@@ -1,18 +1,33 @@
|
||||
// main.cpp - Vec2 de entrada del juego Asteroides
|
||||
// main.cpp - Punt d'entrada de l'aplicació
|
||||
// © 2026 JailDesigner
|
||||
//
|
||||
// Aquí orquestrem la capa de persistència (YAML via game/Options::*) i
|
||||
// injectem el resultat al Director. El Director queda independent de
|
||||
// game/options.hpp i pot operar només amb Config::EngineConfig.
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#include "core/config/engine_config.hpp"
|
||||
#include "core/system/director.hpp"
|
||||
#include "game/options.hpp"
|
||||
|
||||
auto main(int argc, char* argv[]) -> int {
|
||||
// Convertir arguments a std::vector<std::string>
|
||||
std::vector<std::string> args(argv, argv + argc);
|
||||
|
||||
// Crear director (inicialitza sistema, opciones, configuración)
|
||||
Director director(args);
|
||||
// Capa de persistència delegada: lambdes prim que enllacen el contracte
|
||||
// de Config::ConfigPersistence amb la implementació YAML de Options::*.
|
||||
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(); },
|
||||
};
|
||||
|
||||
// Executar bucle principal del juego
|
||||
return Director::run();
|
||||
// El Director rep la struct d'engine_config + la capa de persistència.
|
||||
// No coneix Options::* directament.
|
||||
Director director(args, Options::engine_config, PERSISTENCE);
|
||||
|
||||
return director.run();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user