class_name OptionSliderRow extends HBoxContainer ## Riga riutilizzabile Label + Slider + SpinBox. signal setting_changed(key: String, value: float) var setting_key := "" var slider: HSlider var spin: SpinBox var _syncing := false func setup(key: String, label_text: String, minimum: float, maximum: float, step: float, value: float) -> void: setting_key = key add_theme_constant_override("separation", 6) var label := Label.new() label.text = label_text label.custom_minimum_size.x = 230 add_child(label) slider = HSlider.new() slider.min_value = minimum slider.max_value = maximum slider.step = step slider.custom_minimum_size = Vector2(260, 40) slider.value = value add_child(slider) spin = SpinBox.new() spin.min_value = minimum spin.max_value = maximum spin.step = step spin.custom_minimum_size.x = 90 spin.value = value add_child(spin) slider.value_changed.connect(_on_slider_changed) spin.value_changed.connect(_on_spin_changed) func set_value(value: float) -> void: _syncing = true slider.value = value spin.value = value _syncing = false func _on_slider_changed(value: float) -> void: if _syncing: return _syncing = true spin.value = value _syncing = false setting_changed.emit(setting_key, value) func _on_spin_changed(value: float) -> void: if _syncing: return _syncing = true slider.value = value _syncing = false setting_changed.emit(setting_key, value)