AppResidencia/juegos/scripts/gimnasio/configuration_gym.gd

246 lines
7.3 KiB
GDScript3
Raw Normal View History

extends Window
var current_scene
@onready var players_menu = $MarginContainer/ScrollContainer/MarginContainer/VBoxContainer/PlayersMenu
@onready var players_selected_container = $MarginContainer/ScrollContainer/MarginContainer/VBoxContainer/FlowContainer
@onready var warning_label = $MarginContainer/ScrollContainer/MarginContainer/VBoxContainer/FlowContainer/WarningLabel
@onready var container_verde = $MarginContainer/ScrollContainer/MarginContainer/VBoxContainer/EasyContainer
@onready var container_naranja = $MarginContainer/ScrollContainer/MarginContainer/VBoxContainer/MediumContainer
@onready var container_rojo = $MarginContainer/ScrollContainer/MarginContainer/VBoxContainer/HardContainer
@onready var orden_ejercicios_container = $MarginContainer/ScrollContainer/MarginContainer/VBoxContainer/FlowContainer2
@onready var ejercicios_warning_label = $MarginContainer/ScrollContainer/MarginContainer/VBoxContainer/FlowContainer2/ExcercisesWarningLabel
var residents = []
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():
while residents.is_empty():
await get_tree().process_frame
_load_residents()
warning_label.visible = true
ejercicios_warning_label.visible = true
players_menu.get_popup().connect("id_pressed", Callable(self, "_on_player_selected"))
create_exercise_buttons()
func _load_residents() -> void:
all_players = residents.duplicate()
available_players = all_players.duplicate()
_update_menu()
func _update_menu():
var popup = players_menu.get_popup()
popup.clear()
for player in available_players:
var full_name = "%s %s" % [player.nombre, player.apellido]
popup.add_item(full_name, player.id)
func _on_player_selected(id: int):
var player = null
for p in available_players:
if int(p.id) == id:
player = p
break
if player == null:
print("No se encontró el jugador con ID: ", id)
return
players_selected.append(player)
available_players.erase(player)
_update_menu()
var player_full_name = player.nombre + " " + player.apellido
_add_player_visual(player_full_name, player.id)
if warning_label.visible:
warning_label.visible = false
func _add_player_visual(name: String, id: int):
var button = Button.new()
button.text = name + ""
button.name = str(id)
button.pressed.connect(Callable(self, "_remove_player").bind(id))
players_selected_container.add_child(button)
func _remove_player(id: int):
# Eliminar botón visual
if players_selected_container.has_node(str(id)):
var button = players_selected_container.get_node(str(id))
players_selected_container.remove_child(button)
button.queue_free()
# Buscar jugador por ID
for player in players_selected:
if int(player.id) == id:
players_selected.erase(player)
available_players.append(player)
break
# Reordenar y actualizar menú
available_players.sort_custom(func(a, b): return a.nombre < b.nombre)
_update_menu()
if players_selected.is_empty():
warning_label.visible = true
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)
if ejercicios_warning_label.visible:
ejercicios_warning_label.visible = false
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()
if selected_excercises_name.is_empty():
ejercicios_warning_label.visible = true
func _on_play_button_pressed():
var error_style = StyleBoxFlat.new()
error_style.bg_color = Color(1, 0.8, 0.8)
var normal_style = StyleBoxFlat.new()
normal_style.bg_color = Color("#96a7af")
var has_error := false
# Validar jugadores
if players_selected.is_empty():
warning_label.add_theme_color_override("font_color", Color(1, 0.8, 0.8))
has_error = true
else:
warning_label.add_theme_color_override("font_color", Color("#96a7af"))
if selected_excercises_name.is_empty():
ejercicios_warning_label.add_theme_color_override("font_color", Color(1, 0.8, 0.8))
has_error = true
else:
ejercicios_warning_label.add_theme_color_override("font_color", Color("#96a7af"))
if has_error:
return
var game_scene = preload("res://scenes/gimnasio/GameGym.tscn").instantiate()
game_scene.excercises_order = selected_excercises_name
game_scene.players_selected = players_selected
var blocker = get_parent().get_node("Blocker")
blocker.visible = false
self.hide()
SceneManager.change_scene(game_scene, current_scene)
func _on_close_button_pressed() -> void:
self.hide()
var blocker = get_parent().get_node("Blocker")
blocker.visible = false
func default_config():
players_selected.clear()
selected_excercises_name.clear()
_load_residents()
for child in players_selected_container.get_children():
if child is Button:
players_selected_container.remove_child(child)
child.queue_free()
# Limpiar botones visuales de ejercicios seleccionados
for child in orden_ejercicios_container.get_children():
if child is Button:
orden_ejercicios_container.remove_child(child)
child.queue_free()
warning_label.visible = true
ejercicios_warning_label.visible = true
warning_label.add_theme_color_override("font_color", Color("#96a7af"))
ejercicios_warning_label.add_theme_color_override("font_color", Color("#96a7af"))
for container in [container_verde, container_naranja, container_rojo]:
for button in container.get_children():
if button is Button:
button.button_pressed = false