diff --git a/src/Features/WetnessEffects.cpp b/src/Features/WetnessEffects.cpp index daa012b714..69722bbeec 100644 --- a/src/Features/WetnessEffects.cpp +++ b/src/Features/WetnessEffects.cpp @@ -32,6 +32,16 @@ NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT( RippleBreadth, RippleLifetime) +NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT( + WetnessEffects::DebugSettings, + EnableWetnessOverride, + EnablePuddleOverride, + EnableRainOverride, + EnableIntExOverride, + WetnessOverride, + PuddleWetnessOverride, + RainOverride) + // Climate preset data - defines regional weather characteristics // Precipitation rates calculated from actual shader mechanics: grid size, interval, and raindrop chance @@ -477,6 +487,30 @@ void WetnessEffects::DrawSettings() ImGui::Text("Open the installed %s feature", weatherPicker.GetShortName().c_str()); } } + + if (ImGui::TreeNodeEx("Debug", ImGuiTreeNodeFlags_DefaultOpen)) { + ImGui::Checkbox("Enable Wetness Override", &debugSettings.EnableWetnessOverride); + ImGui::Checkbox("Enable Puddle Override", &debugSettings.EnablePuddleOverride); + ImGui::Checkbox("Enable Rain Override", &debugSettings.EnableRainOverride); + ImGui::Checkbox("Enable Interior/Exterior Override", &debugSettings.EnableIntExOverride); + if (auto _tt = Util::HoverTooltipWrapper()) { + ImGui::Text( + "If disabled, will only use the exterior value. "); + } + + if (debugSettings.EnableWetnessOverride) { + ImGui::SliderFloat2("Wetness In/Exterior", &debugSettings.WetnessOverride.x, 0.0f, 2.0f); + } + + if (debugSettings.EnablePuddleOverride) { + ImGui::SliderFloat2("Puddle Wetness In/Exterior", &debugSettings.PuddleWetnessOverride.x, 0.0f, 2.0f); + } + + if (debugSettings.EnableRainOverride) { + ImGui::SliderFloat2("Rain In/Exterior", &debugSettings.RainOverride.x, 0.0f, 1.0f); + } + ImGui::TreePop(); + } } // ===================== @@ -712,6 +746,25 @@ WetnessEffects::PerFrame WetnessEffects::GetCommonBufferData() const float combinedPuddleWetness = std::min(1.0f, currentWeatherResult.puddleWetness + lastWeatherResult.puddleWetness); data.Wetness = combinedWetness; data.PuddleWetness = combinedPuddleWetness; + if (debugSettings.EnableWetnessOverride) { + data.Wetness = debugSettings.WetnessOverride.y; + } + if (debugSettings.EnablePuddleOverride) { + data.PuddleWetness = debugSettings.PuddleWetnessOverride.y; + } + if (debugSettings.EnableRainOverride) { + data.Raining = debugSettings.RainOverride.y; + } + } else { + if (debugSettings.EnableWetnessOverride) { + data.Wetness = debugSettings.EnableIntExOverride ? debugSettings.WetnessOverride.x : debugSettings.WetnessOverride.y; + } + if (debugSettings.EnablePuddleOverride) { + data.PuddleWetness = debugSettings.EnableIntExOverride ? debugSettings.PuddleWetnessOverride.x : debugSettings.PuddleWetnessOverride.y; + } + if (debugSettings.EnableRainOverride) { + data.Raining = debugSettings.EnableIntExOverride ? debugSettings.RainOverride.x : debugSettings.RainOverride.y; + } } } } @@ -749,11 +802,17 @@ void WetnessEffects::LoadSettings(json& o_json) DetectCurrentPreset(); Ripples::UpdateSettings(); // Sync cached values after loading + + if (o_json.contains("DebugSettings")) { + debugSettings = o_json["DebugSettings"].get(); + } } void WetnessEffects::SaveSettings(json& o_json) { o_json = settings; + + o_json["DebugSettings"] = debugSettings; } void WetnessEffects::RestoreDefaultSettings() diff --git a/src/Features/WetnessEffects.h b/src/Features/WetnessEffects.h index 7be4da6929..a69ee3ccb1 100644 --- a/src/Features/WetnessEffects.h +++ b/src/Features/WetnessEffects.h @@ -70,6 +70,17 @@ struct WetnessEffects : Feature uint pad0; }; + struct DebugSettings + { + bool EnableWetnessOverride = false; + bool EnablePuddleOverride = false; + bool EnableRainOverride = false; + bool EnableIntExOverride = false; + float2 WetnessOverride = float2(0.0f, 0.0f); + float2 PuddleWetnessOverride = float2(0.0f, 0.0f); + float2 RainOverride = float2(0.0f, 0.0f); + } debugSettings; + Settings settings; // Climate preset system enum class ClimatePreset : uint32_t