diff options
author | metamuffin <metamuffin@disroot.org> | 2025-09-22 23:13:58 +0200 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2025-09-22 23:14:21 +0200 |
commit | fed8a4f8cd2adc9191211f74f284f93eb8f1ac53 (patch) | |
tree | 27a2db9896c112fb903b38f0cf2392b676d2270a | |
parent | aba816f923b8bcd33d53eabd93b01c6e85f4dc75 (diff) | |
download | hurrycurry-fed8a4f8cd2adc9191211f74f284f93eb8f1ac53.tar hurrycurry-fed8a4f8cd2adc9191211f74f284f93eb8f1ac53.tar.bz2 hurrycurry-fed8a4f8cd2adc9191211f74f284f93eb8f1ac53.tar.zst |
Disable setting reset if default; refactor setting hook system (fix #379)
-rw-r--r-- | client/gui/components/blur_setup.gd | 2 | ||||
-rw-r--r-- | client/gui/menus/settings/dropdown_setting.gd | 2 | ||||
-rw-r--r-- | client/gui/menus/settings/game_setting.gd | 4 | ||||
-rw-r--r-- | client/gui/menus/settings/input/input_setting.gd | 2 | ||||
-rw-r--r-- | client/gui/menus/settings/number_setting.gd | 2 | ||||
-rw-r--r-- | client/gui/menus/settings/range_setting.gd | 2 | ||||
-rw-r--r-- | client/gui/menus/settings/settings_row.gd | 4 | ||||
-rw-r--r-- | client/gui/menus/settings/text_setting.gd | 2 | ||||
-rw-r--r-- | client/gui/menus/settings/toggle_setting.gd | 2 | ||||
-rw-r--r-- | client/gui/overlays/debug.gd | 2 | ||||
-rw-r--r-- | client/gui/overlays/overlays.gd | 2 | ||||
-rw-r--r-- | client/map/auto_setup/environment_setup.gd | 6 | ||||
-rw-r--r-- | client/map/auto_setup/light_setup.gd | 2 | ||||
-rw-r--r-- | client/map/map.gd | 2 | ||||
-rw-r--r-- | client/player/onscreen_controls/controls.gd | 2 | ||||
-rw-r--r-- | client/player/player.gd | 2 | ||||
-rw-r--r-- | client/system/settings.gd | 39 |
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): |