From 4cb22bfd5f7569f4d1545c3aa0fe867d463d663c Mon Sep 17 00:00:00 2001 From: Hyper <34012267+hyperbx@users.noreply.github.com> Date: Mon, 21 Oct 2024 17:28:33 +0100 Subject: [PATCH] config: load config dynamically --- UnleashedRecomp/config.cpp | 53 ++------------------------------- UnleashedRecomp/config_detail.h | 28 ++++++++++------- 2 files changed, 20 insertions(+), 61 deletions(-) diff --git a/UnleashedRecomp/config.cpp b/UnleashedRecomp/config.cpp index 67234fd..56b7878 100644 --- a/UnleashedRecomp/config.cpp +++ b/UnleashedRecomp/config.cpp @@ -4,57 +4,8 @@ void Config::Load() { auto toml = toml::parse_file(GetConfigPath().string()); - TOML_BEGIN_SECTION("System") - { - TOML_READ_ENUM(ELanguage, Language); - TOML_READ_BOOLEAN(Hints); - TOML_READ_ENUM(EScoreBehaviour, ScoreBehaviour); - TOML_READ_BOOLEAN(UnleashOutOfControlDrain); - TOML_READ_BOOLEAN(WerehogHubTransformVideo); - TOML_READ_BOOLEAN(LogoSkip); - } - TOML_END_SECTION(); - - TOML_BEGIN_SECTION("Controls") - { - TOML_READ_BOOLEAN(CameraXInvert); - TOML_READ_BOOLEAN(CameraYInvert); - TOML_READ_BOOLEAN(XButtonHoming); - TOML_READ_BOOLEAN(UnleashCancel); - } - TOML_END_SECTION(); - - TOML_BEGIN_SECTION("Audio") - { - TOML_READ_FLOAT(MusicVolume); - TOML_READ_FLOAT(SEVolume); - TOML_READ_ENUM(EVoiceLanguage, VoiceLanguage); - TOML_READ_FLOAT(Subtitles); - TOML_READ_BOOLEAN(WerehogBattleMusic); - } - TOML_END_SECTION(); - - TOML_BEGIN_SECTION("Video") - { - TOML_READ_ENUM(EGraphicsAPI, GraphicsAPI); - TOML_READ_INTEGER(WindowWidth); - TOML_READ_INTEGER(WindowHeight); - TOML_READ_FLOAT(ResolutionScale); - TOML_READ_BOOLEAN(Fullscreen); - TOML_READ_BOOLEAN(VSync); - TOML_READ_INTEGER(BufferCount); - TOML_READ_INTEGER(FPS); - TOML_READ_FLOAT(Brightness); - TOML_READ_INTEGER(MSAA); - TOML_READ_INTEGER(AnisotropicFiltering); - TOML_READ_INTEGER(ShadowResolution); - TOML_READ_ENUM(EGITextureFiltering, GITextureFiltering); - TOML_READ_BOOLEAN(AlphaToCoverage); - TOML_READ_BOOLEAN(Xbox360ColorCorrection); - TOML_READ_ENUM(EMovieScaleMode, MovieScaleMode); - TOML_READ_ENUM(EUIScaleMode, UIScaleMode); - } - TOML_END_SECTION(); + for (auto def : Definitions) + def->ReadValue(toml); } catch (toml::parse_error& err) { diff --git a/UnleashedRecomp/config_detail.h b/UnleashedRecomp/config_detail.h index ed70482..4702709 100644 --- a/UnleashedRecomp/config_detail.h +++ b/UnleashedRecomp/config_detail.h @@ -4,16 +4,6 @@ #define TOML_FILE "config.toml" -#define TOML_BEGIN_SECTION(name) if (auto pSection = toml[name].as_table()) { const auto& section = *pSection; -#define TOML_END_SECTION() } - -#define TOML_READ_STRING(var) var.Value = section[#var].value_or(var.DefaultValue); -#define TOML_READ_BOOLEAN(var) var.Value = section[#var].value_or(var.DefaultValue); -#define TOML_READ_FLOAT(var) var.Value = section[#var].value_or(var.DefaultValue); -#define TOML_READ_INTEGER(var) var.Value = section[#var].value_or(var.DefaultValue); -#define TOML_READ_DOUBLE(var) var.Value = section[#var].value_or(var.DefaultValue); -#define TOML_READ_ENUM(type, var) var.Value = (type)section[#var].value_or(var.DefaultValue); - #define CONFIG_DEFINE(section, type, name, defaultValue) inline static ConfigDef name{section, #name, defaultValue}; #define CONFIG_VALUE(name) Config::name.Value @@ -24,6 +14,7 @@ class ConfigDefBase { public: virtual ~ConfigDefBase() = default; + virtual void ReadValue(toml::v3::ex::parse_result toml) = 0; virtual void MakeDefault() = 0; virtual std::string GetSection() const = 0; virtual std::string GetName() const = 0; @@ -45,6 +36,23 @@ public: Config::Definitions.emplace_back(this); } + void ReadValue(toml::v3::ex::parse_result toml) override + { + if (auto pSection = toml[Section].as_table()) + { + const auto& section = *pSection; + + if constexpr (std::is_same::value) + { + Value = section[Name].value_or(DefaultValue); + } + else + { + Value = section[Name].value_or(DefaultValue); + } + } + } + void MakeDefault() override { Value = DefaultValue;