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/settings_root.gd | 36 +++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 client/menu/settings/settings_root.gd (limited to 'client/menu/settings/settings_root.gd') diff --git a/client/menu/settings/settings_root.gd b/client/menu/settings/settings_root.gd new file mode 100644 index 00000000..5acf7f11 --- /dev/null +++ b/client/menu/settings/settings_root.gd @@ -0,0 +1,36 @@ +# Hurry Curry! - a game about cooking +# 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 +# the Free Software Foundation, version 3 of the License only. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +extends GameSetting +class_name SettingsRoot + +var children: Array +func _init(new_children: Array): + super("root") + children = new_children + for c in children: + c.set_parent(null) + +func _update_row(): + if row == null: row = TabContainer.new() + row.size_flags_vertical = Control.SIZE_EXPAND_FILL + for r in children: + r._update_row() + if r.row.get_parent() != row: + row.add_child(r.row) + +func check(): + for c in children: + c.check() -- cgit v1.2.3-70-g09d2 From 239619be774855b372eea82213b4d8da2d906f52 Mon Sep 17 00:00:00 2001 From: metamuffin Date: Sat, 7 Sep 2024 03:31:25 +0200 Subject: hook changed for rows --- client/global.gd | 2 +- client/menu/settings.gd | 6 +++--- client/menu/settings/dropdown_setting.gd | 16 ++++++---------- client/menu/settings/game_setting.gd | 12 ++++-------- client/menu/settings/preset_row.gd | 2 +- client/menu/settings/range_setting.gd | 8 ++------ client/menu/settings/settings_category.gd | 13 +++++-------- client/menu/settings/settings_root.gd | 8 ++++---- client/menu/settings/text_setting.gd | 11 ++++------- client/menu/settings/toggle_setting.gd | 13 +++++-------- 10 files changed, 35 insertions(+), 56 deletions(-) (limited to 'client/menu/settings/settings_root.gd') diff --git a/client/global.gd b/client/global.gd index e5ae0ed6..e85bf697 100644 --- a/client/global.gd +++ b/client/global.gd @@ -153,7 +153,7 @@ func set_setting(key: String, value): push_error("Tried to set setting \"%s\", which does not yet exist (missing key)" % key) return else: set_setting_unchecked(key, value) - + func get_profile(key: String): if profile.has(key): return profile[key] diff --git a/client/menu/settings.gd b/client/menu/settings.gd index b47331c6..f035f712 100644 --- a/client/menu/settings.gd +++ b/client/menu/settings.gd @@ -20,9 +20,9 @@ extends Menu func _ready(): super() - Global.settings_tree._update_row() - container.add_child(Global.settings_tree.row) - container.move_child(Global.settings_tree.row, 1) + var row = Global.settings_tree.create_row() + container.add_child(row) + container.move_child(row, 1) func _on_back_pressed(): exit() diff --git a/client/menu/settings/dropdown_setting.gd b/client/menu/settings/dropdown_setting.gd index 62162320..8dffce5a 100644 --- a/client/menu/settings/dropdown_setting.gd +++ b/client/menu/settings/dropdown_setting.gd @@ -22,14 +22,10 @@ func _init(new_id: String, new_default, new_options: Array): super(new_id, new_default) options = new_options -func _update_row(): - super() +func create_row(): + var row = super() row.value_node = OptionButton.new() - for i in options: - row.value_node.add_item(tr(nskey + "." + i)) - row.value_node.select(options.find(Global.get_setting(key))) - if not row.value_node.item_selected.is_connected(from_ui): - row.value_node.item_selected.connect(from_ui) - -func from_ui(index): - Global.set_setting(key, options[index]) + 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)))) + row.value_node.item_selected.connect(func(item): Global.set_setting(key, options[item])) + return row diff --git a/client/menu/settings/game_setting.gd b/client/menu/settings/game_setting.gd index 2846cbe3..a98d5abb 100644 --- a/client/menu/settings/game_setting.gd +++ b/client/menu/settings/game_setting.gd @@ -20,8 +20,6 @@ var default var key: String var nskey: String -var row: Node - func _init(new_id: String, new_default = null): default = new_default key = new_id @@ -30,13 +28,11 @@ func set_parent(parent: GameSetting): if parent != null: key = parent.key + "." + key nskey = "c.settings." + key -func _update_row(): - if row == null: row = preload("res://menu/settings/settings_row.tscn").instantiate() +func create_row(): + var row = preload("res://menu/settings/settings_row.tscn").instantiate() row.description = tr(nskey) - if not row.reset.is_connected(reset): row.reset.connect(reset) - -func reset(): - Global.set_setting(key, default) + row.reset.connect(func(): Global.set_setting(key, default)) + return row func check(): if default != null: diff --git a/client/menu/settings/preset_row.gd b/client/menu/settings/preset_row.gd index 7eca0c3c..ab49f0d8 100644 --- a/client/menu/settings/preset_row.gd +++ b/client/menu/settings/preset_row.gd @@ -34,7 +34,7 @@ func apply(preset_name: String): for i in preset.keys(): Global.set_setting(prefix + "." + i, preset[i]) -func _update_row(): +func create_row(): super() if row.value_node == null: row.value_node = HBoxContainer.new() diff --git a/client/menu/settings/range_setting.gd b/client/menu/settings/range_setting.gd index 49db7c21..adc8a28c 100644 --- a/client/menu/settings/range_setting.gd +++ b/client/menu/settings/range_setting.gd @@ -36,9 +36,5 @@ func _update_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)) - row.value_node.value = Global.get_setting(key) - if not row.value_node.value_changed.is_connected(from_ui): - row.value_node.value_changed.connect(from_ui) - -func from_ui(value): - Global.set_setting(key, value) + Settings.hook_change_init(func(value): row.value_node.value = value) + row.value_node.value_changed.connect(func(value): Global.set_setting(key, value)) diff --git a/client/menu/settings/settings_category.gd b/client/menu/settings/settings_category.gd index a80c12c9..4f5fbbc4 100644 --- a/client/menu/settings/settings_category.gd +++ b/client/menu/settings/settings_category.gd @@ -30,20 +30,17 @@ func set_parent(parent: GameSetting): c.set_parent(self) func _update_row(): - if row == null: row = ScrollContainerCustom.new() - if options == null: options = VBoxContainer.new() + var row = ScrollContainerCustom.new() + var options = VBoxContainer.new() row.name = tr(nskey) row.size_flags_horizontal = Control.SIZE_EXPAND_FILL options.size_flags_horizontal = Control.SIZE_EXPAND_FILL - - if options.get_parent() != row: - row.add_child(options) + row.add_child(options) for r in settings: r._update_row() - print(r.row) - if r.row.get_parent() != options: - options.add_child(r.row) + options.add_child(r.row) + return row func check(): for c in settings: diff --git a/client/menu/settings/settings_root.gd b/client/menu/settings/settings_root.gd index 5acf7f11..d7dad1f7 100644 --- a/client/menu/settings/settings_root.gd +++ b/client/menu/settings/settings_root.gd @@ -23,13 +23,13 @@ func _init(new_children: Array): for c in children: c.set_parent(null) -func _update_row(): - if row == null: row = TabContainer.new() +func create_row(): + var row = TabContainer.new() row.size_flags_vertical = Control.SIZE_EXPAND_FILL for r in children: r._update_row() - if r.row.get_parent() != row: - row.add_child(r.row) + row.add_child(r.row) + return row func check(): for c in children: diff --git a/client/menu/settings/text_setting.gd b/client/menu/settings/text_setting.gd index 6fa6b1ef..4cdf746f 100644 --- a/client/menu/settings/text_setting.gd +++ b/client/menu/settings/text_setting.gd @@ -24,12 +24,9 @@ func _init(new_id: String, new_default: String, new_placeholder: String = ""): placeholder = new_placeholder func _update_row(): - super() + var row = super() row.value_node = LineEdit.new() - row.value_node.text = Global.get_setting(key) row.value_node.placeholder_text = placeholder - if not row.value_node.text_changed.is_connected(from_ui): - row.value_node.text_changed.connect(from_ui) - -func from_ui(text): - Global.set_setting(key, text) + 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) + return row diff --git a/client/menu/settings/toggle_setting.gd b/client/menu/settings/toggle_setting.gd index 45f08d9f..c8c40469 100644 --- a/client/menu/settings/toggle_setting.gd +++ b/client/menu/settings/toggle_setting.gd @@ -20,12 +20,9 @@ extends GameSetting func _init(new_id: String, new_default: bool): super(new_id, new_default) -func _update_row(): - super() +func create_row(): + var row = super() row.value_node = CheckButton.new() - row.value_node.button_pressed = Global.get_setting(key) - if not row.value_node.pressed.is_connected(from_ui): - row.value_node.pressed.connect(from_ui) - -func from_ui(): - Global.set_setting(key, row.value_node.button_pressed) + 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) + return row -- 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/settings_root.gd') 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