From 8a00a7aa025073b32ae2112d20bc233316af06bc Mon Sep 17 00:00:00 2001 From: Thomas Wessel Date: Tue, 4 Mar 2025 18:34:12 -0800 Subject: [PATCH] Add contrast filter --- .../ContrastFilter/ContrastFilter.gdshader | 10 ++++++++++ Globals/ContrastFilter/ContrastFilter.tscn | 19 +++++++++++++++++++ Globals/StageProducer.cs | 11 +++++++++++ scenes/Options/OptionsMenu.cs | 1 + 4 files changed, 41 insertions(+) create mode 100644 Globals/ContrastFilter/ContrastFilter.gdshader create mode 100644 Globals/ContrastFilter/ContrastFilter.tscn diff --git a/Globals/ContrastFilter/ContrastFilter.gdshader b/Globals/ContrastFilter/ContrastFilter.gdshader new file mode 100644 index 00000000..b6f2754d --- /dev/null +++ b/Globals/ContrastFilter/ContrastFilter.gdshader @@ -0,0 +1,10 @@ +shader_type canvas_item; + +uniform sampler2D SCREEN_TEXTURE : hint_screen_texture, filter_linear_mipmap; + +void fragment() { + vec4 screen = texture(SCREEN_TEXTURE, SCREEN_UV); + + COLOR.rgb =vec3(0.6 * screen.r + 0.6 * screen.g + 0.2 * screen.b); +} + diff --git a/Globals/ContrastFilter/ContrastFilter.tscn b/Globals/ContrastFilter/ContrastFilter.tscn new file mode 100644 index 00000000..5529050f --- /dev/null +++ b/Globals/ContrastFilter/ContrastFilter.tscn @@ -0,0 +1,19 @@ +[gd_scene load_steps=3 format=3 uid="uid://b6bblgxtfs020"] + +[ext_resource type="Shader" path="res://Globals/ContrastFilter/ContrastFilter.gdshader" id="1_4bhca"] + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_i6hl4"] +shader = ExtResource("1_4bhca") + +[node name="CanvasLayer" type="CanvasLayer"] +layer = 128 + +[node name="Filter" type="ColorRect" parent="."] +z_index = 4096 +material = SubResource("ShaderMaterial_i6hl4") +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 2 diff --git a/Globals/StageProducer.cs b/Globals/StageProducer.cs index d9f64292..2ce7a7de 100644 --- a/Globals/StageProducer.cs +++ b/Globals/StageProducer.cs @@ -23,6 +23,8 @@ public partial class StageProducer : Node //TODO: Allow for permanent changes and battle temporary stat changes. public static PlayerStats PlayerStats; + public static CanvasLayer ContrastFilter; + public override void _EnterTree() { InitFromCfg(); @@ -36,6 +38,12 @@ private void InitFromCfg() TranslationServer.SetLocale( SaveSystem.GetConfigValue(SaveSystem.ConfigSettings.LanguageKey).As() ); + ContrastFilter = GD.Load("res://Globals/ContrastFilter/ContrastFilter.tscn") + .Instantiate(); + ContrastFilter.Visible = SaveSystem + .GetConfigValue(SaveSystem.ConfigSettings.HighContrast) + .AsBool(); + GetTree().Root.CallDeferred("add_child", ContrastFilter); } public void StartGame() @@ -101,6 +109,7 @@ public void TransitionFromRoom(int nextRoomIdx) public void TransitionStage(Stages nextStage, int nextRoomIdx = -1) { + GetTree().Root.RemoveChild(ContrastFilter); switch (nextStage) { case Stages.Title: @@ -139,6 +148,8 @@ public void TransitionStage(Stages nextStage, int nextRoomIdx = -1) break; } + //Apply grayscale shader to all scenes + GetTree().Root.AddChild(ContrastFilter); _curStage = nextStage; } diff --git a/scenes/Options/OptionsMenu.cs b/scenes/Options/OptionsMenu.cs index 5396175c..587cb621 100644 --- a/scenes/Options/OptionsMenu.cs +++ b/scenes/Options/OptionsMenu.cs @@ -95,6 +95,7 @@ public static void ChangeVolume(double value) private void HighContrastChanged(bool toggled) { + StageProducer.ContrastFilter.Visible = toggled; SaveSystem.UpdateConfig(SaveSystem.ConfigSettings.HighContrast, toggled); } }