211 lines
6.1 KiB
GDScript
211 lines
6.1 KiB
GDScript
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)
|