Refactor Godot architecture into AppShell, modular menus and game domains
This commit is contained in:
@@ -0,0 +1,60 @@
|
||||
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)
|
||||
Reference in New Issue
Block a user