Refactor Godot architecture into AppShell, modular menus and game domains

This commit is contained in:
enne2
2026-09-06 17:07:05 +02:00
parent a73fb4b55f
commit f4a9da6bc3
209 changed files with 2726 additions and 2072 deletions
@@ -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)