extends Control @onready var login_window = $LogInWindow @onready var email_input = $LogInWindow/VBoxContainer/EmailInput @onready var password_input = $LogInWindow/VBoxContainer/PasswordInput @onready var players_menu = $ScrollContainer/MarginContainer/VBoxContainer/PlayersMenu @onready var players_selected_container = $ScrollContainer/MarginContainer/VBoxContainer/FlowContainer @onready var container_verde = $ScrollContainer/MarginContainer/VBoxContainer/EasyContainer @onready var container_naranja = $ScrollContainer/MarginContainer/VBoxContainer/MediumContainer @onready var container_rojo = $ScrollContainer/MarginContainer/VBoxContainer/HardContainer @onready var orden_ejercicios_container = $ScrollContainer/MarginContainer/VBoxContainer/FlowContainer2 var all_players = [] var available_players = [] var players_selected = [] var excercises = [ { "name": "Marcha", "level": 0 }, { "name": "Brazos al lado", "level": 0 }, { "name": "Brazos arriba sentado", "level": 0 }, { "name": "Sentar y levantar", "level": 1 }, { "name": "Nadar", "level": 1 }, { "name": "Movimientos laterales", "level": 1 }, { "name": "Moviminetos laterales + puntillas", "level": 1 }, { "name": "Pesa arriba sentado", "level": 2 }, { "name": "Pesa atras sentado", "level": 2 }, { "name": "Pesas doble sentado", "level": 2 } ] var selected_excercises_name = [] func _ready(): RenderingServer.set_default_clear_color("#CCCCCC") await get_tree().process_frame if GameData.id_user == -1: login_window.show() $Blocker.visible = true all_players = await GameData.get_residents_loaded() available_players = all_players.duplicate() _update_menu() players_menu.get_popup().connect("id_pressed", Callable(self, "_on_player_selected")) create_exercise_buttons() 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_window.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 _update_menu(): var popup = players_menu.get_popup() popup.clear() for i in available_players.size(): popup.add_item(available_players[i].nombre, i) func _on_player_selected(index: int): var player = available_players[index] players_selected.append(player) available_players.erase(player) _update_menu() _add_player_visual(player.nombre) func _add_player_visual(name: String): var button = Button.new() button.text = name + " ❌" button.name = name button.pressed.connect(Callable(self, "_remove_player").bind(name)) players_selected_container.add_child(button) func _remove_player(name: String): # Quitar de la vista var button = players_selected_container.get_node(name) if button: players_selected_container.remove_child(button) button.queue_free() # Buscar el jugador por nombre for player in players_selected: if player.nombre == name: players_selected.erase(player) available_players.append(player) break available_players.sort_custom(func(a, b): return a.nombre < b.nombre) _update_menu() func create_exercise_buttons(): for excersice in excercises: var button = Button.new() button.text = excersice.name button.toggle_mode = true button.pressed.connect(_on_excercise_button_pressed.bind(button)) button.custom_minimum_size = Vector2(160, 80) var style = StyleBoxFlat.new() var container = null match excersice.level: 0: style.bg_color = Color(0.3, 0.8, 0.3) # Verde container = container_verde 1: style.bg_color = Color(1, 0.6, 0.2) # Naranja container = container_naranja 2: style.bg_color = Color(1, 0.3, 0.3) # Rojo container = container_rojo button.add_theme_stylebox_override("normal", style) if container: container.add_child(button) func _on_excercise_button_pressed(button): var name = button.text if button.button_pressed: selected_excercises_name.append(name) var visual = Button.new() visual.text = name visual.name = name visual.disabled = true visual.custom_minimum_size = Vector2(160, 80) # Obtener nivel del ejercicio var level = 0 for exc in excercises: if exc.name == name: level = exc.level break visual.add_theme_color_override("font_disabled_color", Color(1, 1, 1)) var style = StyleBoxFlat.new() match level: 0: style.bg_color = Color(0.3, 0.8, 0.3) # Verde 1: style.bg_color = Color(1, 0.6, 0.2) # Naranja 2: style.bg_color = Color(1, 0.3, 0.3) # Rojo visual.add_theme_stylebox_override("disabled", style) orden_ejercicios_container.add_child(visual) else: selected_excercises_name.erase(name) if orden_ejercicios_container.has_node(name): var node = orden_ejercicios_container.get_node(name) orden_ejercicios_container.remove_child(node) node.queue_free() func _on_play_button_pressed(): for child in $Warning/Panel.get_children(): child.queue_free() var warning = Label.new() warning.text = "" warning.add_theme_color_override("font_color","#324f5e") if players_selected.is_empty(): warning.text = " - Debe seleccionar un jugador\n" if selected_excercises_name.is_empty(): warning.text += " - Debe seleccionar un ejercicio" if warning.text != "": $Warning/Panel.add_child(warning) $Warning.popup_centered(Vector2(500, 200)) return var game_scene = preload("res://scenes/game.tscn").instantiate() game_scene.excercises_order = selected_excercises_name var selected_excercises = [] for excercise in excercises: for excercise_selected in selected_excercises_name: if excercise.name == excercise_selected: selected_excercises.append(excercise) for player in players_selected: for excercise in selected_excercises: GameData.start_game(player.id, excercise.level, excercise.name) ScreenManager.change_scene(game_scene, self)