extends Control @onready var login_popup = $Window @onready var email_input = $Window/VBoxContainer/EmailInput @onready var password_input = $Window/VBoxContainer/PasswordInput @onready var menu_button: MenuButton = $ScrollContainer/MarginContainer/VBoxContainer/MenuButton @onready var seleccionados_container: FlowContainer = $ScrollContainer/MarginContainer/VBoxContainer/FlowContainer @onready var warning_label: Label = $ScrollContainer/MarginContainer/VBoxContainer/FlowContainer/WarningLabel @onready var seconds_input: LineEdit = $ScrollContainer/MarginContainer/VBoxContainer/Seconds @onready var button_2_directions = $ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer/Button2Directions @onready var button_4_directions = $ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer/Button4Directions @onready var button_8_directions = $ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer/Button8Directions @onready var repeats_per_direction_input = $ScrollContainer/MarginContainer/VBoxContainer/RepeatsPerDirection @onready var bg_color_picker: ColorPickerButton = $ScrollContainer/MarginContainer/VBoxContainer/BackgroundColorPickerButton @onready var arrow_color_picker: ColorPickerButton = $ScrollContainer/MarginContainer/VBoxContainer/ArrowColorPickerButton var todos_los_jugadores = [] var jugadores_disponibles = [] var jugadores_seleccionados = [] var directions = 0 var level = -1 func _ready(): RenderingServer.set_default_clear_color("#CCCCCC") await get_tree().process_frame # Esperar a que todo esté listo if GameData.id_user == -1: login_popup.show() $Blocker.visible = true todos_los_jugadores = await GameData.get_residents_loaded() jugadores_disponibles = todos_los_jugadores.duplicate() _actualizar_menu() # Conectar señal de selección menu_button.get_popup().connect("id_pressed", Callable(self, "_on_jugador_seleccionado")) button_2_directions.pressed.connect(Callable(self, "_on_directions_pressed").bind(button_2_directions)) button_4_directions.pressed.connect(Callable(self, "_on_directions_pressed").bind(button_4_directions)) button_8_directions.pressed.connect(Callable(self, "_on_directions_pressed").bind(button_8_directions)) 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() $Blocker.visible = false break if GameData.id_user == -1: email_input.clear() password_input.clear() var stylebox_email = email_input.get_theme_stylebox("normal") as StyleBoxFlat var stylebox_password = password_input.get_theme_stylebox("normal") as StyleBoxFlat if stylebox_email and stylebox_password: stylebox_email.bg_color = Color(1, 0.8, 0.8) stylebox_password.bg_color = Color(1, 0.8, 0.8) func _actualizar_menu(): var popup = menu_button.get_popup() popup.clear() for i in jugadores_disponibles.size(): var full_name = jugadores_disponibles[i].nombre + " " + jugadores_disponibles[i].apellido popup.add_item(full_name, i) func _on_jugador_seleccionado(index: int): var jugador = jugadores_disponibles[index] jugadores_seleccionados.append(jugador) jugadores_disponibles.erase(jugador) _actualizar_menu() var jugador_full_name = jugador.nombre + " " + jugador.apellido _agregar_jugador_visual(jugador_full_name) if warning_label.visible: warning_label.visible = false 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.split(" ")[0]: jugadores_seleccionados.erase(jugador) jugadores_disponibles.append(jugador) break 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_directions_pressed(button : Button): # Desmarcar todos los botones button_2_directions.button_pressed = false button_4_directions.button_pressed = false button_8_directions.button_pressed = false # Marcar el botón seleccionado button.button_pressed = true # Actualizar el valor de directions match button: button_2_directions: directions = 2 level = 0 button_4_directions: directions = 4 level = 1 button_8_directions: directions = 8 level = 2 func _on_play_button_pressed(): for child in $Warning/Panel.get_children(): $Warning/Panel.remove_child(child) child.queue_free() var warning_text = Label.new() warning_text.text = "" if jugadores_seleccionados.is_empty() : warning_text.text = " - Debe seleccionar al menos un jugador\n" if seconds_input.text.is_empty(): warning_text.text += " - Debe insertar un numero de segundos\n" if directions == 0: warning_text.text += " - Debe selecionar las direcciones\n" if repeats_per_direction_input.text.is_empty(): warning_text.text += " - Debe insertar numero de objetos por direccion" if warning_text.text != "": warning_text.add_theme_color_override("font_color", Color("#324f5e")) $Warning/Panel.add_child(warning_text) $Warning.popup_centered(Vector2(500, 200)) return var game_scene = preload("res://scenes/game.tscn").instantiate() game_scene.bg_color = bg_color_picker.color game_scene.arrow_color = arrow_color_picker.color game_scene.interval = int(seconds_input.text) game_scene.direction_count = directions game_scene.max_repeats_per_direction = repeats_per_direction_input.text game_scene.selected_players = jugadores_seleccionados for jugador in jugadores_seleccionados: GameData.start_game(int(jugador.id), level) ScreenManager.change_scene(game_scene, self)