40 lines
1.1 KiB
GDScript
40 lines
1.1 KiB
GDScript
class_name OptionsMenu
|
|
extends Control
|
|
|
|
signal closed
|
|
|
|
# Pour ajouter un réglage : une ligne ici + une entrée dans Settings.DEFAULTS
|
|
var ROWS : Array[Dictionary] = [
|
|
{"label": "Volume général", "key": &"master_volume", "type": SliderRow},
|
|
{"label": "Musique", "key": &"music_volume", "type": SliderRow},
|
|
{"label": "Effets sonores", "key": &"sfx_volume", "type": SliderRow},
|
|
{"label": "Plein écran", "key": &"fullscreen", "type": ToggleRow},
|
|
]
|
|
|
|
@onready var rows : VBoxContainer = %Rows
|
|
@onready var back_button : Button = %Back
|
|
|
|
var _previous_focus : Control
|
|
|
|
func _ready() -> void:
|
|
hide()
|
|
for row in ROWS:
|
|
rows.add_child(row.type.new().setup(row.label, row.key))
|
|
back_button.pressed.connect(close)
|
|
|
|
func open() -> void:
|
|
_previous_focus = get_viewport().gui_get_focus_owner()
|
|
show()
|
|
(rows.get_child(0) as SettingRow).control.grab_focus()
|
|
|
|
func close() -> void:
|
|
Settings.save()
|
|
hide()
|
|
if is_instance_valid(_previous_focus): _previous_focus.grab_focus()
|
|
closed.emit()
|
|
|
|
func _input(event : InputEvent) -> void:
|
|
if visible and event.is_action_pressed("ui_cancel"):
|
|
close()
|
|
get_viewport().set_input_as_handled()
|