mirror of
https://github.com/hedge-dev/UnleashedRecomp.git
synced 2025-10-30 07:11:05 +00:00
config_detail: move implementation to cpp, relocate sources
This commit is contained in:
parent
b354c6123d
commit
118c2f3ce2
15 changed files with 91 additions and 97 deletions
|
|
@ -28,6 +28,11 @@ set(SWA_PRECOMPILED_HEADERS
|
|||
"stdafx.h"
|
||||
)
|
||||
|
||||
set(SWA_CFG_CXX_SOURCES
|
||||
"cfg/config.cpp"
|
||||
"cfg/config_detail.cpp"
|
||||
)
|
||||
|
||||
set(SWA_KERNEL_CXX_SOURCES
|
||||
"kernel/imports.cpp"
|
||||
"kernel/xdm.cpp"
|
||||
|
|
@ -74,11 +79,11 @@ set(SWA_UI_CXX_SOURCES
|
|||
)
|
||||
|
||||
set(SWA_CXX_SOURCES
|
||||
"config.cpp"
|
||||
"main.cpp"
|
||||
"misc_impl.cpp"
|
||||
"stdafx.cpp"
|
||||
|
||||
${SWA_CFG_CXX_SOURCES}
|
||||
${SWA_KERNEL_CXX_SOURCES}
|
||||
${SWA_CPU_CXX_SOURCES}
|
||||
${SWA_GPU_CXX_SOURCES}
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ void Config::Load()
|
|||
{
|
||||
auto toml = toml::parse_file(configPath.string());
|
||||
|
||||
for (auto def : g_configDefs)
|
||||
for (auto def : Config::Definitions)
|
||||
{
|
||||
def->ReadValue(toml);
|
||||
#if _DEBUG
|
||||
|
|
@ -38,7 +38,7 @@ void Config::Save()
|
|||
std::string result;
|
||||
std::string section;
|
||||
|
||||
for (auto def : g_configDefs)
|
||||
for (auto def : Config::Definitions)
|
||||
{
|
||||
auto isFirstSection = section.empty();
|
||||
auto isDefWithSection = section != def->GetSection();
|
||||
|
|
@ -5,13 +5,15 @@
|
|||
class Config
|
||||
{
|
||||
public:
|
||||
inline static std::vector<IConfigDef*> Definitions{};
|
||||
|
||||
CONFIG_DEFINE_ENUM("System", ELanguage, Language, ELanguage::English);
|
||||
CONFIG_DEFINE("System", bool, Hints, true);
|
||||
CONFIG_DEFINE("System", bool, ControlTutorial, true);
|
||||
CONFIG_DEFINE_ENUM("System", EScoreBehaviour, ScoreBehaviour, EScoreBehaviour::CheckpointReset);
|
||||
CONFIG_DEFINE("System", bool, UnleashOutOfControlDrain, true);
|
||||
CONFIG_DEFINE("System", bool, WerehogHubTransformVideo, true);
|
||||
CONFIG_DEFINE_HIDE("System", bool, LogoSkip, false);
|
||||
CONFIG_DEFINE("System", bool, LogoSkip, false);
|
||||
|
||||
CONFIG_DEFINE("Controls", bool, CameraXInvert, false);
|
||||
CONFIG_DEFINE("Controls", bool, CameraYInvert, false);
|
||||
|
|
@ -25,11 +27,11 @@ public:
|
|||
CONFIG_DEFINE("Audio", bool, WerehogBattleMusic, true);
|
||||
|
||||
CONFIG_DEFINE_ENUM("Video", EGraphicsAPI, GraphicsAPI, EGraphicsAPI::D3D12);
|
||||
CONFIG_DEFINE_HIDE("Video", int32_t, WindowX, WINDOWPOS_CENTRED);
|
||||
CONFIG_DEFINE_HIDE("Video", int32_t, WindowY, WINDOWPOS_CENTRED);
|
||||
CONFIG_DEFINE("Video", int32_t, WindowX, WINDOWPOS_CENTRED);
|
||||
CONFIG_DEFINE("Video", int32_t, WindowY, WINDOWPOS_CENTRED);
|
||||
CONFIG_DEFINE("Video", int32_t, WindowWidth, 1280);
|
||||
CONFIG_DEFINE("Video", int32_t, WindowHeight, 720);
|
||||
CONFIG_DEFINE_ENUM_HIDE("Video", EWindowState, WindowState, EWindowState::Normal);
|
||||
CONFIG_DEFINE_ENUM("Video", EWindowState, WindowState, EWindowState::Normal);
|
||||
|
||||
CONFIG_DEFINE_CALLBACK("Video", float, ResolutionScale, 1.0f,
|
||||
{
|
||||
|
|
@ -42,7 +44,7 @@ public:
|
|||
CONFIG_DEFINE("Video", int32_t, FPS, 60);
|
||||
CONFIG_DEFINE("Video", float, Brightness, 0.5f);
|
||||
CONFIG_DEFINE("Video", size_t, MSAA, 4);
|
||||
CONFIG_DEFINE_HIDE("Video", size_t, AnisotropicFiltering, 16);
|
||||
CONFIG_DEFINE("Video", size_t, AnisotropicFiltering, 16);
|
||||
CONFIG_DEFINE_ENUM("Video", EShadowResolution, ShadowResolution, EShadowResolution::x4096);
|
||||
CONFIG_DEFINE_ENUM("Video", EGITextureFiltering, GITextureFiltering, EGITextureFiltering::Bicubic);
|
||||
CONFIG_DEFINE("Video", bool, AlphaToCoverage, true);
|
||||
28
UnleashedRecomp/cfg/config_detail.cpp
Normal file
28
UnleashedRecomp/cfg/config_detail.cpp
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
#include "config.h"
|
||||
#include "config_detail.h"
|
||||
|
||||
// CONFIG_DEFINE
|
||||
template<typename T>
|
||||
ConfigDef<T>::ConfigDef(std::string section, std::string name, T defaultValue) : Section(section), Name(name), DefaultValue(defaultValue)
|
||||
{
|
||||
Config::Definitions.emplace_back(this);
|
||||
}
|
||||
|
||||
// CONFIG_DEFINE_ENUM
|
||||
template<typename T>
|
||||
ConfigDef<T>::ConfigDef(std::string section, std::string name, T defaultValue, std::unordered_map<std::string, T> enumTemplate)
|
||||
: Section(section), Name(name), DefaultValue(defaultValue), EnumTemplate(enumTemplate)
|
||||
{
|
||||
for (const auto& pair : EnumTemplate)
|
||||
EnumTemplateReverse[pair.second] = pair.first;
|
||||
|
||||
Config::Definitions.emplace_back(this);
|
||||
}
|
||||
|
||||
// CONFIG_DEFINE_CALLBACK
|
||||
template<typename T>
|
||||
ConfigDef<T>::ConfigDef(std::string section, std::string name, T defaultValue, std::function<void(ConfigDef<T>*)> readCallback)
|
||||
: Section(section), Name(name), DefaultValue(defaultValue), ReadCallback(readCallback)
|
||||
{
|
||||
Config::Definitions.emplace_back(this);
|
||||
}
|
||||
|
|
@ -7,33 +7,24 @@
|
|||
#define CONFIG_DEFINE(section, type, name, defaultValue) \
|
||||
inline static ConfigDef<type> name{section, #name, defaultValue};
|
||||
|
||||
#define CONFIG_DEFINE_HIDE(section, type, name, defaultValue) \
|
||||
inline static ConfigDef<type, false> name{section, #name, defaultValue};
|
||||
|
||||
#define CONFIG_DEFINE_ENUM_TEMPLATE(type) \
|
||||
inline static std::unordered_map<std::string, type> g_##type##_template =
|
||||
|
||||
#define CONFIG_DEFINE_ENUM(section, type, name, defaultValue) \
|
||||
inline static ConfigDef<type> name{section, #name, defaultValue, g_##type##_template};
|
||||
|
||||
#define CONFIG_DEFINE_ENUM_HIDE(section, type, name, defaultValue) \
|
||||
inline static ConfigDef<type, false> name{section, #name, defaultValue, g_##type##_template};
|
||||
|
||||
#define CONFIG_DEFINE_IMPL(section, type, name, defaultValue, readImpl) \
|
||||
inline static ConfigDef<type> name{section, #name, defaultValue, [](ConfigDef<type, true>* def, const toml::v3::table& table) readImpl};
|
||||
|
||||
#define CONFIG_DEFINE_CALLBACK(section, type, name, defaultValue, readCallback) \
|
||||
inline static ConfigDef<type> name{section, #name, defaultValue, [](ConfigDef<type, true>* def) readCallback};
|
||||
inline static ConfigDef<type> name{section, #name, defaultValue, [](ConfigDef<type>* def) readCallback};
|
||||
|
||||
#define CONFIG_GET_DEFAULT(name) Config::name.DefaultValue
|
||||
#define CONFIG_SET_DEFAULT(name) Config::name.MakeDefault();
|
||||
|
||||
#define WINDOWPOS_CENTRED 0x2FFF0000
|
||||
|
||||
class ConfigDefBase
|
||||
class IConfigDef
|
||||
{
|
||||
public:
|
||||
virtual ~ConfigDefBase() = default;
|
||||
virtual ~IConfigDef() = default;
|
||||
virtual void ReadValue(toml::v3::ex::parse_result& toml) = 0;
|
||||
virtual void MakeDefault() = 0;
|
||||
virtual std::string GetSection() const = 0;
|
||||
|
|
@ -42,14 +33,9 @@ public:
|
|||
virtual std::string ToString() const = 0;
|
||||
};
|
||||
|
||||
inline static std::vector<ConfigDefBase*> g_configDefs{};
|
||||
|
||||
template<typename T, bool isMenuOption = true>
|
||||
class ConfigDef : public ConfigDefBase
|
||||
template<typename T>
|
||||
class ConfigDef : public IConfigDef
|
||||
{
|
||||
protected:
|
||||
bool m_isMenuOption{ isMenuOption };
|
||||
|
||||
public:
|
||||
std::string Section{};
|
||||
std::string Name{};
|
||||
|
|
@ -57,35 +43,16 @@ public:
|
|||
T Value{ DefaultValue };
|
||||
std::unordered_map<std::string, T> EnumTemplate{};
|
||||
std::unordered_map<T, std::string> EnumTemplateReverse{};
|
||||
std::function<void(ConfigDef<T, isMenuOption>*, const toml::v3::table&)> ReadImpl;
|
||||
std::function<void(ConfigDef<T, isMenuOption>*)> ReadCallback;
|
||||
std::function<void(ConfigDef<T>*)> ReadCallback;
|
||||
|
||||
ConfigDef(std::string section, std::string name, T defaultValue)
|
||||
: Section(section), Name(name), DefaultValue(defaultValue)
|
||||
{
|
||||
g_configDefs.emplace_back(this);
|
||||
}
|
||||
// CONFIG_DEFINE
|
||||
ConfigDef(std::string section, std::string name, T defaultValue);
|
||||
|
||||
ConfigDef(std::string section, std::string name, T defaultValue, std::unordered_map<std::string, T> enumTemplate)
|
||||
: Section(section), Name(name), DefaultValue(defaultValue), EnumTemplate(enumTemplate)
|
||||
{
|
||||
for (const auto& pair : EnumTemplate)
|
||||
EnumTemplateReverse[pair.second] = pair.first;
|
||||
// CONFIG_DEFINE_ENUM
|
||||
ConfigDef(std::string section, std::string name, T defaultValue, std::unordered_map<std::string, T> enumTemplate);
|
||||
|
||||
g_configDefs.emplace_back(this);
|
||||
}
|
||||
|
||||
ConfigDef(std::string section, std::string name, T defaultValue, std::function<void(ConfigDef<T, isMenuOption>*)> readCallback)
|
||||
: Section(section), Name(name), DefaultValue(defaultValue), ReadCallback(readCallback)
|
||||
{
|
||||
g_configDefs.emplace_back(this);
|
||||
}
|
||||
|
||||
ConfigDef(std::string section, std::string name, T defaultValue, std::function<void(ConfigDef<T, isMenuOption>*, const toml::v3::table&)> readImpl)
|
||||
: Section(section), Name(name), DefaultValue(defaultValue), ReadImpl(readImpl)
|
||||
{
|
||||
g_configDefs.emplace_back(this);
|
||||
}
|
||||
// CONFIG_DEFINE_CALLBACK
|
||||
ConfigDef(std::string section, std::string name, T defaultValue, std::function<void(ConfigDef<T>*)> readCallback);
|
||||
|
||||
void ReadValue(toml::v3::ex::parse_result& toml) override
|
||||
{
|
||||
|
|
@ -93,30 +60,23 @@ public:
|
|||
{
|
||||
const auto& section = *pSection;
|
||||
|
||||
if (ReadImpl)
|
||||
if constexpr (std::is_same<T, std::string>::value)
|
||||
{
|
||||
ReadImpl(this, section);
|
||||
Value = section[Name].value_or<std::string>(DefaultValue);
|
||||
}
|
||||
else if constexpr (std::is_enum_v<T>)
|
||||
{
|
||||
auto it = EnumTemplate.begin();
|
||||
|
||||
Value = EnumTemplate[section[Name].value_or<std::string>(static_cast<std::string>(it->first))];
|
||||
}
|
||||
else
|
||||
{
|
||||
if constexpr (std::is_same<T, std::string>::value)
|
||||
{
|
||||
Value = section[Name].value_or<std::string>(DefaultValue);
|
||||
}
|
||||
else if constexpr (std::is_enum_v<T>)
|
||||
{
|
||||
auto it = EnumTemplate.begin();
|
||||
|
||||
Value = EnumTemplate[section[Name].value_or<std::string>(static_cast<std::string>(it->first))];
|
||||
}
|
||||
else
|
||||
{
|
||||
Value = section[Name].value_or(DefaultValue);
|
||||
}
|
||||
|
||||
if (ReadCallback)
|
||||
ReadCallback(this);
|
||||
Value = section[Name].value_or(DefaultValue);
|
||||
}
|
||||
|
||||
if (ReadCallback)
|
||||
ReadCallback(this);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -9,9 +9,9 @@
|
|||
#include <shader/shader_cache.h>
|
||||
|
||||
#include "imgui_snapshot.h"
|
||||
#include "gpu/video.h"
|
||||
#include "ui/window.h"
|
||||
#include "config.h"
|
||||
#include "video.h"
|
||||
#include <ui/window.h>
|
||||
#include <cfg/config.h>
|
||||
|
||||
#include "shader/copy_vs.hlsl.dxil.h"
|
||||
#include "shader/copy_vs.hlsl.spirv.h"
|
||||
|
|
|
|||
|
|
@ -2,7 +2,6 @@
|
|||
#include <cpu/ppc_context.h>
|
||||
#include <cpu/guest_thread.h>
|
||||
#include <apu/audio.h>
|
||||
#include <apu/audio.h>
|
||||
#include "function.h"
|
||||
#include "xex.h"
|
||||
#include "xbox.h"
|
||||
|
|
@ -12,7 +11,7 @@
|
|||
#include "xam.h"
|
||||
#include "xdm.h"
|
||||
#include <timeapi.h>
|
||||
#include "config.h"
|
||||
#include <cfg/config.h>
|
||||
|
||||
#include <ntstatus.h>
|
||||
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@
|
|||
#include <xex.h>
|
||||
#include <apu/audio.h>
|
||||
#include <hid/hid.h>
|
||||
#include "config.h"
|
||||
#include <cfg/config.h>
|
||||
|
||||
#define GAME_XEX_PATH "game:\\default.xex"
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
#include <cpu/guest_code.h>
|
||||
#include "api/SWA.h"
|
||||
#include "ui/window.h"
|
||||
#include "config.h"
|
||||
#include <api/SWA.h>
|
||||
#include <ui/window.h>
|
||||
#include <cfg/config.h>
|
||||
|
||||
float m_lastLoadingFrameDelta = 0.0f;
|
||||
std::chrono::steady_clock::time_point m_lastLoadingFrameTime;
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
#include <cpu/guest_code.h>
|
||||
#include "api/SWA.h"
|
||||
#include "ui/window.h"
|
||||
#include "config.h"
|
||||
#include <api/SWA.h>
|
||||
#include <ui/window.h>
|
||||
#include <cfg/config.h>
|
||||
|
||||
bool DisableHintsMidAsmHook()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
#include <cpu/guest_code.h>
|
||||
#include "api/SWA.h"
|
||||
#include "ui/window.h"
|
||||
#include "ui/window_events.h"
|
||||
#include "config.h"
|
||||
#include <api/SWA.h>
|
||||
#include <ui/window.h>
|
||||
#include <ui/window_events.h>
|
||||
#include <cfg/config.h>
|
||||
|
||||
uint32_t m_lastCheckpointScore = 0;
|
||||
float m_lastDarkGaiaEnergy = 0.0f;
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
#include <cpu/guest_code.h>
|
||||
#include "config.h"
|
||||
#include <cfg/config.h>
|
||||
|
||||
const char* m_pStageID;
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
#include <cpu/guest_code.h>
|
||||
#include "api/SWA.h"
|
||||
#include "ui/window.h"
|
||||
#include "config.h"
|
||||
#include <api/SWA.h>
|
||||
#include <ui/window.h>
|
||||
#include <cfg/config.h>
|
||||
|
||||
constexpr float m_baseAspectRatio = 16.0f / 9.0f;
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
#include "window.h"
|
||||
#include "sdl_listener.h"
|
||||
#include <config.h>
|
||||
#include <cfg/config.h>
|
||||
#include <kernel/function.h>
|
||||
#include <SDL_syswm.h>
|
||||
|
||||
|
|
|
|||
|
|
@ -1,9 +1,9 @@
|
|||
#pragma once
|
||||
|
||||
#include "res/icon.h"
|
||||
#include "res/icon_night.h"
|
||||
#include "ui/window_events.h"
|
||||
#include "config.h"
|
||||
#include <res/icon.h>
|
||||
#include <res/icon_night.h>
|
||||
#include <ui/window_events.h>
|
||||
#include <cfg/config.h>
|
||||
|
||||
#define DEFAULT_WIDTH 1280
|
||||
#define DEFAULT_HEIGHT 720
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue