aboutsummaryrefslogtreecommitdiff
path: root/client
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2025-09-22 23:13:58 +0200
committermetamuffin <metamuffin@disroot.org>2025-09-22 23:14:21 +0200
commitfed8a4f8cd2adc9191211f74f284f93eb8f1ac53 (patch)
tree27a2db9896c112fb903b38f0cf2392b676d2270a /client
parentaba816f923b8bcd33d53eabd93b01c6e85f4dc75 (diff)
downloadhurrycurry-fed8a4f8cd2adc9191211f74f284f93eb8f1ac53.tar
hurrycurry-fed8a4f8cd2adc9191211f74f284f93eb8f1ac53.tar.bz2
hurrycurry-fed8a4f8cd2adc9191211f74f284f93eb8f1ac53.tar.zst
Disable setting reset if default; refactor setting hook system (fix #379)
Diffstat (limited to 'client')
-rw-r--r--client/gui/components/blur_setup.gd2
-rw-r--r--client/gui/menus/settings/dropdown_setting.gd2
-rw-r--r--client/gui/menus/settings/game_setting.gd4
-rw-r--r--client/gui/menus/settings/input/input_setting.gd2
-rw-r--r--client/gui/menus/settings/number_setting.gd2
-rw-r--r--client/gui/menus/settings/range_setting.gd2
-rw-r--r--client/gui/menus/settings/settings_row.gd4
-rw-r--r--client/gui/menus/settings/text_setting.gd2
-rw-r--r--client/gui/menus/settings/toggle_setting.gd2
-rw-r--r--client/gui/overlays/debug.gd2
-rw-r--r--client/gui/overlays/overlays.gd2
-rw-r--r--client/map/auto_setup/environment_setup.gd6
-rw-r--r--client/map/auto_setup/light_setup.gd2
-rw-r--r--client/map/map.gd2
-rw-r--r--client/player/onscreen_controls/controls.gd2
-rw-r--r--client/player/player.gd2
-rw-r--r--client/system/settings.gd39
17 files changed, 43 insertions, 36 deletions
diff --git a/client/gui/components/blur_setup.gd b/client/gui/components/blur_setup.gd
index 318f8e7e..6034aa7f 100644
--- a/client/gui/components/blur_setup.gd
+++ b/client/gui/components/blur_setup.gd
@@ -18,7 +18,7 @@ class_name BlurSetup
func _ready():
update(Settings.read("graphics.ui_blur"))
- Settings.hook_changed("graphics.ui_blur", false, update)
+ Settings.hook_changed("graphics.ui_blur", "main", update)
func update(state):
material.set_shader_parameter("enable_blur", state)
diff --git a/client/gui/menus/settings/dropdown_setting.gd b/client/gui/menus/settings/dropdown_setting.gd
index 69ae29b6..bf4c3d48 100644
--- a/client/gui/menus/settings/dropdown_setting.gd
+++ b/client/gui/menus/settings/dropdown_setting.gd
@@ -27,7 +27,7 @@ func create_row():
row.value_node = OptionButton.new()
row.value_node.clip_text = true
for i in options: row.value_node.add_item(tr(nskey + "." + i))
- Settings.hook_changed_init(key, true,
+ Settings.hook_changed_init(key, "preview",
func(value):
if is_instance_valid(row):
row.value_node.select(options.find(value))
diff --git a/client/gui/menus/settings/game_setting.gd b/client/gui/menus/settings/game_setting.gd
index 1dfee59e..2284f637 100644
--- a/client/gui/menus/settings/game_setting.gd
+++ b/client/gui/menus/settings/game_setting.gd
@@ -32,8 +32,12 @@ func create_row():
var row = preload("res://gui/menus/settings/settings_row.tscn").instantiate()
row.description = tr(nskey)
row.reset.connect(func(): Settings.write(key, default))
+ Settings.hook_changed_init(key, "preview_reset", func (_value): row.set_reset_disabled(is_default()))
return row
+func is_default():
+ return Settings.read(key) == default
+
func load(d: Dictionary):
if d.has(key) && typeof(d[key]) == typeof(default):
Settings.write_unchecked(key, d[key])
diff --git a/client/gui/menus/settings/input/input_setting.gd b/client/gui/menus/settings/input/input_setting.gd
index 3431ff38..3367ac8e 100644
--- a/client/gui/menus/settings/input/input_setting.gd
+++ b/client/gui/menus/settings/input/input_setting.gd
@@ -25,7 +25,7 @@ func _init(new_id: String):
func create_row():
var row = super()
row.value_node = INPUT_VALUE_NODE_SCENE.instantiate()
- Settings.hook_changed_init(key, true,
+ Settings.hook_changed_init(key, "preview",
func(value):
if is_instance_valid(row):
row.value_node.value = value
diff --git a/client/gui/menus/settings/number_setting.gd b/client/gui/menus/settings/number_setting.gd
index f729913c..48dd0a82 100644
--- a/client/gui/menus/settings/number_setting.gd
+++ b/client/gui/menus/settings/number_setting.gd
@@ -32,7 +32,7 @@ func create_row():
input.max_value = max_value
input.value_changed.connect(func(value): Settings.write(key, value as int))
- Settings.hook_changed_init(key, true,
+ Settings.hook_changed_init(key, "preview",
func(v):
if is_instance_valid(input):
input.value = v
diff --git a/client/gui/menus/settings/range_setting.gd b/client/gui/menus/settings/range_setting.gd
index a487c6b4..2d7e88b4 100644
--- a/client/gui/menus/settings/range_setting.gd
+++ b/client/gui/menus/settings/range_setting.gd
@@ -35,7 +35,7 @@ func create_row():
row.value_node.max_value = max_value
row.value_node.tick_count = abs(max_value - min_value) if tick_count == null else tick_count
row.value_node.step = 0 if smooth else (1 if tick_count == null else abs(max_value - min_value) / (tick_count - 1))
- Settings.hook_changed_init(key, true,
+ Settings.hook_changed_init(key, "preview",
func(value):
if is_instance_valid(row):
row.value_node.value = value
diff --git a/client/gui/menus/settings/settings_row.gd b/client/gui/menus/settings/settings_row.gd
index d88d49c1..a3b4f8c8 100644
--- a/client/gui/menus/settings/settings_row.gd
+++ b/client/gui/menus/settings/settings_row.gd
@@ -33,5 +33,9 @@ func _ready():
label.text = description
value_parent.add_child(c)
+func set_reset_disabled(d: bool):
+ if is_instance_valid(reset_button): reset_button.disabled = d
+ else: set_reset_disabled.call_deferred(d)
+
func _on_reset_pressed():
reset.emit()
diff --git a/client/gui/menus/settings/text_setting.gd b/client/gui/menus/settings/text_setting.gd
index 83e68539..de0ef218 100644
--- a/client/gui/menus/settings/text_setting.gd
+++ b/client/gui/menus/settings/text_setting.gd
@@ -27,7 +27,7 @@ func create_row():
var input := LineEdit.new()
input.placeholder_text = placeholder
input.text_changed.connect(func(text): Settings.write(key, text))
- Settings.hook_changed_init(key, true,
+ Settings.hook_changed_init(key, "preview",
func(text):
if is_instance_valid(input):
var pos = input.caret_column
diff --git a/client/gui/menus/settings/toggle_setting.gd b/client/gui/menus/settings/toggle_setting.gd
index dcf7dbd7..fa60ca74 100644
--- a/client/gui/menus/settings/toggle_setting.gd
+++ b/client/gui/menus/settings/toggle_setting.gd
@@ -23,7 +23,7 @@ func create_row():
var row = super()
row.value_node = CheckButton.new()
row.value_node.pressed.connect(func(): Settings.write(key, row.value_node.button_pressed))
- Settings.hook_changed_init(key, true,
+ Settings.hook_changed_init(key, "preview",
func(value):
if is_instance_valid(row):
row.value_node.button_pressed = value
diff --git a/client/gui/overlays/debug.gd b/client/gui/overlays/debug.gd
index 003672c4..3a37a1b7 100644
--- a/client/gui/overlays/debug.gd
+++ b/client/gui/overlays/debug.gd
@@ -16,7 +16,7 @@
extends RichTextLabel
func _ready():
- Settings.hook_changed_init("graphics.debug_info", false, func (v):
+ Settings.hook_changed_init("graphics.debug_info", "main", func (v):
visible = v
RenderingServer.viewport_set_measure_render_time(get_viewport().get_viewport_rid(), visible)
)
diff --git a/client/gui/overlays/overlays.gd b/client/gui/overlays/overlays.gd
index 0483fef6..9971ea53 100644
--- a/client/gui/overlays/overlays.gd
+++ b/client/gui/overlays/overlays.gd
@@ -17,7 +17,7 @@ extends Control
class_name Overlays
func _ready():
- Settings.hook_changed_init("ui.hide_overlays", false, func (v): visible = not v)
+ Settings.hook_changed_init("ui.hide_overlays", "main", func (v): visible = not v)
func _input(_event):
if Input.is_action_just_pressed("toggle_overlay"):
diff --git a/client/map/auto_setup/environment_setup.gd b/client/map/auto_setup/environment_setup.gd
index b83ffd13..7b6c5c8a 100644
--- a/client/map/auto_setup/environment_setup.gd
+++ b/client/map/auto_setup/environment_setup.gd
@@ -22,9 +22,9 @@ func set_sky(sky_name: String):
environment.sky.sky_material = load("res://map/environment/presets/%s_sky.tres" % sky_name)
func _ready():
- Settings.hook_changed_init("graphics.ssao", false, func (x): environment.ssao_enabled = x)
- Settings.hook_changed_init("graphics.gi", false, func (x): environment.sdfgi_enabled = x == "sdfgi" and allow_sdfgi)
- Settings.hook_changed_init("graphics.glow", false, func (x): environment.glow_enabled = x)
+ Settings.hook_changed_init("graphics.ssao", "main", func (x): environment.ssao_enabled = x)
+ Settings.hook_changed_init("graphics.gi", "main", func (x): environment.sdfgi_enabled = x == "sdfgi" and allow_sdfgi)
+ Settings.hook_changed_init("graphics.glow", "main", func (x): environment.glow_enabled = x)
if !Global.on_vulkan():
environment.environment.tonemap_exposure = 0.5
diff --git a/client/map/auto_setup/light_setup.gd b/client/map/auto_setup/light_setup.gd
index 6d5359d4..aeeefb3f 100644
--- a/client/map/auto_setup/light_setup.gd
+++ b/client/map/auto_setup/light_setup.gd
@@ -19,7 +19,7 @@ class_name LightSetup
@export var completely_disable_light_if_shadows_disabled := false
func _ready():
- Settings.hook_changed_init("graphics.shadows", false, apply_settings)
+ Settings.hook_changed_init("graphics.shadows", "main", apply_settings)
func apply_settings(setting: bool):
if completely_disable_light_if_shadows_disabled:
diff --git a/client/map/map.gd b/client/map/map.gd
index 235425a0..ef7c69c9 100644
--- a/client/map/map.gd
+++ b/client/map/map.gd
@@ -54,7 +54,7 @@ func clear_tile(pos: Vector2i):
@onready var voxelgi: VoxelGI = $VoxelGI
func _ready():
- Settings.hook_changed("graphics.gi", false, apply_gi_setting)
+ Settings.hook_changed("graphics.gi", "main", apply_gi_setting)
floor_node.material_override = preload("res://map/tiles/floor_material.tres")
for fm in tile_factory.floor_meshers.values():
add_child(fm.mesh_instance)
diff --git a/client/player/onscreen_controls/controls.gd b/client/player/onscreen_controls/controls.gd
index c7fa0e36..3f38e7c2 100644
--- a/client/player/onscreen_controls/controls.gd
+++ b/client/player/onscreen_controls/controls.gd
@@ -24,7 +24,7 @@ extends CanvasLayer
var touch_enabled := false
func _ready():
- Settings.hook_changed_init("ui.touch_controls", false, apply_touch)
+ Settings.hook_changed_init("ui.touch_controls", "main", apply_touch)
Global.using_touch_change.connect(func f(_x): apply_touch(Settings.read("ui.touch_controls"))) # throw away useless argument
Global.hand_count_change.connect(apply_hand_count)
apply_hand_count(Global.hand_count)
diff --git a/client/player/player.gd b/client/player/player.gd
index 8b9a8e5e..aede738c 100644
--- a/client/player/player.gd
+++ b/client/player/player.gd
@@ -105,7 +105,7 @@ func _ready():
character.set_style(character_style, player_class)
clear_timer.timeout.connect(clear_message)
- Settings.hook_changed_init("gameplay.usernames", false, update_username_tag)
+ Settings.hook_changed_init("gameplay.usernames", "main", update_username_tag)
func update_position(new_position: Vector2, new_rotation: float, new_boosting: bool):
position_ = new_position
diff --git a/client/system/settings.gd b/client/system/settings.gd
index a3aece89..cd990216 100644
--- a/client/system/settings.gd
+++ b/client/system/settings.gd
@@ -123,16 +123,16 @@ static func save():
f.store_string(JSON.stringify(changed))
static func trigger_hook(key: String, value):
- if change_hooks_display.get(key) != null: change_hooks_display.get(key).callv([value] if value != null else [])
- if change_hooks_apply.get(key) != null: change_hooks_apply.get(key).callv([value] if value != null else [])
+ for slot in change_hooks.get(key, {}):
+ change_hooks[key][slot].callv([value] if value != null else [])
if key.find(".") != -1: trigger_hook(key.rsplit(".", false, 1)[0], null)
-static func hook_changed(key: String, display: bool, callable: Callable):
- if display: change_hooks_display[key] = callable
- else: change_hooks_apply[key] = callable
+static func hook_changed(key: String, slot: String, callable: Callable):
+ if not change_hooks.has(key): change_hooks[key] = {}
+ change_hooks[key][slot] = callable
-static func hook_changed_init(key: String, display: bool, callable: Callable):
- hook_changed(key, display, callable)
+static func hook_changed_init(key: String, slot: String, callable: Callable):
+ hook_changed(key, slot, callable)
callable.call(read(key))
static func get_category_dict(prefix: String):
@@ -146,19 +146,18 @@ static func get_category_dict(prefix: String):
static func launch_setup():
Global.focused_menu.submenu("res://gui/menus/setup/setup.tscn")
-static var change_hooks_display = {}
-static var change_hooks_apply = {
- "input": h_input,
- "gameplay.hints_started": h_hints_started,
- "graphics.aa": h_aa,
- "graphics.taa": h_taa,
- "graphics.fullscreen": h_fullscreen,
- "ui.scale_mode": h_scale_mode,
- "ui.scale_factor": h_scale_factor,
- "ui.language": h_language,
- "audio.master_volume": h_volume_master,
- "audio.music_volume": h_volume_music,
- "audio.sfx_volume": h_volume_sfx,
+static var change_hooks = {
+ "input": { "static": h_input },
+ "gameplay.hints_started": { "static": h_hints_started },
+ "graphics.aa": { "static": h_aa },
+ "graphics.taa": { "static": h_taa },
+ "graphics.fullscreen": { "static": h_fullscreen },
+ "ui.scale_mode": { "static": h_scale_mode },
+ "ui.scale_factor": { "static": h_scale_factor },
+ "ui.language": { "static": h_language },
+ "audio.master_volume": { "static": h_volume_master },
+ "audio.music_volume": { "static": h_volume_music },
+ "audio.sfx_volume": { "static": h_volume_sfx },
}
static func h_aa(_mode):