AppResidencia/juegos/scripts/bingo_auditivo/configuration_bingo.gd

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