128 lines
3.6 KiB
GDScript
128 lines
3.6 KiB
GDScript
extends Window
|
|
|
|
var current_scene
|
|
|
|
@onready var players_menu = $MarginContainer/VBoxContainer/MenuButton
|
|
@onready var seleccionados_container = $MarginContainer/VBoxContainer/FlowContainer
|
|
@onready var warning_label = $MarginContainer/VBoxContainer/FlowContainer/WarningLabel
|
|
@onready var play_button = $MarginContainer/VBoxContainer/PlayButton
|
|
|
|
var residents = []
|
|
var todos_los_jugadores = []
|
|
var jugadores_disponibles = []
|
|
var jugadores_seleccionados = []
|
|
|
|
func _ready():
|
|
while residents.is_empty():
|
|
await get_tree().process_frame
|
|
|
|
_load_residents()
|
|
|
|
warning_label.visible = true
|
|
players_menu.get_popup().connect("id_pressed", Callable(self, "_on_jugador_seleccionado"))
|
|
|
|
func _load_residents() -> void:
|
|
todos_los_jugadores = residents.duplicate()
|
|
jugadores_disponibles = todos_los_jugadores.duplicate()
|
|
_actualizar_menu()
|
|
|
|
func _actualizar_menu():
|
|
var popup = players_menu.get_popup()
|
|
popup.clear()
|
|
for player in jugadores_disponibles:
|
|
var full_name = "%s %s" % [player.nombre, player.apellido]
|
|
popup.add_item(full_name, player.id)
|
|
|
|
func _on_jugador_seleccionado(id: int):
|
|
var player = null
|
|
for p in jugadores_disponibles:
|
|
if int(p.id) == id:
|
|
player = p
|
|
break
|
|
|
|
if player == null:
|
|
print("No se encontró el jugador con ID: ", id)
|
|
return
|
|
|
|
jugadores_seleccionados.append(player)
|
|
jugadores_disponibles.erase(player)
|
|
_actualizar_menu()
|
|
|
|
var player_full_name = player.nombre + " " + player.apellido
|
|
_agregar_jugador_visual(player_full_name, player.id)
|
|
|
|
if warning_label.visible:
|
|
warning_label.visible = false
|
|
|
|
|
|
func _agregar_jugador_visual(nombre: String, id: int):
|
|
var boton = Button.new()
|
|
boton.text = nombre + " ❌"
|
|
boton.name = str(id)
|
|
boton.pressed.connect(Callable(self, "_quitar_jugador").bind(id))
|
|
seleccionados_container.add_child(boton)
|
|
|
|
func _quitar_jugador(id: int):
|
|
# Eliminar botón visual de seleccionados
|
|
print(seleccionados_container.get_node(str(id)))
|
|
if seleccionados_container.has_node(str(id)):
|
|
var button = seleccionados_container.get_node(str(id))
|
|
seleccionados_container.remove_child(button)
|
|
button.queue_free()
|
|
|
|
# Mover jugador de seleccionados a disponibles
|
|
for player in jugadores_seleccionados:
|
|
if int(player.id) == id:
|
|
jugadores_seleccionados.erase(player)
|
|
jugadores_disponibles.append(player)
|
|
break
|
|
|
|
# Reordenar y actualizar menú
|
|
jugadores_disponibles.sort_custom(func(a, b): return a.nombre < b.nombre)
|
|
_actualizar_menu()
|
|
|
|
if jugadores_seleccionados.is_empty():
|
|
warning_label.visible = true
|
|
|
|
|
|
func _on_play_button_pressed():
|
|
var error_style = StyleBoxFlat.new()
|
|
error_style.bg_color = Color(1, 0.8, 0.8)
|
|
var normal_style = StyleBoxFlat.new()
|
|
normal_style.bg_color = Color("#96a7af")
|
|
var has_error := false
|
|
|
|
# Validar jugadores
|
|
if jugadores_seleccionados.is_empty():
|
|
warning_label.add_theme_color_override("font_color", Color(1, 0.8, 0.8))
|
|
has_error = true
|
|
else:
|
|
warning_label.add_theme_color_override("font_color", Color("#96a7af"))
|
|
|
|
if has_error:
|
|
return
|
|
|
|
|
|
var game_scene = preload("res://scenes/bingo_auditivo/GameBingo.tscn").instantiate()
|
|
game_scene.jugadores_seleccionados = jugadores_seleccionados
|
|
|
|
var blocker = get_parent().get_node("Blocker")
|
|
blocker.visible = false
|
|
self.hide()
|
|
SceneManager.change_scene(game_scene, current_scene)
|
|
|
|
func _on_close_button_pressed() -> void:
|
|
self.hide()
|
|
var blocker = get_parent().get_node("Blocker")
|
|
blocker.visible = false
|
|
|
|
func default_config():
|
|
jugadores_seleccionados.clear()
|
|
_load_residents()
|
|
|
|
for child in seleccionados_container.get_children():
|
|
if child is Button:
|
|
seleccionados_container.remove_child(child)
|
|
child.queue_free()
|
|
warning_label.add_theme_color_override("font_color", Color("#96a7af"))
|