6b8f6a267d
main.cpp queda només amb 'Director director(argc, argv); return director.run()'. El Director crida ConfigYaml::* directament; l'struct ConfigPersistence desapareix de engine_config.hpp. La separació core/game es relaxa al Director, que és EL programa, no part del motor.
44 lines
1.6 KiB
C++
44 lines
1.6 KiB
C++
// 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. El Director crida ConfigYaml::* directament
|
|
// (init / setConfigFile / loadFromFile / saveToFile): la separació
|
|
// core/game queda relaxada al Director, que és EL programa, no part del motor.
|
|
|
|
#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
|