121 lines
3.6 KiB
GDScript
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()
|