Files
Super-Mario-Bros.-Remastere…/Scripts/UI/SettingsMenu.gd
2025-09-13 16:30:32 +01:00

88 lines
2.8 KiB
GDScript

extends Control
@onready var current_container: Control = $PanelContainer/MarginContainer/VBoxContainer/Video
@export var containers: Array[Control]
@export var disabled_containers: Array[Control]
var category_select_active := false
var category_index := 0
signal closed
var can_move := true
var active = false
signal opened
func _process(_delta: float) -> void:
category_select_active = current_container.selected_index == -1 and active
%Category.text = tr(current_container.category_name)
%Icon.region_rect.position.x = category_index * 24
for i in [%LeftArrow, %RightArrow]:
i.modulate.a = int(current_container.selected_index == -1)
for i in containers.size():
containers[i].active = category_index == i and active
if SelectableInputOption.rebinding_input == false:
containers[i].can_input = can_move
for i in disabled_containers:
i.active = false
if category_select_active and active and can_move:
handle_inputs()
if Input.is_action_just_pressed("ui_back") and active and current_container.can_input and can_move:
close()
func handle_inputs() -> void:
var direction := 0
if Input.is_action_just_pressed("ui_left"):
category_index -= 1
direction = -1
if Settings.file.audio.extra_sfx == 1:
AudioManager.play_global_sfx("menu_move")
if Input.is_action_just_pressed("ui_right"):
category_index += 1
direction += 1
if Settings.file.audio.extra_sfx == 1:
AudioManager.play_global_sfx("menu_move")
category_index = wrap(category_index, 0, containers.size())
current_container = containers[category_index]
if disabled_containers.has(current_container):
category_index = wrap(category_index + direction, 0, containers.size())
func open_pack_config_menu(pack: ResourcePackContainer) -> void:
$ResourcePackConfigMenu.config_json = pack.config
$ResourcePackConfigMenu.json_path = pack.config_path
$ResourcePackConfigMenu.open()
can_move = false
await $ResourcePackConfigMenu.closed
can_move = true
func open() -> void:
process_mode = Node.PROCESS_MODE_ALWAYS
opened.emit()
update_all_starting()
$PanelContainer/MarginContainer/VBoxContainer/KeyboardControls.selected_index = -1
$PanelContainer/MarginContainer/VBoxContainer/Controller.selected_index = -1
show()
update_minimum_size()
current_container.show()
current_container.active = true
await get_tree().process_frame
active = true
func update_all_starting() -> void:
get_tree().call_group("Options", "update_starting_values")
%Flag.region_rect.position.x = Global.lang_codes.find(TranslationServer.get_locale()) * 16
$PanelContainer/MarginContainer/VBoxContainer/Video/Language.selected_index = Global.lang_codes.find(Settings.file.game.lang)
func close() -> void:
hide()
active = false
closed.emit()
await get_tree().process_frame
Settings.save_settings()
process_mode = Node.PROCESS_MODE_DISABLED