Files
aee-arcade/source/game/options.hpp
T

93 lines
2.8 KiB
C++

#pragma once
#include <string>
#include <vector>
#include "core/rendering/screen.hpp"
#include "core/rendering/shader_backend.hpp"
#include "utils/defaults.hpp"
// Gestor de configuració del joc. És l'ÚNIC lloc que coneix YAML i la ruta
// del config.yaml. Els subsistemes (Screen, Audio, ...) reben structs tipats
// a través dels build*Config(), de manera que no queden acoblats a aquest
// namespace ni al format concret del fitxer.
namespace Options {
struct Window {
int zoom{Defaults::Window::ZOOM};
bool fullscreen{Defaults::Window::FULLSCREEN};
};
struct Gpu {
bool acceleration{Defaults::Video::GPU_ACCELERATION};
std::string preferred_driver{Defaults::Video::GPU_PREFERRED_DRIVER};
};
struct Shader {
bool enabled{Defaults::Video::SHADER_ENABLED};
std::string current_postfx_preset{Defaults::Video::POSTFX_DEFAULT_PRESET};
};
struct Video {
bool vsync{Defaults::Video::VSYNC};
Defaults::ScalingMode scaling_mode{Defaults::Video::SCALING_MODE};
Defaults::TextureFilter texture_filter{Defaults::Video::TEXTURE_FILTER};
Gpu gpu{};
Shader shader{};
};
// Preset d'efectes PostFX (un per entrada a postfx.yaml).
struct PostFXPreset {
std::string name;
float vignette{0.0F};
float scanlines{0.0F};
float chroma{0.0F};
float mask{0.0F};
float gamma{0.0F};
float curvature{0.0F};
float bleeding{0.0F};
float flicker{0.0F};
};
struct Music {
bool enabled{Defaults::Audio::MUSIC_ENABLED};
float volume{Defaults::Audio::MUSIC_VOLUME};
};
struct Sound {
bool enabled{Defaults::Audio::SOUND_ENABLED};
float volume{Defaults::Audio::SOUND_VOLUME};
};
struct Audio {
bool enabled{Defaults::Audio::ENABLED};
float volume{Defaults::Audio::VOLUME};
Music music{};
Sound sound{};
};
// --- Estat global (inline vars per a que una sola definició viva a tot
// el programa sense necessitar un .cpp extra per a cada una) ---
inline std::string config_version{};
inline std::string config_file_path{};
inline std::string postfx_file_path{};
inline Window window{};
inline Video video{};
inline Audio audio{};
inline std::vector<PostFXPreset> postfx_presets{};
// --- API pública ---
void setConfigFile(const std::string& path);
auto loadFromFile() -> bool;
auto saveToFile() -> bool;
void setPostFXFile(const std::string& path);
auto loadPostFXFromFile() -> bool;
auto savePostFXToFile() -> bool;
// --- Builders per als subsistemes ---
[[nodiscard]] auto buildScreenConfig() -> Screen::Config;
[[nodiscard]] auto buildPostFXParams() -> Rendering::PostFXParams;
} // namespace Options