Skip to content

Commit

Permalink
Merge pull request #130 from NancokPS2/expanded-options
Browse files Browse the repository at this point in the history
Options menu upgrade
  • Loading branch information
jonathaneeckhout authored Nov 3, 2023
2 parents e9c6e2a + e9ab34e commit be67eda
Show file tree
Hide file tree
Showing 24 changed files with 842 additions and 14 deletions.
17 changes: 17 additions & 0 deletions assets/shaders/colorblindness_assistance_material.gd
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
extends ShaderMaterial
class_name ShaderMaterialColorblindnessAssist
## Uses the "accessibility_colorblindness_filter" setting to automatically load the proper filter when initialized
## Apply this material with "material = ShaderMaterialColorblindnessAssist.new()"
## Or trough the inspector by clicking in the "material" property.


const Shaders: Array[Shader] = [
null,
preload("res://assets/shaders/deutranopia_colorblindness_by_Vildravn.gdshader"),
preload("res://assets/shaders/protanopia_colorblindness_by_Vildravn.gdshader"),
preload("res://assets/shaders/tritanopia_colorblindness_by_Vildravn.gdshader")
]

func _init() -> void:
var shaderMode: int = LocalSaveSystem.get_data(LocalSaveSystem.Sections.SETTINGS, "accessibility_colorblindness_filter", 0)
shader = Shaders[shaderMode]
72 changes: 72 additions & 0 deletions assets/shaders/colorblindness_by_Vildravn.gdshader
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
/*
Shader sourced from: https://godotshaders.com/shader/colorblindness-correction-shader/

This shader is NOT a magical fix, but it will make things easier to distinguish in certain configurations.

Colorblindness correction shader with adjustable intensity. Can correct for:
* Protanopia (Greatly reduced reds)
* Deuteranopia (Greatly reduced greens)
* Tritanopia (Greatly reduced blues)

The correction algorithm is taken from http://www.daltonize.org/search/label/Daltonize

This shader is released under the CC0 license. Feel free to use, improve and change this shader and consider sharing the modified result.
*/

shader_type canvas_item;

// Color correction mode
// 0 - Protanopia
// 1 - Deutranopia
// 2 - Tritanopia
uniform int mode : hint_range(0, 2) = 0;

uniform float intensity : hint_range(0.0, 1.0) = 1.0;

uniform sampler2D SCREEN_TEXTURE : hint_screen_texture;

void fragment()
{
vec4 tex = texture(SCREEN_TEXTURE, SCREEN_UV);

float L = (17.8824 * tex.r) + (43.5161 * tex.g) + (4.11935 * tex.b);
float M = (3.45565 * tex.r) + (27.1554 * tex.g) + (3.86714 * tex.b);
float S = (0.0299566 * tex.r) + (0.184309 * tex.g) + (1.46709 * tex.b);

float l, m, s;
if (mode == 0) //Protanopia
{
l = 0.0 * L + 2.02344 * M + -2.52581 * S;
m = 0.0 * L + 1.0 * M + 0.0 * S;
s = 0.0 * L + 0.0 * M + 1.0 * S;
}

if (mode == 1) //Deuteranopia
{
l = 1.0 * L + 0.0 * M + 0.0 * S;
m = 0.494207 * L + 0.0 * M + 1.24827 * S;
s = 0.0 * L + 0.0 * M + 1.0 * S;
}

if (mode == 2) //Tritanopia
{
l = 1.0 * L + 0.0 * M + 0.0 * S;
m = 0.0 * L + 1.0 * M + 0.0 * S;
s = -0.395913 * L + 0.801109 * M + 0.0 * S;
}

vec4 error;
error.r = (0.0809444479 * l) + (-0.130504409 * m) + (0.116721066 * s);
error.g = (-0.0102485335 * l) + (0.0540193266 * m) + (-0.113614708 * s);
error.b = (-0.000365296938 * l) + (-0.00412161469 * m) + (0.693511405 * s);
error.a = 1.0;
vec4 diff = tex - error;
vec4 correction;
correction.r = 0.0;
correction.g = (diff.r * 0.7) + (diff.g * 1.0);
correction.b = (diff.r * 0.7) + (diff.b * 1.0);
correction = tex + correction;
correction.a = tex.a * intensity;

COLOR = correction;
}
49 changes: 49 additions & 0 deletions assets/shaders/deutranopia_colorblindness_by_Vildravn.gdshader
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
/*
Shader sourced from: https://godotshaders.com/shader/colorblindness-correction-shader/

This shader is NOT a magical fix, but it will make things easier to distinguish in certain configurations.

Colorblindness correction shader with adjustable intensity. Can correct for:
* Protanopia (Greatly reduced reds)
* Deuteranopia (Greatly reduced greens)
* Tritanopia (Greatly reduced blues)

The correction algorithm is taken from http://www.daltonize.org/search/label/Daltonize

This shader is released under the CC0 license. Feel free to use, improve and change this shader and consider sharing the modified result.
*/

shader_type canvas_item;

uniform float intensity : hint_range(0.0, 1.0) = 1.0;

uniform sampler2D SCREEN_TEXTURE : hint_screen_texture;

void fragment()
{
vec4 tex = texture(SCREEN_TEXTURE, SCREEN_UV);

float L = (17.8824 * tex.r) + (43.5161 * tex.g) + (4.11935 * tex.b);
float M = (3.45565 * tex.r) + (27.1554 * tex.g) + (3.86714 * tex.b);
float S = (0.0299566 * tex.r) + (0.184309 * tex.g) + (1.46709 * tex.b);

float l, m, s;
l = 1.0 * L + 0.0 * M + 0.0 * S;
m = 0.494207 * L + 0.0 * M + 1.24827 * S;
s = 0.0 * L + 0.0 * M + 1.0 * S;

vec4 error;
error.r = (0.0809444479 * l) + (-0.130504409 * m) + (0.116721066 * s);
error.g = (-0.0102485335 * l) + (0.0540193266 * m) + (-0.113614708 * s);
error.b = (-0.000365296938 * l) + (-0.00412161469 * m) + (0.693511405 * s);
error.a = 1.0;
vec4 diff = tex - error;
vec4 correction;
correction.r = 0.0;
correction.g = (diff.r * 0.7) + (diff.g * 1.0);
correction.b = (diff.r * 0.7) + (diff.b * 1.0);
correction = tex + correction;
correction.a = tex.a * intensity;

COLOR = correction;
}
49 changes: 49 additions & 0 deletions assets/shaders/protanopia_colorblindness_by_Vildravn.gdshader
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
/*
Shader sourced from: https://godotshaders.com/shader/colorblindness-correction-shader/

This shader is NOT a magical fix, but it will make things easier to distinguish in certain configurations.

Colorblindness correction shader with adjustable intensity. Can correct for:
* Protanopia (Greatly reduced reds)
* Deuteranopia (Greatly reduced greens)
* Tritanopia (Greatly reduced blues)

The correction algorithm is taken from http://www.daltonize.org/search/label/Daltonize

This shader is released under the CC0 license. Feel free to use, improve and change this shader and consider sharing the modified result.
*/

shader_type canvas_item;

uniform float intensity : hint_range(0.0, 1.0) = 1.0;

uniform sampler2D SCREEN_TEXTURE : hint_screen_texture;

void fragment()
{
vec4 tex = texture(SCREEN_TEXTURE, SCREEN_UV);

float L = (17.8824 * tex.r) + (43.5161 * tex.g) + (4.11935 * tex.b);
float M = (3.45565 * tex.r) + (27.1554 * tex.g) + (3.86714 * tex.b);
float S = (0.0299566 * tex.r) + (0.184309 * tex.g) + (1.46709 * tex.b);

float l, m, s;
l = 0.0 * L + 2.02344 * M + -2.52581 * S;
m = 0.0 * L + 1.0 * M + 0.0 * S;
s = 0.0 * L + 0.0 * M + 1.0 * S;

vec4 error;
error.r = (0.0809444479 * l) + (-0.130504409 * m) + (0.116721066 * s);
error.g = (-0.0102485335 * l) + (0.0540193266 * m) + (-0.113614708 * s);
error.b = (-0.000365296938 * l) + (-0.00412161469 * m) + (0.693511405 * s);
error.a = 1.0;
vec4 diff = tex - error;
vec4 correction;
correction.r = 0.0;
correction.g = (diff.r * 0.7) + (diff.g * 1.0);
correction.b = (diff.r * 0.7) + (diff.b * 1.0);
correction = tex + correction;
correction.a = tex.a * intensity;

COLOR = correction;
}
49 changes: 49 additions & 0 deletions assets/shaders/tritanopia_colorblindness_by_Vildravn.gdshader
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
/*
Shader sourced from: https://godotshaders.com/shader/colorblindness-correction-shader/

This shader is NOT a magical fix, but it will make things easier to distinguish in certain configurations.

Colorblindness correction shader with adjustable intensity. Can correct for:
* Protanopia (Greatly reduced reds)
* Deuteranopia (Greatly reduced greens)
* Tritanopia (Greatly reduced blues)

The correction algorithm is taken from http://www.daltonize.org/search/label/Daltonize

This shader is released under the CC0 license. Feel free to use, improve and change this shader and consider sharing the modified result.
*/

shader_type canvas_item;

uniform float intensity : hint_range(0.0, 1.0) = 1.0;

uniform sampler2D SCREEN_TEXTURE : hint_screen_texture;

void fragment()
{
vec4 tex = texture(SCREEN_TEXTURE, SCREEN_UV);

float L = (17.8824 * tex.r) + (43.5161 * tex.g) + (4.11935 * tex.b);
float M = (3.45565 * tex.r) + (27.1554 * tex.g) + (3.86714 * tex.b);
float S = (0.0299566 * tex.r) + (0.184309 * tex.g) + (1.46709 * tex.b);

float l, m, s;
l = 1.0 * L + 0.0 * M + 0.0 * S;
m = 0.0 * L + 1.0 * M + 0.0 * S;
s = -0.395913 * L + 0.801109 * M + 0.0 * S;

vec4 error;
error.r = (0.0809444479 * l) + (-0.130504409 * m) + (0.116721066 * s);
error.g = (-0.0102485335 * l) + (0.0540193266 * m) + (-0.113614708 * s);
error.b = (-0.000365296938 * l) + (-0.00412161469 * m) + (0.693511405 * s);
error.a = 1.0;
vec4 diff = tex - error;
vec4 correction;
correction.r = 0.0;
correction.g = (diff.r * 0.7) + (diff.g * 1.0);
correction.b = (diff.r * 0.7) + (diff.b * 1.0);
correction = tex + correction;
correction.a = tex.a * intensity;

COLOR = correction;
}
4 changes: 3 additions & 1 deletion assets/translation/en_US.csv
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,6 @@ j_left_click,Left click
j_right_click,Right click
j_toggle_bag,Toggle bag
j_toggle_equipment,Toggle equipment
j_toggle_stats,Toggle stats screen
j_toggle_stats,Toggle stats screen
j_ui_chat_toggle,Toggle chat visibility
j_ui_toggle,Toggle GUI visibility
11 changes: 11 additions & 0 deletions project.godot
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,16 @@ j_toggle_stats={
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":73,"key_label":0,"unicode":105,"echo":false,"script":null)
]
}
j_ui_toggle={
"deadzone": 0.5,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194343,"key_label":0,"unicode":0,"echo":false,"script":null)
]
}
j_ui_chat_toggle={
"deadzone": 0.5,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194342,"key_label":0,"unicode":0,"echo":false,"script":null)
]
}

[internationalization]

Expand All @@ -117,3 +127,4 @@ locale/translations=PackedStringArray("res://assets/translation/en_US.en.transla
textures/canvas_textures/default_texture_filter=0
renderer/rendering_method="gl_compatibility"
renderer/rendering_method.mobile="gl_compatibility"
shader_compiler/shader_cache/enabled=false
2 changes: 2 additions & 0 deletions scenes/player/Player.tscn
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
[ext_resource type="PackedScene" uid="uid://dirsk8pf0bxh5" path="res://scenes/player/statdisplay/StatDisplay.tscn" id="17_3wdg5"]
[ext_resource type="PackedScene" uid="uid://chhiamhxxhm3v" path="res://scripts/components/interfacecomponent/InterfaceComponent.tscn" id="18_bmbbk"]
[ext_resource type="PackedScene" uid="uid://c5tliladmodux" path="res://scripts/components/positionsynchronizercomponent/PositionSynchronizerComponent.tscn" id="18_ot7di"]
[ext_resource type="Script" path="res://scenes/player/player_gui.gd" id="23_h5xag"]

[sub_resource type="CapsuleShape2D" id="CapsuleShape2D_lk3fd"]
radius = 24.6666
Expand Down Expand Up @@ -1054,6 +1055,7 @@ anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
script = ExtResource("23_h5xag")

[node name="Inventory" parent="Camera2D/UILayer/GUI" instance=ExtResource("12_cqvu1")]
visible = false
Expand Down
10 changes: 10 additions & 0 deletions scenes/player/player_gui.gd
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
extends Control

@onready var chatPanel: Control = $ChatPanel


func _input(event: InputEvent) -> void:
if event.is_action_pressed("j_ui_toggle"):
visible = !visible
if event.is_action_pressed("j_ui_chat_toggle"):
chatPanel.visible = !chatPanel.visible
29 changes: 29 additions & 0 deletions scenes/ui/options_menu/antialiasing_slider.gd
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
extends HSlider

const QualityList: Array[String] = ["Disabled", "x2", "x4", "x8"]

@onready var textLabel: Label = $Label


func _ready() -> void:
value = LocalSaveSystem.get_data(
LocalSaveSystem.Sections.SETTINGS, "graphics_antialiasing_msaa", 0
)
value_changed.connect(shadow_update)
shadow_update(value)


func display_update(val: float):
var quality: int = int(val)
textLabel.text = QualityList[quality]


func shadow_update(newValue: float):
var quality: int = int(newValue)
ProjectSettings.set_setting("rendering/anti_aliasing/quality/msaa_2d", quality)
ProjectSettings.set_setting("rendering/anti_aliasing/quality/msaa_3d", quality)

LocalSaveSystem.set_data(
LocalSaveSystem.Sections.SETTINGS, "graphics_antialiasing_msaa", newValue
)
display_update(newValue)
31 changes: 31 additions & 0 deletions scenes/ui/options_menu/colourblindness_filter_option.gd
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
extends OptionButton
## This setting is used by "res://assets/shaders/colorblindness_assistance_material.gd"

const FilterSettings: Array[String] = ["Disabled", "Deutranopia", "Protanopia", "Tritanopia"]


func _init() -> void:
#There must be as many settings as there are Shaders
assert(ShaderMaterialColorblindnessAssist.Shaders.size() == FilterSettings.size())
for setting in FilterSettings:
add_item(setting)


func _ready() -> void:
var setting: int = LocalSaveSystem.get_data(
LocalSaveSystem.Sections.SETTINGS, "accessibility_colourblindness_filter", 0
)
item_selected.connect(filter_update)
display_update(setting)


func display_update(id: int):
text = str(FilterSettings[id])
selected = id


func filter_update(id: int):
LocalSaveSystem.set_data(
LocalSaveSystem.Sections.SETTINGS, "accessibility_colourblindness_filter", id
)
display_update(id)
30 changes: 30 additions & 0 deletions scenes/ui/options_menu/fps_limit_slider.gd
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
extends HSlider

@onready var textLabel: Label = $Label


func _ready() -> void:
value = LocalSaveSystem.get_data(LocalSaveSystem.Sections.SETTINGS, "graphics_fps_limit", 60)
value_changed.connect(fps_update)
display_update(value)


func display_update(val: float):
var fps: int = int(val)
if fps == max_value:
textLabel.text = "Unlimited"
else:
textLabel.text = str(fps)


func fps_update(newValue: float):
var fps: int = int(newValue)

if newValue == max_value:
Engine.max_fps = 0
else:
Engine.max_fps = fps

display_update(newValue)

LocalSaveSystem.set_data(LocalSaveSystem.Sections.SETTINGS, "graphics_fps_limit", fps)
Loading

0 comments on commit be67eda

Please sign in to comment.