extends Control const OFFLINE_MODE := false # Cambiar a true para pruebas sin API @onready var players_menu = $ScrollContainer/MarginContainer/VBoxContainer/PlayersMenu @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_de_formas_container = $ScrollContainer/MarginContainer/VBoxContainer/FlowContainer @onready var hslider1 = $ScrollContainer/MarginContainer/VBoxContainer/size_slider @onready var hslider2 = $ScrollContainer/MarginContainer/VBoxContainer/width_slider @onready var login_window = $LogInWindow @onready var email_input = $LogInWindow/VBoxContainer/EmailInput @onready var password_input = $LogInWindow/VBoxContainer/PasswordInput var all_players = [] var player_selected = -1 var shapes = [ {"name" : "circulo" , "level" : 1}, {"name" : "linea", "level" : 0}, {"name" : "corazon", "level" : 2}, ] var selected_shapes_name = [] func _ready(): RenderingServer.set_default_clear_color(Color.SKY_BLUE) await get_tree().process_frame var slider_style = StyleBoxFlat.new() slider_style.content_margin_top = 8 slider_style.content_margin_bottom = 8 var grabber_style = StyleBoxFlat.new() grabber_style.content_margin_left = 10 grabber_style.content_margin_right = 10 grabber_style.content_margin_top = 10 grabber_style.content_margin_bottom = 10 hslider1.add_theme_stylebox_override("slider", slider_style) hslider1.add_theme_stylebox_override("grabber", grabber_style) hslider2.add_theme_stylebox_override("slider", slider_style) hslider2.add_theme_stylebox_override("grabber", grabber_style) if GameData.id_user == -1 and not OFFLINE_MODE: login_window.show() $Blocker.visible = true if not OFFLINE_MODE: all_players = await GameData.get_residents_loaded() else: all_players = [] # o usar jugadores de prueba _update_menu() players_menu.get_popup().connect("id_pressed", Callable(self, "_on_player_selected")) create_shapes_buttons() func _on_log_in_button_pressed(): if OFFLINE_MODE: GameData.id_user = 1 login_window.hide() $Blocker.visible = false return 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 all_players.size(): popup.add_item(all_players[i].nombre, i) func _on_player_selected(index: int): if OFFLINE_MODE: player_selected = 1 return var player = all_players[index] player_selected = player.id func create_shapes_buttons(): for shape in shapes: var button = Button.new() button.text = shape.name button.toggle_mode = true button.pressed.connect(_on_shape_button_pressed.bind(button)) button.custom_minimum_size = Vector2(160, 80) var style = StyleBoxFlat.new() var container = null match shape.level: 0: style.bg_color = Color(0.3, 0.8, 0.3) container = container_verde 1: style.bg_color = Color(1, 0.6, 0.2) container = container_naranja 2: style.bg_color = Color(1, 0.3, 0.3) container = container_rojo button.add_theme_stylebox_override("normal", style) if container: container.add_child(button) func _on_shape_button_pressed(button): var name = button.text if button.button_pressed: selected_shapes_name.append(name) var visual = Button.new() visual.text = name visual.name = name visual.disabled = true visual.custom_minimum_size = Vector2(160, 80) var level = 0 for shape in shapes: if shape.name == name: level = shape.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) 1: style.bg_color = Color(1, 0.6, 0.2) 2: style.bg_color = Color(1, 0.3, 0.3) visual.add_theme_stylebox_override("disabled", style) orden_de_formas_container.add_child(visual) else: selected_shapes_name.erase(name) if orden_de_formas_container.has_node(name): var node = orden_de_formas_container.get_node(name) orden_de_formas_container.remove_child(node) node.queue_free() func _on_play_button_pressed(): var bg_color = $ScrollContainer/MarginContainer/VBoxContainer/bg_color_picker.color var line_color = $ScrollContainer/MarginContainer/VBoxContainer/line_color_picker.color var radius = $ScrollContainer/MarginContainer/VBoxContainer/size_slider.value var width = $ScrollContainer/MarginContainer/VBoxContainer/width_slider.value 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 player_selected == -1: warning.text = " - Debe seleccionar un jugador\n" if selected_shapes_name.is_empty(): warning.text += " - Debe seleccionar una forma" 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.line_width = width game_scene.shape_scale = radius game_scene.line_color = line_color game_scene.bg_color = bg_color game_scene.shape_order = selected_shapes_name var selected_shapes = [] for shape in shapes: for shape_selected in selected_shapes_name: if shape.name == shape_selected: selected_shapes.append(shape) for shape in selected_shapes: GameData.start_game(player_selected, shape.level, shape.name) ScreenManager.change_scene(game_scene, self)