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

121 lines
3.6 KiB
GDScript

extends CanvasLayer
## Configurazione in-game; la definizione delle righe è in OptionsSchema.
var rows: Dictionary = {}
var mode_option: OptionButton
var gentle_button: CheckButton
func _ready() -> void:
process_mode = Node.PROCESS_MODE_ALWAYS
visible = false
_build()
func _build() -> void:
var dim := ColorRect.new()
dim.color = Color(0, 0, 0, 0.65)
dim.set_anchors_preset(Control.PRESET_FULL_RECT)
dim.mouse_filter = Control.MOUSE_FILTER_STOP
add_child(dim)
var center := CenterContainer.new()
center.set_anchors_preset(Control.PRESET_FULL_RECT)
add_child(center)
var panel := PanelContainer.new()
center.add_child(panel)
var margin := MarginContainer.new()
margin.add_theme_constant_override("margin_left", 24)
margin.add_theme_constant_override("margin_right", 24)
margin.add_theme_constant_override("margin_top", 16)
margin.add_theme_constant_override("margin_bottom", 16)
panel.add_child(margin)
var content := VBoxContainer.new()
content.add_theme_constant_override("separation", 8)
margin.add_child(content)
_add_title(content)
_add_settings_rows(content)
_add_mode_controls(content)
_add_actions(content)
func _add_title(parent: VBoxContainer) -> void:
var title := Label.new()
title.text = "CONFIGURAZIONE"
title.add_theme_font_size_override("font_size", 30)
title.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER
parent.add_child(title)
func _add_settings_rows(parent: VBoxContainer) -> void:
for entry in JuggleBoardOptionsSchema.ENTRIES:
var row := OptionSliderRow.new()
row.setup(entry[0], entry[1], entry[2], entry[3], entry[4], Settings.get(entry[0]))
row.setting_changed.connect(func(key: String, value: float): Settings.set(key, value))
parent.add_child(row)
rows[entry[0]] = row
func _add_mode_controls(parent: VBoxContainer) -> void:
parent.add_child(HSeparator.new())
var row := HBoxContainer.new()
row.custom_minimum_size.y = 44
row.alignment = BoxContainer.ALIGNMENT_CENTER
parent.add_child(row)
var label := Label.new()
label.text = "Modalità di gioco:"
label.custom_minimum_size.x = 230
label.add_theme_font_size_override("font_size", 18)
row.add_child(label)
mode_option = OptionButton.new()
mode_option.custom_minimum_size = Vector2(300, 40)
mode_option.add_theme_font_size_override("font_size", 17)
mode_option.add_item("Classica (a punteggio)")
mode_option.add_item("Zen (senza tempo)")
mode_option.add_item("Survival (a vite)")
mode_option.item_selected.connect(func(index: int): Settings.game_mode = index)
row.add_child(mode_option)
gentle_button = CheckButton.new()
gentle_button.text = "Errori gentili (combo -1)"
gentle_button.toggled.connect(func(enabled: bool): Settings.gentle_errors = enabled)
parent.add_child(gentle_button)
func _add_actions(parent: VBoxContainer) -> void:
var row := HBoxContainer.new()
row.add_theme_constant_override("separation", 8)
parent.add_child(row)
for spec in [["Salva e riavvia", _on_save], ["Ripristina default", _on_reset], ["Annulla", hide_menu]]:
var button := Button.new()
button.text = spec[0]
button.pressed.connect(spec[1])
row.add_child(button)
func show_menu() -> void:
_refresh_values()
visible = true
get_tree().paused = true
func hide_menu() -> void:
visible = false
get_tree().paused = false
func _refresh_values() -> void:
for key in rows:
rows[key].set_value(Settings.get(key))
mode_option.select(Settings.game_mode)
gentle_button.button_pressed = Settings.gentle_errors
func _on_save() -> void:
Settings.save_settings()
hide_menu()
get_tree().call_deferred("reload_current_scene")
func _on_reset() -> void:
Settings.reset_defaults()
_refresh_values()