programovani-kostky/player_select/player_select.gd
2024-05-20 13:20:24 +02:00

59 lines
1.8 KiB
GDScript

extends Control
@onready var selector: Control = $SelectorContainer
@onready var p1 = $Players/Player1
@onready var p2 = $Players/Player2
@onready var p3 = $Players/Player3
@onready var p4 = $Players/Player4
@onready var p5 = $Players/Player5
@onready var start_button: Button = $StartButton
@onready var start_disabled_info: Label = $StartDisabledInfo
var players: Array[VBoxContainer]
var player_names: Array[String] = ["", "", "", "", ""]
var player_ready := false
signal start_game
signal back_to_menu
var tween: Tween
func _ready() -> void:
players = [p1, p2, p3, p4, p5]
get_viewport().connect("gui_focus_changed", _on_focus_changed)
for player in players:
var line_edit: LineEdit = player.get_node("LineEdit")
line_edit.connect("text_changed", _on_text_changed)
func recheck_names() -> void:
var non_empty_player_names = 0
for pname in player_names:
if pname != "":
non_empty_player_names += 1
player_ready = non_empty_player_names >= 2
start_disabled_info.visible = !player_ready
start_button.disabled = !player_ready
func _on_start_button_pressed() -> void:
start_game.emit()
func _on_focus_changed(focus: Control) -> void:
if focus is LineEdit:
var parent: VBoxContainer = focus.get_parent()
if parent is VBoxContainer:
selector.visible = true
if tween:
tween.kill()
tween = get_tree().create_tween().bind_node(self).set_trans(Tween.TRANS_ELASTIC)
tween.tween_property(selector, "global_position:x", parent.global_position.x + parent.size.x/2 - selector.size.x/2, .6)
return
selector.visible = false
func _on_text_changed(_text: String) -> void:
for i in players.size():
player_names[i] = players[i].get_node("LineEdit").text
recheck_names()
func _on_texture_rect_gui_input(event: InputEvent) -> void:
if event is InputEventMouse:
if event.is_pressed():
back_to_menu.emit()