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()