AppResidencia/gimnasio/scripts/configuration.gd

206 lines
6.2 KiB
GDScript3
Raw Normal View History

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)