AppResidencia/bingo-auditivo/scripts/configuration.gd

92 lines
2.8 KiB
GDScript

extends Control
@onready var login_popup = $Window
@onready var email_input = $Window/VBoxContainer/EmailInput
@onready var password_input = $Window/VBoxContainer/PasswordInput
@onready var players_menu = $VBoxContainer/MenuButton
@onready var seleccionados_container = $VBoxContainer/FlowContainer
@onready var play_button = $VBoxContainer/PlayButton
var todos_los_jugadores = []
var jugadores_disponibles = []
var jugadores_seleccionados = []
func _ready():
await get_tree().process_frame # Esperar a que todo esté listo
if GameData.id_user == -1:
login_popup.show()
$Bloqueador.visible = true
todos_los_jugadores = await GameData.get_residents_loaded()
jugadores_disponibles = todos_los_jugadores.duplicate()
_actualizar_menu()
players_menu.get_popup().connect("id_pressed", Callable(self, "_on_jugador_seleccionado"))
func _on_log_in_button_pressed():
var users = await GameData.get_users_loaded()
var username = email_input.text.strip_edges()
var password = password_input.text.strip_edges()
for user in users:
if user.email == username:
GameData.id_user = int(user.id)
login_popup.hide()
$Bloqueador.visible = false
break
if GameData.id_user == -1:
email_input.clear()
password_input.clear()
# Color rojo en el borde o texto
email_input.add_theme_color_override("font_color", Color.RED)
password_input.add_theme_color_override("font_color", Color.RED)
func _actualizar_menu():
var popup = players_menu.get_popup()
popup.clear()
for i in jugadores_disponibles.size():
popup.add_item(jugadores_disponibles[i].nombre, i)
func _on_jugador_seleccionado(index: int):
var jugador = jugadores_disponibles[index]
jugadores_seleccionados.append(jugador)
jugadores_disponibles.erase(jugador)
_actualizar_menu()
_agregar_jugador_visual(jugador.nombre)
func _agregar_jugador_visual(nombre: String):
var boton = Button.new()
boton.text = nombre + ""
boton.name = nombre
boton.pressed.connect(Callable(self, "_quitar_jugador").bind(nombre))
seleccionados_container.add_child(boton)
func _quitar_jugador(nombre: String):
# Quitar de la vista
var boton = seleccionados_container.get_node(nombre)
if boton:
seleccionados_container.remove_child(boton)
boton.queue_free()
# Buscar el jugador por nombre
for jugador in jugadores_seleccionados:
if jugador.nombre == nombre:
jugadores_seleccionados.erase(jugador)
jugadores_disponibles.append(jugador)
break
jugadores_disponibles.sort_custom(func(a, b): return a.nombre < b.nombre)
_actualizar_menu()
func _on_play_button_pressed():
var game_scene = preload("res://scenes/game.tscn").instantiate()
#Validar que selecciona almenos un jugador, sino mostrar popup informando
game_scene.jugadores_seleccionados = jugadores_seleccionados
for jugador in jugadores_seleccionados:
GameData.start_game(jugador.id, null)
ScreenManager.change_scene(game_scene, self)