Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions MakeCommitHash.bat
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,10 @@ exit /b 0

FOR /F "tokens=*" %%g IN ('git rev-parse HEAD') DO (SET UEVR_COMMIT_HASH=%%g)

FOR /F "tokens=*" %%t IN ('git describe --tags --abbrev^=0') DO (SET UEVR_TAG=%%t)
FOR /F "tokens=*" %%t IN ('git describe --tags --always --abbrev^=0') DO (SET UEVR_TAG=%%t)
IF "%UEVR_TAG%"=="" (SET UEVR_TAG=no_tag)

FOR /F "tokens=*" %%c IN ('git describe --tags --long') DO (
FOR /F "tokens=*" %%c IN ('git describe --tags --always --long') DO (
FOR /F "tokens=1,2 delims=-" %%a IN ("%%c") DO (
SET UEVR_TAG_LONG=%%a
SET UEVR_COMMITS_PAST_TAG=%%b
Expand All @@ -24,7 +24,7 @@ FOR /F "tokens=*" %%b IN ('git rev-parse --abbrev-ref HEAD') DO (SET UEVR_BRANCH
FOR /F "tokens=*" %%n IN ('git rev-list --count HEAD') DO (SET UEVR_TOTAL_COMMITS=%%n)
IF "%UEVR_TOTAL_COMMITS%"=="" (SET UEVR_TOTAL_COMMITS=0)

FOR /F "tokens=2 delims==" %%a IN ('wmic OS get localdatetime /value') DO (
FOR /F "tokens=*" %%a IN ('powershell -NoProfile -Command "Get-Date -Format yyyyMMddHHmmss"') DO (
SET datetime=%%a
)

Expand All @@ -42,4 +42,4 @@ echo #define UEVR_COMMITS_PAST_TAG %UEVR_COMMITS_PAST_TAG% >> src/CommitHash.aut
echo #define UEVR_BRANCH "%UEVR_BRANCH%" >> src/CommitHash.autogenerated
echo #define UEVR_TOTAL_COMMITS %UEVR_TOTAL_COMMITS% >> src/CommitHash.autogenerated
echo #define UEVR_BUILD_DATE "%day%.%month%.%year%" >> src/CommitHash.autogenerated
echo #define UEVR_BUILD_TIME "%hour%:%minute%" >> src/CommitHash.autogenerated
echo #define UEVR_BUILD_TIME "%hour%:%minute%" >> src/CommitHash.autogenerated
2 changes: 1 addition & 1 deletion src/Mod.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ class ModValue : public IModValue {
return m_value;
}

T& default_value() {
const T& default_value() const {
return m_default_value;
}

Expand Down
142 changes: 141 additions & 1 deletion src/Mods.cpp
Original file line number Diff line number Diff line change
@@ -1,3 +1,10 @@
#include <algorithm>
#include <cctype>
#include <cstdlib>
#include <optional>
#include <string>
#include <string_view>

#include <spdlog/spdlog.h>

#include "Framework.hpp"
Expand All @@ -9,6 +16,128 @@
#include "mods/UObjectHook.hpp"
#include "Mods.hpp"

namespace {

constexpr const char* UI_INVERT_ALPHA_KEY = "UI_InvertAlpha";
const std::string UI_INVERT_ALPHA_KEY_STRING{UI_INVERT_ALPHA_KEY};
constexpr float UI_INVERT_ALPHA_SLIDER_MIN = 0.01f;
constexpr float UI_INVERT_ALPHA_SLIDER_MAX = 0.99f;

std::string_view trim(std::string_view value) {
while (!value.empty() && std::isspace(static_cast<unsigned char>(value.front()))) {
value.remove_prefix(1);
}

while (!value.empty() && std::isspace(static_cast<unsigned char>(value.back()))) {
value.remove_suffix(1);
}

return value;
}

std::optional<float> parse_float(std::string_view value) {
const auto trimmed = trim(value);

if (trimmed.empty()) {
return std::nullopt;
}

std::string buffer{trimmed};
char* end_ptr{};
const auto parsed_value = std::strtof(buffer.c_str(), &end_ptr);

if (end_ptr == buffer.c_str()) {
return std::nullopt;
}

while (*end_ptr != '\0') {
if (!std::isspace(static_cast<unsigned char>(*end_ptr))) {
return std::nullopt;
}

++end_ptr;
}

return parsed_value;
}

bool migrate_ui_invert_alpha(utility::Config& cfg) {
auto apply_value = [&](float new_value) {
const auto clamped = std::clamp(new_value, UI_INVERT_ALPHA_SLIDER_MIN, UI_INVERT_ALPHA_SLIDER_MAX);
cfg.set<float>(UI_INVERT_ALPHA_KEY_STRING, clamped);
return true;
};

auto safe_get_bool = [&]() -> std::optional<bool> {
try {
if (auto value = cfg.get<bool>(UI_INVERT_ALPHA_KEY_STRING)) {
return *value;
}
} catch (...) {
}

return std::nullopt;
};

if (auto legacy_bool = safe_get_bool()) {
return apply_value(*legacy_bool ? UI_INVERT_ALPHA_SLIDER_MAX : UI_INVERT_ALPHA_SLIDER_MIN);
}

auto safe_get_float = [&]() -> std::optional<float> {
try {
if (auto value = cfg.get<float>(UI_INVERT_ALPHA_KEY_STRING)) {
return *value;
}
} catch (...) {
}

return std::nullopt;
};

if (auto legacy_float = safe_get_float()) {
if (*legacy_float < UI_INVERT_ALPHA_SLIDER_MIN || *legacy_float > UI_INVERT_ALPHA_SLIDER_MAX) {
return apply_value(*legacy_float);
}

return false;
}

auto safe_get_string = [&]() -> std::optional<std::string> {
try {
return cfg.get<std::string>(UI_INVERT_ALPHA_KEY_STRING);
} catch (...) {
return std::nullopt;
}
};

if (auto legacy_string = safe_get_string()) {
const auto trimmed = trim(*legacy_string);

if (!trimmed.empty()) {
std::string lowered{trimmed};
std::transform(lowered.begin(), lowered.end(), lowered.begin(), [](unsigned char c) {
return static_cast<char>(std::tolower(c));
});

if (lowered == "true" || lowered == "false") {
return apply_value(lowered == "true" ? UI_INVERT_ALPHA_SLIDER_MAX : UI_INVERT_ALPHA_SLIDER_MIN);
}

if (lowered == "1" || lowered == "0") {
return apply_value(lowered == "1" ? UI_INVERT_ALPHA_SLIDER_MAX : UI_INVERT_ALPHA_SLIDER_MIN);
}

if (auto parsed = parse_float(trimmed)) {
return apply_value(*parsed);
}
}
}

return false;
}

} // namespace

Mods::Mods() {
m_mods.emplace_back(FrameworkConfig::get());
m_mods.emplace_back(VR::get());
Expand Down Expand Up @@ -54,12 +183,23 @@ std::optional<std::string> Mods::on_initialize_d3d_thread() const {
}

void Mods::reload_config(bool set_defaults) const {
utility::Config cfg{ Framework::get_persistent_dir("config.txt").string() };
const auto config_path = Framework::get_persistent_dir("config.txt");
utility::Config cfg{ config_path.string() };

const auto migrated_invert_alpha = !set_defaults && migrate_ui_invert_alpha(cfg);

for (auto& mod : m_mods) {
spdlog::info("{:s}::on_config_load()", mod->get_name().data());
mod->on_config_load(cfg, set_defaults);
}

if (migrated_invert_alpha) {
if (!cfg.save(config_path.string())) {
spdlog::warn("Failed to persist migrated UI_InvertAlpha value");
} else {
spdlog::info("Persisted migrated UI_InvertAlpha value");
}
}
}

void Mods::on_pre_imgui_frame() const {
Expand Down
Loading