61 lines
1.4 KiB
GDScript
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)
|