Randoloot/scripts/ui/main_menu.gd
2026-10-12 23:35:17 +02:00

66 lines
2.1 KiB
GDScript

extends Control
const SHIP_SELECTION_SCENE := preload("res://scenes/ui/ship_selection.tscn")
const GAME_SCENE := "res://scenes/game/game.tscn"
@onready var start_button: Button = %StartButton
@onready var exit_button: Button = %ExitButton
var _ship_panel: Control
var _panel_open := false
var _launching := false
var _drawer_tween: Tween
func _ready() -> void:
start_button.pressed.connect(_start_game)
exit_button.pressed.connect(_exit_game)
_ship_panel = SHIP_SELECTION_SCENE.instantiate() as Control
_ship_panel.name = "ShipSelectionPanel"
_ship_panel.hide()
add_child(_ship_panel)
_ship_panel.set_anchors_and_offsets_preset(Control.PRESET_TOP_LEFT)
_ship_panel.connect("ship_selected", _launch_game)
_ship_panel.connect("close_requested", _close_ship_panel)
resized.connect(_layout_ship_panel)
_layout_ship_panel()
func _start_game() -> void:
if _panel_open or _launching:
return
if _drawer_tween != null and _drawer_tween.is_running():
_drawer_tween.kill()
_panel_open = true
start_button.disabled = true
_ship_panel.position.x = size.x
_ship_panel.show()
_drawer_tween = create_tween()
_drawer_tween.tween_property(_ship_panel, "position:x", size.x - _ship_panel.size.x, 0.3).set_trans(Tween.TRANS_CUBIC).set_ease(Tween.EASE_OUT)
func _layout_ship_panel() -> void:
if _ship_panel == null:
return
if _drawer_tween != null and _drawer_tween.is_running():
_drawer_tween.kill()
_ship_panel.size = Vector2(minf(820.0, size.x), size.y)
_ship_panel.position = Vector2(size.x - _ship_panel.size.x if _panel_open else size.x, 0)
func _close_ship_panel() -> void:
if not _panel_open or _launching:
return
_panel_open = false
start_button.disabled = false
if _drawer_tween != null and _drawer_tween.is_running():
_drawer_tween.kill()
_drawer_tween = create_tween()
_drawer_tween.tween_property(_ship_panel, "position:x", size.x, 0.2).set_trans(Tween.TRANS_CUBIC).set_ease(Tween.EASE_IN)
_drawer_tween.tween_callback(_ship_panel.hide)
func _launch_game() -> void:
if _launching:
return
_launching = true
GameState.start_new_run()
get_tree().change_scene_to_file(GAME_SCENE)
func _exit_game() -> void:
get_tree().quit()