From 06baf4555dc1c7a64bed7d059fbe34c99e9638fb Mon Sep 17 00:00:00 2001 From: metamuffin Date: Fri, 6 Sep 2024 23:43:42 +0200 Subject: refactor settings again (part 1) --- client/menu/settings/input/input_manager.gd | 35 ++++---------------------- client/menu/settings/input/input_setting.gd | 16 +++++------- client/menu/settings/input/input_value_node.gd | 5 ++++ 3 files changed, 16 insertions(+), 40 deletions(-) (limited to 'client/menu/settings/input') diff --git a/client/menu/settings/input/input_manager.gd b/client/menu/settings/input/input_manager.gd index 96cdca09..784b4974 100644 --- a/client/menu/settings/input/input_manager.gd +++ b/client/menu/settings/input/input_manager.gd @@ -1,5 +1,6 @@ # Hurry Curry! - a game about cooking # Copyright 2024 tpart +# Copyright 2024 metamuffin # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by @@ -15,32 +16,6 @@ # extends Node -var action_descriptions = { - "forwards": tr("Move forwards"), - "backwards": tr("Move backwards"), - "left": tr("Move left"), - "right": tr("Move right"), - "rotate_left": tr("Rotate camera to the left"), - "rotate_right": tr("Rotate camera to the right"), - "rotate_up": tr("Rotate camera upwards"), - "rotate_down": tr("Rotate camera downwards"), - "interact": tr("Interact", "Interacting with items, etc."), - "boost": tr("Boost movement"), - "zoom_in": tr("Zoom in"), - "zoom_out": tr("Zoom out"), - "chat": tr("Toggle chat", "Toggle chat on or off"), - "reset": tr("Reset camera view"), - "fullscreen": tr("Toggle fullscreen"), - "previous": tr("Previous"), - "next": tr("Next"), - "start_game": tr("Start game"), - "join_spectate": tr("Join / Spectate"), - "zoom_in_discrete": tr("Zoom in (discrete)"), - "zoom_out_discrete": tr("Zoom out (discrete)"), - "scroll_down": tr("Scroll down"), - "scroll_up": tr("Scroll up"), -} - var default_input_map = {} var input_map @@ -56,12 +31,12 @@ func get_input_map() -> Dictionary: kb[a] = input_events return kb -func input_map_to_settings_dictionary(map: Dictionary) -> Dictionary: - var settings_dict := {} +func input_map_to_settings(map: Dictionary) -> Array: + var entries := [] for k in map.keys(): var events = map[k] - settings_dict[k] = InputSetting.new(action_descriptions[k] if action_descriptions.has(k) else k, events) - return settings_dict + entries.append(InputSetting.new(k, events)) + return entries func settings_dictionary_to_input_map(settings: Dictionary) -> Dictionary: var map := {} diff --git a/client/menu/settings/input/input_setting.gd b/client/menu/settings/input/input_setting.gd index eec68bdc..e32e800c 100644 --- a/client/menu/settings/input/input_setting.gd +++ b/client/menu/settings/input/input_setting.gd @@ -1,5 +1,6 @@ # Hurry Curry! - a game about cooking # Copyright 2024 tpart +# Copyright 2024 metamuffin # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by @@ -21,14 +22,9 @@ const INPUT_VALUE_NODE_SCENE = preload("res://menu/settings/input/input_value_no func _update_row(): super() row.value_node = INPUT_VALUE_NODE_SCENE.instantiate() - row.value_node.value = _value + row.value_node.value = Global.get_setting(key) + if not row.value_node.changed.is_connected(from_ui): + row.value_node.changed.connect(from_ui) -func fetch_setting(): - if row != null: - _value = row.value_node.value - -func set_value(v): - super(v) - if row != null: - row.value_node.value = _value - row.value_node.update() +func from_ui(): + Global.set_setting(key, row.value_node.value) diff --git a/client/menu/settings/input/input_value_node.gd b/client/menu/settings/input/input_value_node.gd index 125a946b..9f89416b 100644 --- a/client/menu/settings/input/input_value_node.gd +++ b/client/menu/settings/input/input_value_node.gd @@ -1,5 +1,6 @@ # Hurry Curry! - a game about cooking # Copyright 2024 tpart +# Copyright 2024 metamuffin # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by @@ -19,6 +20,8 @@ class_name InputValueNode var value: Array[InputEvent] = [] var listening := false +signal changed() + @onready var actions_container: VBoxContainer = $ActionsContainer @onready var add_button: Button = $Add @onready var add_text = add_button.text @@ -55,6 +58,7 @@ func update(fix_focus: bool = false): func erase_event(e: InputEvent): value.erase(e) update(true) + changed.emit() func _input(e: InputEvent): if listening: @@ -66,6 +70,7 @@ func _input(e: InputEvent): value.append(e) _on_add_pressed() update() + changed.emit() func events_equal(e1: InputEvent, e2: InputEvent) -> bool: if e1 is InputEventKey and e2 is InputEventKey: -- cgit v1.2.3-70-g09d2 From a97f429c6a0ead9eb084efbd276bd999bf9c9a7f Mon Sep 17 00:00:00 2001 From: metamuffin Date: Sat, 7 Sep 2024 03:39:06 +0200 Subject: _update_row -> create_row --- client/menu/settings/dropdown_setting.gd | 2 +- client/menu/settings/input/input_setting.gd | 13 +++++-------- client/menu/settings/preset_row.gd | 16 ++++++++-------- client/menu/settings/range_setting.gd | 7 ++++--- client/menu/settings/settings_category.gd | 6 ++---- client/menu/settings/settings_root.gd | 4 +--- client/menu/settings/text_setting.gd | 2 +- 7 files changed, 22 insertions(+), 28 deletions(-) (limited to 'client/menu/settings/input') diff --git a/client/menu/settings/dropdown_setting.gd b/client/menu/settings/dropdown_setting.gd index 8dffce5a..4a3ce8c6 100644 --- a/client/menu/settings/dropdown_setting.gd +++ b/client/menu/settings/dropdown_setting.gd @@ -26,6 +26,6 @@ func create_row(): var row = super() row.value_node = OptionButton.new() for i in options: row.value_node.add_item(tr(nskey + "." + i)) - Settings.hook_changed_init(func (value): row.value_node.select(options.find(Global.get_setting(value)))) + Settings.hook_changed_init(key, func (value): row.value_node.select(options.find(value))) row.value_node.item_selected.connect(func(item): Global.set_setting(key, options[item])) return row diff --git a/client/menu/settings/input/input_setting.gd b/client/menu/settings/input/input_setting.gd index e32e800c..7a017ed2 100644 --- a/client/menu/settings/input/input_setting.gd +++ b/client/menu/settings/input/input_setting.gd @@ -19,12 +19,9 @@ extends GameSetting const INPUT_VALUE_NODE_SCENE = preload("res://menu/settings/input/input_value_node.tscn") -func _update_row(): - super() +func create_row(): + var row = super() row.value_node = INPUT_VALUE_NODE_SCENE.instantiate() - row.value_node.value = Global.get_setting(key) - if not row.value_node.changed.is_connected(from_ui): - row.value_node.changed.connect(from_ui) - -func from_ui(): - Global.set_setting(key, row.value_node.value) + Settings.hook_changed_init(key, func(value): row.value_node.value = value) + row.value_node.changed.connect(func(): Global.set_setting(key, row.value_node.value)) + return row diff --git a/client/menu/settings/preset_row.gd b/client/menu/settings/preset_row.gd index ab49f0d8..af6cfe0e 100644 --- a/client/menu/settings/preset_row.gd +++ b/client/menu/settings/preset_row.gd @@ -35,11 +35,11 @@ func apply(preset_name: String): Global.set_setting(prefix + "." + i, preset[i]) func create_row(): - super() - if row.value_node == null: - row.value_node = HBoxContainer.new() - for i in options.keys(): - var button := Button.new() - button.pressed.connect(apply.bind(i)) - button.text = tr(nskey + "." + i) - row.value_node.add_child(button) + var row = super() + row.value_node = HBoxContainer.new() + for i in options.keys(): + var button := Button.new() + button.pressed.connect(apply.bind(i)) + button.text = tr(nskey + "." + i) + row.value_node.add_child(button) + return row diff --git a/client/menu/settings/range_setting.gd b/client/menu/settings/range_setting.gd index adc8a28c..f1261b81 100644 --- a/client/menu/settings/range_setting.gd +++ b/client/menu/settings/range_setting.gd @@ -29,12 +29,13 @@ func _init(new_id: String, new_default: float, new_min_value: float, new_max_val tick_count = new_tick_count smooth = new_smooth -func _update_row(): - super() +func create_row(): + var row = super() row.value_node = HSlider.new() row.value_node.min_value = min_value 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_change_init(func(value): row.value_node.value = value) + Settings.hook_changed_init(key, func(value): row.value_node.value = value) row.value_node.value_changed.connect(func(value): Global.set_setting(key, value)) + return row diff --git a/client/menu/settings/settings_category.gd b/client/menu/settings/settings_category.gd index 4f5fbbc4..b5d02d8f 100644 --- a/client/menu/settings/settings_category.gd +++ b/client/menu/settings/settings_category.gd @@ -29,7 +29,7 @@ func set_parent(parent: GameSetting): for c in settings: c.set_parent(self) -func _update_row(): +func create_row(): var row = ScrollContainerCustom.new() var options = VBoxContainer.new() row.name = tr(nskey) @@ -37,9 +37,7 @@ func _update_row(): options.size_flags_horizontal = Control.SIZE_EXPAND_FILL row.add_child(options) - for r in settings: - r._update_row() - options.add_child(r.row) + for r in settings: options.add_child(r.create_row()) return row func check(): diff --git a/client/menu/settings/settings_root.gd b/client/menu/settings/settings_root.gd index d7dad1f7..1beb0d9b 100644 --- a/client/menu/settings/settings_root.gd +++ b/client/menu/settings/settings_root.gd @@ -26,9 +26,7 @@ func _init(new_children: Array): func create_row(): var row = TabContainer.new() row.size_flags_vertical = Control.SIZE_EXPAND_FILL - for r in children: - r._update_row() - row.add_child(r.row) + for r in children: row.add_child(r.create_row()) return row func check(): diff --git a/client/menu/settings/text_setting.gd b/client/menu/settings/text_setting.gd index 4cdf746f..8bf2fa9f 100644 --- a/client/menu/settings/text_setting.gd +++ b/client/menu/settings/text_setting.gd @@ -23,7 +23,7 @@ func _init(new_id: String, new_default: String, new_placeholder: String = ""): super(new_id, new_default) placeholder = new_placeholder -func _update_row(): +func create_row(): var row = super() row.value_node = LineEdit.new() row.value_node.placeholder_text = placeholder -- cgit v1.2.3-70-g09d2 From 923b4d1aa63b6226365a53a7fe227a734760ed1e Mon Sep 17 00:00:00 2001 From: metamuffin Date: Sat, 7 Sep 2024 13:56:56 +0200 Subject: fix hooks overriding each other --- client/map/auto_setup/environment_setup.gd | 6 +++--- client/map/auto_setup/light_setup.gd | 2 +- client/map/map.gd | 2 +- client/menu/blur_setup.gd | 2 +- client/menu/settings/dropdown_setting.gd | 2 +- client/menu/settings/input/input_setting.gd | 2 +- client/menu/settings/range_setting.gd | 2 +- client/menu/settings/text_setting.gd | 2 +- client/menu/settings/toggle_setting.gd | 2 +- client/player/player.gd | 2 +- client/settings.gd | 9 +++++---- 11 files changed, 17 insertions(+), 16 deletions(-) (limited to 'client/menu/settings/input') diff --git a/client/map/auto_setup/environment_setup.gd b/client/map/auto_setup/environment_setup.gd index 73c3ee32..c484ca1d 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", func (x): environment.ssao_enabled = x) - Settings.hook_changed_init("graphics.gi", func (x): environment.sdfgi_enabled = x == "sdfgi" and allow_sdfgi) - Settings.hook_changed_init("graphics.glow", func (x): environment.glow_enabled = x) + 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) 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 4da2886e..7d1b0b7a 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", apply_settings) + Settings.hook_changed_init("graphics.shadows", false, 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 f6258cc6..ce3c6dfa 100644 --- a/client/map/map.gd +++ b/client/map/map.gd @@ -52,7 +52,7 @@ func clear_tile(pos: Vector2i): func _ready(): voxelgi_timer.connect("timeout", gi_bake) - Settings.hook_changed("graphics.gi", apply_gi_setting) + Settings.hook_changed("graphics.gi", false, apply_gi_setting) func apply_gi_setting(state): if state == "voxelgi" and not currently_baked: diff --git a/client/menu/blur_setup.gd b/client/menu/blur_setup.gd index b5f80540..331d1f47 100644 --- a/client/menu/blur_setup.gd +++ b/client/menu/blur_setup.gd @@ -17,7 +17,7 @@ extends Control func _ready(): update(Global.get_setting("graphics.ui_blur")) - Settings.hook_changed("graphics.ui_blur", update) + Settings.hook_changed("graphics.ui_blur", false, update) func update(state): material.set_shader_parameter("enable_blur", state) diff --git a/client/menu/settings/dropdown_setting.gd b/client/menu/settings/dropdown_setting.gd index 4a3ce8c6..3d6b7c80 100644 --- a/client/menu/settings/dropdown_setting.gd +++ b/client/menu/settings/dropdown_setting.gd @@ -26,6 +26,6 @@ func create_row(): var row = super() row.value_node = OptionButton.new() for i in options: row.value_node.add_item(tr(nskey + "." + i)) - Settings.hook_changed_init(key, func (value): row.value_node.select(options.find(value))) + Settings.hook_changed_init(key, true, func (value): row.value_node.select(options.find(value))) row.value_node.item_selected.connect(func(item): Global.set_setting(key, options[item])) return row diff --git a/client/menu/settings/input/input_setting.gd b/client/menu/settings/input/input_setting.gd index 7a017ed2..7388af78 100644 --- a/client/menu/settings/input/input_setting.gd +++ b/client/menu/settings/input/input_setting.gd @@ -22,6 +22,6 @@ const INPUT_VALUE_NODE_SCENE = preload("res://menu/settings/input/input_value_no func create_row(): var row = super() row.value_node = INPUT_VALUE_NODE_SCENE.instantiate() - Settings.hook_changed_init(key, func(value): row.value_node.value = value) + Settings.hook_changed_init(key, true, func(value): row.value_node.value = value) row.value_node.changed.connect(func(): Global.set_setting(key, row.value_node.value)) return row diff --git a/client/menu/settings/range_setting.gd b/client/menu/settings/range_setting.gd index f1261b81..b119a205 100644 --- a/client/menu/settings/range_setting.gd +++ b/client/menu/settings/range_setting.gd @@ -36,6 +36,6 @@ 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, func(value): row.value_node.value = value) + Settings.hook_changed_init(key, true, func(value): row.value_node.value = value) row.value_node.value_changed.connect(func(value): Global.set_setting(key, value)) return row diff --git a/client/menu/settings/text_setting.gd b/client/menu/settings/text_setting.gd index 8bf2fa9f..dc9352ab 100644 --- a/client/menu/settings/text_setting.gd +++ b/client/menu/settings/text_setting.gd @@ -28,5 +28,5 @@ func create_row(): row.value_node = LineEdit.new() row.value_node.placeholder_text = placeholder row.value_node.text_changed.connect(func(text): Global.set_setting(key, text)) - Settings.hook_changed_init(key, func(text): row.value_node.text = text) + Settings.hook_changed_init(key, true, func(text): row.value_node.text = text) return row diff --git a/client/menu/settings/toggle_setting.gd b/client/menu/settings/toggle_setting.gd index c8c40469..8e0c030c 100644 --- a/client/menu/settings/toggle_setting.gd +++ b/client/menu/settings/toggle_setting.gd @@ -24,5 +24,5 @@ func create_row(): var row = super() row.value_node = CheckButton.new() row.value_node.pressed.connect(func(): Global.set_setting(key, row.value_node.button_pressed)) - Settings.hook_changed_init(key, func(value): row.value_node.button_pressed = value) + Settings.hook_changed_init(key, true, func(value): row.value_node.button_pressed = value) return row diff --git a/client/player/player.gd b/client/player/player.gd index f034f14d..f418337b 100644 --- a/client/player/player.gd +++ b/client/player/player.gd @@ -77,7 +77,7 @@ func _ready(): character.select_hairstyle(character_idx) clear_timer.timeout.connect(clear_message) - Settings.hook_changed_init("gameplay.usernames", update_username_tag) + Settings.hook_changed_init("gameplay.usernames", false, update_username_tag) func update_position(new_position: Vector2, new_rotation: float, new_boosting: bool): position_ = new_position diff --git a/client/settings.gd b/client/settings.gd index 828ecb62..5501f1ab 100644 --- a/client/settings.gd +++ b/client/settings.gd @@ -66,11 +66,12 @@ static func get_root(): ]) ]) -static func hook_changed(key: String, callable: Callable): - change_hooks_display[key] = callable +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_init(key: String, callable: Callable): - hook_changed(key, callable) +static func hook_changed_init(key: String, display: bool, callable: Callable): + hook_changed(key, display, callable) callable.call(Global.get_setting(key)) static var change_hooks_display = {} -- cgit v1.2.3-70-g09d2 From 7ae48041d88ac32cd0892a78125103cbdccd7dab Mon Sep 17 00:00:00 2001 From: metamuffin Date: Sat, 7 Sep 2024 14:44:26 +0200 Subject: hook input changes --- client/menu/settings/input/input_manager.gd | 7 ------- client/settings.gd | 11 +++++++++-- 2 files changed, 9 insertions(+), 9 deletions(-) (limited to 'client/menu/settings/input') diff --git a/client/menu/settings/input/input_manager.gd b/client/menu/settings/input/input_manager.gd index 784b4974..d216884b 100644 --- a/client/menu/settings/input/input_manager.gd +++ b/client/menu/settings/input/input_manager.gd @@ -38,13 +38,6 @@ func input_map_to_settings(map: Dictionary) -> Array: entries.append(InputSetting.new(k, events)) return entries -func settings_dictionary_to_input_map(settings: Dictionary) -> Dictionary: - var map := {} - for k in settings.keys(): - var setting: InputSetting = settings[k] - map[k] = setting.get_value() - return map - func change_input_map_action(action_name: String, events: Array, save: bool = true): if !InputMap.has_action(action_name): push_error("Action %s does not exist" % action_name, false) diff --git a/client/settings.gd b/client/settings.gd index 341db7cc..2c3ae9a5 100644 --- a/client/settings.gd +++ b/client/settings.gd @@ -79,6 +79,14 @@ static func hook_changed_init(key: String, display: bool, callable: Callable): hook_changed(key, display, callable) callable.call(Global.get_setting(key)) +static func get_category_dict(prefix: String): + var map = {} + for k in Global.settings.keys(): + var kn = k.trim_prefix(prefix+".") + if kn == k: continue + map[kn] = Global.get_setting(k) + return map + static var change_hooks_display = {} static var change_hooks_apply = { "input": h_input, @@ -149,8 +157,7 @@ static func h_fullscreen(mode: String): DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_WINDOWED) static func h_input(_x): - pass - # InputManager.apply_input_map(InputManager.settings_dictionary_to_input_map()) + InputManager.apply_input_map(Settings.get_category_dict("input")) # TODO whatever this does # if not get_setting("tutorial_started"): -- cgit v1.2.3-70-g09d2