206 lines
6.2 KiB
GDScript
206 lines
6.2 KiB
GDScript
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)
|