Files
autgame/games/juggleboard/scripts/ui/option_slider_row.gd
T

61 lines
1.4 KiB
GDScript

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)