Conexion de juegos con la api, validaciones, diseño de los juegos

This commit is contained in:
Andrés Moran 2025-04-17 02:00:16 +02:00
parent b6f2a0f9af
commit bdd2203bcb
170 changed files with 4163 additions and 589 deletions

View File

@ -0,0 +1,4 @@
root = true
[*]
charset = utf-8

View File

@ -0,0 +1 @@

View File

@ -0,0 +1,3 @@
[folding]
sections_unfolded=PackedStringArray()

View File

@ -0,0 +1,3 @@
[folding]
sections_unfolded=PackedStringArray()

View File

@ -0,0 +1,3 @@
[folding]
sections_unfolded=PackedStringArray()

View File

@ -0,0 +1,195 @@
[editor_states]
Anim={
"visible": false
}
2D={
"grid_offset": Vector2(0, 0),
"grid_snap_active": false,
"grid_step": Vector2(8, 8),
"grid_visibility": 1,
"ofs": Vector2(-852.9, -156.826),
"primary_grid_step": Vector2i(8, 8),
"show_group_gizmos": true,
"show_guides": true,
"show_helpers": false,
"show_lock_gizmos": true,
"show_origin": true,
"show_position_gizmos": true,
"show_rulers": true,
"show_transformation_gizmos": true,
"show_viewport": true,
"show_zoom_control": true,
"smart_snap_active": false,
"snap_guides": true,
"snap_node_anchors": true,
"snap_node_center": true,
"snap_node_parent": true,
"snap_node_sides": true,
"snap_other_nodes": true,
"snap_pixel": true,
"snap_relative": false,
"snap_rotation": false,
"snap_rotation_offset": 0.0,
"snap_rotation_step": 0.261799,
"snap_scale": false,
"snap_scale_step": 0.1,
"zoom": 0.424098
}
3D={
"fov": 70.01,
"gizmos_status": {
"AudioListener3D": 0,
"AudioStreamPlayer3D": 0,
"CPUParticles3D": 0,
"CSGShape3D": 0,
"Camera3D": 0,
"CollisionObject3D": 0,
"CollisionPolygon3D": 0,
"CollisionShape3D": 0,
"Decal": 0,
"FogVolume": 0,
"GPUParticles3D": 0,
"GPUParticlesCollision3D": 0,
"Joint3D": 0,
"Light3D": 0,
"LightmapGI": 0,
"LightmapProbe": 0,
"Marker3D": 0,
"MeshInstance3DCustomAABB": 0,
"NavigationLink3D": 0,
"NavigationObstacle3D": 0,
"NavigationRegion3D": 0,
"OccluderInstance3D": 0,
"Particles3DEmissionShape": 0,
"Path3D": 0,
"PhysicalBone3D": 0,
"RayCast3D": 0,
"ReflectionProbe": 0,
"ShapeCast3D": 0,
"Skeleton3D": 0,
"SoftBody3D": 0,
"SpringArm3D": 0,
"SpringBoneCollision3D": 0,
"SpringBoneSimulator3D": 0,
"VehicleWheel3D": 0,
"VisibleOnScreenNotifier3D": 0,
"VoxelGI": 0
},
"local_coords": false,
"preview_sun_env": {
"environ_ao_enabled": false,
"environ_enabled": true,
"environ_energy": 1.0,
"environ_gi_enabled": false,
"environ_glow_enabled": false,
"environ_ground_color": Color(0.2, 0.169, 0.133, 1),
"environ_sky_color": Color(0.385, 0.454, 0.55, 1),
"environ_tonemap_enabled": true,
"sun_color": Color(1, 1, 1, 1),
"sun_enabled": true,
"sun_energy": 1.0,
"sun_max_distance": 100.0,
"sun_rotation": Vector2(-1.0472, 2.61799)
},
"rotate_snap": 15.0,
"scale_snap": 10.0,
"show_grid": true,
"show_origin": true,
"snap_enabled": false,
"translate_snap": 1.0,
"viewport_mode": 1,
"viewports": [{
"auto_orthogonal": false,
"auto_orthogonal_enabled": true,
"cinematic_preview": false,
"display_mode": 22,
"distance": 4.0,
"doppler": false,
"frame_time": false,
"gizmos": true,
"grid": true,
"half_res": false,
"information": false,
"listener": true,
"lock_rotation": false,
"orthogonal": false,
"position": Vector3(0, 0, 0),
"transform_gizmo": true,
"use_environment": false,
"view_type": 0,
"x_rotation": 0.5,
"y_rotation": -0.5
}, {
"auto_orthogonal": false,
"auto_orthogonal_enabled": true,
"cinematic_preview": false,
"display_mode": 22,
"distance": 4.0,
"doppler": false,
"frame_time": false,
"gizmos": true,
"grid": true,
"half_res": false,
"information": false,
"listener": false,
"lock_rotation": false,
"orthogonal": false,
"position": Vector3(0, 0, 0),
"transform_gizmo": true,
"use_environment": false,
"view_type": 0,
"x_rotation": 0.5,
"y_rotation": -0.5
}, {
"auto_orthogonal": false,
"auto_orthogonal_enabled": true,
"cinematic_preview": false,
"display_mode": 22,
"distance": 4.0,
"doppler": false,
"frame_time": false,
"gizmos": true,
"grid": true,
"half_res": false,
"information": false,
"listener": false,
"lock_rotation": false,
"orthogonal": false,
"position": Vector3(0, 0, 0),
"transform_gizmo": true,
"use_environment": false,
"view_type": 0,
"x_rotation": 0.5,
"y_rotation": -0.5
}, {
"auto_orthogonal": false,
"auto_orthogonal_enabled": true,
"cinematic_preview": false,
"display_mode": 22,
"distance": 4.0,
"doppler": false,
"frame_time": false,
"gizmos": true,
"grid": true,
"half_res": false,
"information": false,
"listener": false,
"lock_rotation": false,
"orthogonal": false,
"position": Vector3(0, 0, 0),
"transform_gizmo": true,
"use_environment": false,
"view_type": 0,
"x_rotation": 0.5,
"y_rotation": -0.5
}],
"zfar": 4000.01,
"znear": 0.05
}
Game={
"camera_override_mode": 2,
"hide_selection": false,
"select_mode": 0
}
selected_nodes=Array[NodePath]([NodePath("/root/@EditorNode@21272/@Panel@14/@VBoxContainer@15/DockHSplitLeftL/DockHSplitLeftR/DockHSplitMain/@VBoxContainer@26/DockVSplitCenter/@VSplitContainer@54/@VBoxContainer@55/@EditorMainScreen@102/MainScreen/@CanvasItemEditor@11482/@VSplitContainer@11134/@HSplitContainer@11136/@HSplitContainer@11138/@Control@11139/@SubViewportContainer@11140/@SubViewport@11141/Game")])

View File

@ -0,0 +1,5 @@
[folding]
node_unfolds=[NodePath("Window/ColorRect"), PackedStringArray("Layout"), NodePath("Window/VBoxContainer"), PackedStringArray("Layout", "Theme Overrides", "Theme Overrides/constants", "Layout/Transform"), NodePath("Window/VBoxContainer/Label"), PackedStringArray("Layout", "Layout/Container Sizing", "Theme Overrides", "Theme Overrides/colors"), NodePath("Window/VBoxContainer/EmailInput"), PackedStringArray("Layout", "Layout/Container Sizing", "Theme Overrides", "Theme Overrides/styles", "theme_override_styles/normal"), NodePath("Window/VBoxContainer/Label2"), PackedStringArray("Layout", "Layout/Container Sizing", "Theme Overrides", "Theme Overrides/colors"), NodePath("Window/VBoxContainer/PasswordInput"), PackedStringArray("Layout", "Layout/Container Sizing", "Theme Overrides", "Theme Overrides/styles", "theme_override_styles/normal"), NodePath("Window/VBoxContainer/LogInButton"), PackedStringArray("Layout", "Layout/Container Sizing", "Theme Overrides", "Theme Overrides/styles", "theme_override_styles/normal"), NodePath("Bloqueador"), PackedStringArray("Visibility", "Layout", "Mouse")]
resource_unfolds=["res://scenes/configuration.tscn::StyleBoxFlat_hc4xr", PackedStringArray(), "res://scenes/configuration.tscn::StyleBoxFlat_7wcdq", PackedStringArray(), "res://scenes/configuration.tscn::StyleBoxFlat_lditi", PackedStringArray()]
nodes_folded=[NodePath("VBoxContainer")]

View File

@ -0,0 +1,14 @@
ColorRect
Control
VBoxContainer
Button
LineEdit
Label
Window
MenuButton
HBoxContainer
FlowContainer
Popup
TextureRect
TextureButton
AudioStreamPlayer2D

View File

@ -0,0 +1,63 @@
[docks]
dock_3_selected_tab_idx=0
dock_4_selected_tab_idx=0
dock_5_selected_tab_idx=0
dock_floating={}
dock_filesystem_h_split_offset=240
dock_filesystem_v_split_offset=0
dock_filesystem_display_mode=0
dock_filesystem_file_sort=0
dock_filesystem_file_list_display_mode=1
dock_filesystem_selected_paths=PackedStringArray("res://scenes/configuration.tscn")
dock_filesystem_uncollapsed_paths=PackedStringArray("Favorites", "res://", "res://scripts/", "res://scenes/")
dock_node_current_tab=0
dock_history_include_scene=true
dock_history_include_global=true
dock_bottom=[]
dock_closed=[]
dock_split_2=0
dock_split_3=0
dock_hsplit_1=0
dock_hsplit_2=270
dock_hsplit_3=-270
dock_hsplit_4=0
dock_3="Scene,Import"
dock_4="FileSystem"
dock_5="Inspector,Node,History"
[EditorNode]
open_scenes=PackedStringArray("res://scenes/game.tscn", "res://scenes/configuration.tscn")
current_scene="res://scenes/game.tscn"
center_split_offset=0
selected_default_debugger_tab_idx=0
selected_main_editor_idx=2
selected_bottom_panel_item=0
[EditorWindow]
screen=0
mode="maximized"
position=Vector2i(0, 23)
[ScriptEditor]
open_scripts=["res://scripts/configuration.gd", "res://scripts/game.gd", "res://scripts/game_data.gd", "res://scripts/screen_manager.gd"]
selected_script="res://scripts/configuration.gd"
open_help=[]
script_split_offset=200
list_split_offset=0
zoom_factor=1.0
[GameView]
floating_window_rect=Rect2i(0, 0, 1932, 1127)
floating_window_screen=0
[ShaderEditor]
open_shaders=[]
split_offset=200
selected_shader=""
text_shader_zoom_factor=1.0

View File

View File

@ -0,0 +1,14 @@
ea4bc82a6ad023ab7ee23ee620429895
::res://::1744847524
Fondo.png::CompressedTexture2D/CompressedTexture2D::2897047315587731151::1744739710::1744739716::1::::<><><>0<>0<>eacad182f531010fb24ebac1df6691a5<>res://.godot/imported/Fondo.png-90ffc355f5eaeb5a9d9680e0d0d619ff.ctex::
icon.svg::CompressedTexture2D/CompressedTexture2D::5044074093411398912::1744633584::1744633593::1::::<><><>0<>0<>f9adb246a70a7d9e0b44b9e0dce472bb<>res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex::
::res://audio/::1744635741
Elefant.mp3::AudioStreamMP3/AudioStreamMP3::1108392689846586874::1744635741::1744635741::1::::<><><>0<>0<>009805eb2c7d9c7cd23bd1fcf3eb7bf8<>res://.godot/imported/Elefant.mp3-e3e5c8488a65256c22d6f79b59243fe7.mp3str::
::res://scenes/::1744845819
configuration.tscn::PackedScene::1018116344755398623::1744845798::0::1::::<><><>0<>0<><>::uid://e41ws6j00o5::::res://scripts/configuration.gd
game.tscn::PackedScene::6874229073676243903::1744845819::0::1::::<><><>0<>0<><>::uid://dhqnf0xm2mwwm::::res://scripts/game.gd<>uid://bhjl7furxm0dv::::res://Fondo.png
::res://scripts/::1744845819
configuration.gd::GDScript::10065919189713686::1744845819::0::1::::<>Control<><>0<>0<><>::
game.gd::GDScript/GDScript::7684413599682033952::1744827660::0::1::::<>Control<><>0<>0<><>::
game_data.gd::GDScript/GDScript::3070763797095879381::1744824670::0::1::::<>Node<><>0<>0<><>::
screen_manager.gd::GDScript/GDScript::1421320781459715397::1744728053::0::1::::<>Node<><>0<>0<><>::

View File

@ -0,0 +1,4 @@
res://scenes/game.tscn
res://scripts/game_data.gd
res://scripts/configuration.gd
res://scenes/configuration.tscn

View File

@ -0,0 +1,3 @@
[folding]
sections_unfolded=PackedStringArray()

View File

@ -0,0 +1,3 @@
[folding]
sections_unfolded=PackedStringArray()

View File

@ -0,0 +1,195 @@
[editor_states]
Anim={
"visible": false
}
2D={
"grid_offset": Vector2(0, 0),
"grid_snap_active": false,
"grid_step": Vector2(8, 8),
"grid_visibility": 1,
"ofs": Vector2(-165, -110),
"primary_grid_step": Vector2i(8, 8),
"show_group_gizmos": true,
"show_guides": true,
"show_helpers": false,
"show_lock_gizmos": true,
"show_origin": true,
"show_position_gizmos": true,
"show_rulers": true,
"show_transformation_gizmos": true,
"show_viewport": true,
"show_zoom_control": true,
"smart_snap_active": false,
"snap_guides": true,
"snap_node_anchors": true,
"snap_node_center": true,
"snap_node_parent": true,
"snap_node_sides": true,
"snap_other_nodes": true,
"snap_pixel": true,
"snap_relative": false,
"snap_rotation": false,
"snap_rotation_offset": 0.0,
"snap_rotation_step": 0.261799,
"snap_scale": false,
"snap_scale_step": 0.1,
"zoom": 1.0
}
3D={
"fov": 70.01,
"gizmos_status": {
"AudioListener3D": 0,
"AudioStreamPlayer3D": 0,
"CPUParticles3D": 0,
"CSGShape3D": 0,
"Camera3D": 0,
"CollisionObject3D": 0,
"CollisionPolygon3D": 0,
"CollisionShape3D": 0,
"Decal": 0,
"FogVolume": 0,
"GPUParticles3D": 0,
"GPUParticlesCollision3D": 0,
"Joint3D": 0,
"Light3D": 0,
"LightmapGI": 0,
"LightmapProbe": 0,
"Marker3D": 0,
"MeshInstance3DCustomAABB": 0,
"NavigationLink3D": 0,
"NavigationObstacle3D": 0,
"NavigationRegion3D": 0,
"OccluderInstance3D": 0,
"Particles3DEmissionShape": 0,
"Path3D": 0,
"PhysicalBone3D": 0,
"RayCast3D": 0,
"ReflectionProbe": 0,
"ShapeCast3D": 0,
"Skeleton3D": 0,
"SoftBody3D": 0,
"SpringArm3D": 0,
"SpringBoneCollision3D": 0,
"SpringBoneSimulator3D": 0,
"VehicleWheel3D": 0,
"VisibleOnScreenNotifier3D": 0,
"VoxelGI": 0
},
"local_coords": false,
"preview_sun_env": {
"environ_ao_enabled": false,
"environ_enabled": true,
"environ_energy": 1.0,
"environ_gi_enabled": false,
"environ_glow_enabled": false,
"environ_ground_color": Color(0.2, 0.169, 0.133, 1),
"environ_sky_color": Color(0.385, 0.454, 0.55, 1),
"environ_tonemap_enabled": true,
"sun_color": Color(1, 1, 1, 1),
"sun_enabled": true,
"sun_energy": 1.0,
"sun_max_distance": 100.0,
"sun_rotation": Vector2(-1.0472, 2.61799)
},
"rotate_snap": 15.0,
"scale_snap": 10.0,
"show_grid": true,
"show_origin": true,
"snap_enabled": false,
"translate_snap": 1.0,
"viewport_mode": 1,
"viewports": [{
"auto_orthogonal": false,
"auto_orthogonal_enabled": true,
"cinematic_preview": false,
"display_mode": 22,
"distance": 4.0,
"doppler": false,
"frame_time": false,
"gizmos": true,
"grid": true,
"half_res": false,
"information": false,
"listener": true,
"lock_rotation": false,
"orthogonal": false,
"position": Vector3(0, 0, 0),
"transform_gizmo": true,
"use_environment": false,
"view_type": 0,
"x_rotation": 0.5,
"y_rotation": -0.5
}, {
"auto_orthogonal": false,
"auto_orthogonal_enabled": true,
"cinematic_preview": false,
"display_mode": 22,
"distance": 4.0,
"doppler": false,
"frame_time": false,
"gizmos": true,
"grid": true,
"half_res": false,
"information": false,
"listener": false,
"lock_rotation": false,
"orthogonal": false,
"position": Vector3(0, 0, 0),
"transform_gizmo": true,
"use_environment": false,
"view_type": 0,
"x_rotation": 0.5,
"y_rotation": -0.5
}, {
"auto_orthogonal": false,
"auto_orthogonal_enabled": true,
"cinematic_preview": false,
"display_mode": 22,
"distance": 4.0,
"doppler": false,
"frame_time": false,
"gizmos": true,
"grid": true,
"half_res": false,
"information": false,
"listener": false,
"lock_rotation": false,
"orthogonal": false,
"position": Vector3(0, 0, 0),
"transform_gizmo": true,
"use_environment": false,
"view_type": 0,
"x_rotation": 0.5,
"y_rotation": -0.5
}, {
"auto_orthogonal": false,
"auto_orthogonal_enabled": true,
"cinematic_preview": false,
"display_mode": 22,
"distance": 4.0,
"doppler": false,
"frame_time": false,
"gizmos": true,
"grid": true,
"half_res": false,
"information": false,
"listener": false,
"lock_rotation": false,
"orthogonal": false,
"position": Vector3(0, 0, 0),
"transform_gizmo": true,
"use_environment": false,
"view_type": 0,
"x_rotation": 0.5,
"y_rotation": -0.5
}],
"zfar": 4000.01,
"znear": 0.05
}
Game={
"camera_override_mode": 2,
"hide_selection": false,
"select_mode": 0
}
selected_nodes=Array[NodePath]([NodePath("/root/@EditorNode@21272/@Panel@14/@VBoxContainer@15/DockHSplitLeftL/DockHSplitLeftR/DockHSplitMain/@VBoxContainer@26/DockVSplitCenter/@VSplitContainer@54/@VBoxContainer@55/@EditorMainScreen@102/MainScreen/@CanvasItemEditor@11482/@VSplitContainer@11134/@HSplitContainer@11136/@HSplitContainer@11138/@Control@11139/@SubViewportContainer@11140/@SubViewport@11141/Game")])

View File

@ -0,0 +1,195 @@
[editor_states]
Anim={
"visible": false
}
2D={
"grid_offset": Vector2(0, 0),
"grid_snap_active": false,
"grid_step": Vector2(8, 8),
"grid_visibility": 1,
"ofs": Vector2(-592.641, -226.488),
"primary_grid_step": Vector2i(8, 8),
"show_group_gizmos": true,
"show_guides": true,
"show_helpers": false,
"show_lock_gizmos": true,
"show_origin": true,
"show_position_gizmos": true,
"show_rulers": true,
"show_transformation_gizmos": true,
"show_viewport": true,
"show_zoom_control": true,
"smart_snap_active": false,
"snap_guides": true,
"snap_node_anchors": true,
"snap_node_center": true,
"snap_node_parent": true,
"snap_node_sides": true,
"snap_other_nodes": true,
"snap_pixel": true,
"snap_relative": false,
"snap_rotation": false,
"snap_rotation_offset": 0.0,
"snap_rotation_step": 0.261799,
"snap_scale": false,
"snap_scale_step": 0.1,
"zoom": 0.513158
}
3D={
"fov": 70.01,
"gizmos_status": {
"AudioListener3D": 0,
"AudioStreamPlayer3D": 0,
"CPUParticles3D": 0,
"CSGShape3D": 0,
"Camera3D": 0,
"CollisionObject3D": 0,
"CollisionPolygon3D": 0,
"CollisionShape3D": 0,
"Decal": 0,
"FogVolume": 0,
"GPUParticles3D": 0,
"GPUParticlesCollision3D": 0,
"Joint3D": 0,
"Light3D": 0,
"LightmapGI": 0,
"LightmapProbe": 0,
"Marker3D": 0,
"MeshInstance3DCustomAABB": 0,
"NavigationLink3D": 0,
"NavigationObstacle3D": 0,
"NavigationRegion3D": 0,
"OccluderInstance3D": 0,
"Particles3DEmissionShape": 0,
"Path3D": 0,
"PhysicalBone3D": 0,
"RayCast3D": 0,
"ReflectionProbe": 0,
"ShapeCast3D": 0,
"Skeleton3D": 0,
"SoftBody3D": 0,
"SpringArm3D": 0,
"SpringBoneCollision3D": 0,
"SpringBoneSimulator3D": 0,
"VehicleWheel3D": 0,
"VisibleOnScreenNotifier3D": 0,
"VoxelGI": 0
},
"local_coords": false,
"preview_sun_env": {
"environ_ao_enabled": false,
"environ_enabled": true,
"environ_energy": 1.0,
"environ_gi_enabled": false,
"environ_glow_enabled": false,
"environ_ground_color": Color(0.2, 0.169, 0.133, 1),
"environ_sky_color": Color(0.385, 0.454, 0.55, 1),
"environ_tonemap_enabled": true,
"sun_color": Color(1, 1, 1, 1),
"sun_enabled": true,
"sun_energy": 1.0,
"sun_max_distance": 100.0,
"sun_rotation": Vector2(-1.0472, 2.61799)
},
"rotate_snap": 15.0,
"scale_snap": 10.0,
"show_grid": true,
"show_origin": true,
"snap_enabled": false,
"translate_snap": 1.0,
"viewport_mode": 1,
"viewports": [{
"auto_orthogonal": false,
"auto_orthogonal_enabled": true,
"cinematic_preview": false,
"display_mode": 22,
"distance": 4.0,
"doppler": false,
"frame_time": false,
"gizmos": true,
"grid": true,
"half_res": false,
"information": false,
"listener": true,
"lock_rotation": false,
"orthogonal": false,
"position": Vector3(0, 0, 0),
"transform_gizmo": true,
"use_environment": false,
"view_type": 0,
"x_rotation": 0.5,
"y_rotation": -0.5
}, {
"auto_orthogonal": false,
"auto_orthogonal_enabled": true,
"cinematic_preview": false,
"display_mode": 22,
"distance": 4.0,
"doppler": false,
"frame_time": false,
"gizmos": true,
"grid": true,
"half_res": false,
"information": false,
"listener": false,
"lock_rotation": false,
"orthogonal": false,
"position": Vector3(0, 0, 0),
"transform_gizmo": true,
"use_environment": false,
"view_type": 0,
"x_rotation": 0.5,
"y_rotation": -0.5
}, {
"auto_orthogonal": false,
"auto_orthogonal_enabled": true,
"cinematic_preview": false,
"display_mode": 22,
"distance": 4.0,
"doppler": false,
"frame_time": false,
"gizmos": true,
"grid": true,
"half_res": false,
"information": false,
"listener": false,
"lock_rotation": false,
"orthogonal": false,
"position": Vector3(0, 0, 0),
"transform_gizmo": true,
"use_environment": false,
"view_type": 0,
"x_rotation": 0.5,
"y_rotation": -0.5
}, {
"auto_orthogonal": false,
"auto_orthogonal_enabled": true,
"cinematic_preview": false,
"display_mode": 22,
"distance": 4.0,
"doppler": false,
"frame_time": false,
"gizmos": true,
"grid": true,
"half_res": false,
"information": false,
"listener": false,
"lock_rotation": false,
"orthogonal": false,
"position": Vector3(0, 0, 0),
"transform_gizmo": true,
"use_environment": false,
"view_type": 0,
"x_rotation": 0.5,
"y_rotation": -0.5
}],
"zfar": 4000.01,
"znear": 0.05
}
Game={
"camera_override_mode": 2,
"hide_selection": false,
"select_mode": 0
}
selected_nodes=Array[NodePath]([NodePath("/root/@EditorNode@21272/@Panel@14/@VBoxContainer@15/DockHSplitLeftL/DockHSplitLeftR/DockHSplitMain/@VBoxContainer@26/DockVSplitCenter/@VSplitContainer@54/@VBoxContainer@55/@EditorMainScreen@102/MainScreen/@CanvasItemEditor@11482/@VSplitContainer@11134/@HSplitContainer@11136/@HSplitContainer@11138/@Control@11139/@SubViewportContainer@11140/@SubViewport@11141/Game")])

View File

@ -0,0 +1,5 @@
[folding]
node_unfolds=[]
resource_unfolds=[]
nodes_folded=[]

View File

@ -0,0 +1,5 @@
[folding]
node_unfolds=[NodePath("TextureRect"), PackedStringArray("Layout", "Layout/Transform"), NodePath("VBoxContainer"), PackedStringArray("Layout", "Layout/Transform", "Theme", "Theme Overrides"), NodePath("VBoxContainer/NextSoundButton"), PackedStringArray("Layout", "Layout/Container Sizing", "Theme Overrides", "Theme Overrides/styles", "theme_override_styles/normal", "Theme Overrides/font_sizes"), NodePath("VBoxContainer/HBoxContainer"), PackedStringArray("Layout", "Layout/Container Sizing"), NodePath("VBoxContainer/HBoxContainer/RepeatSoundButton"), PackedStringArray("Layout", "Layout/Container Sizing", "Theme Overrides", "Theme Overrides/styles", "theme_override_styles/normal", "Theme Overrides/font_sizes"), NodePath("VBoxContainer/HBoxContainer/EndOfGameButton"), PackedStringArray("Layout", "Layout/Container Sizing", "Theme Overrides", "Theme Overrides/styles", "Theme Overrides/font_sizes", "theme_override_styles/normal"), NodePath("WinnerSelector"), PackedStringArray("Theme Overrides", "theme_override_styles/embedded_unfocused_border", "theme_override_styles/embedded_border"), NodePath("WinnerSelector/ColorRect"), PackedStringArray("Layout"), NodePath("WinnerSelector/VBoxContainer"), PackedStringArray("Layout", "Layout/Container Sizing", "Theme Overrides", "Theme Overrides/constants", "Layout/Transform"), NodePath("WinnerSelector/VBoxContainer/Label"), PackedStringArray("Layout/Container Sizing", "Theme Overrides", "Theme Overrides/colors", "Layout"), NodePath("WinnerSelector/VBoxContainer/MenuPlayers"), PackedStringArray("Layout", "Layout/Container Sizing", "Theme Overrides", "Theme Overrides/styles", "theme_override_styles/normal", "Theme Overrides/colors"), NodePath("WinnerSelector/VBoxContainer/Button"), PackedStringArray("Layout", "Layout/Container Sizing", "Theme Overrides", "Theme Overrides/styles", "theme_override_styles/normal"), NodePath("Bloqueador"), PackedStringArray("Layout", "Layout/Transform")]
resource_unfolds=["res://scenes/game.tscn::StyleBoxFlat_yqjtg", PackedStringArray("Corner Radius"), "res://scenes/game.tscn::StyleBoxFlat_lnu2h", PackedStringArray("Corner Radius"), "res://scenes/game.tscn::StyleBoxFlat_lbhrr", PackedStringArray("Corner Radius"), "res://scenes/game.tscn::StyleBoxFlat_iywne", PackedStringArray(), "res://scenes/game.tscn::StyleBoxFlat_p57ef", PackedStringArray()]
nodes_folded=[NodePath("VBoxContainer"), NodePath("WinnerSelector"), NodePath("WinnerSelector/VBoxContainer")]

View File

@ -0,0 +1,3 @@
[folding]
sections_unfolded=PackedStringArray()

View File

@ -0,0 +1,27 @@
[editor_metadata]
executable_path="C:/Users/moran/Downloads/Godot_v4.4.1-stable_win64.exe/Godot_v4.4.1-stable_win64.exe"
use_advanced_connections=false
[dialog_bounds]
project_settings=Rect2(360, 190, 1200, 700)
create_new_node=Rect2(510, 190, 900, 700)
[script_setup]
last_selected_language="GDScript"
[recent_files]
scripts=["res://scripts/game_data.gd", "res://scripts/screen_manager.gd", "res://scenes/configuration.gd", "res://game.gd"]
scenes=["res://scenes/configuration.tscn", "res://scenes/game.tscn", "res://game.tscn"]
[color_picker]
picker_shape=3
recent_presets=PackedColorArray(0.811765, 0, 0, 1, 0.545498, 3.1285e-07, 0.261076, 1, 1, 1, 1, 1, 0.8, 0.8, 0.8, 1, 0.588235, 0.654902, 0.686275, 1, 0.196078, 0.309804, 0.368627, 0.956863, 0.196078, 0.309804, 0.368627, 1, 0.196078, 0.309804, 0.368627, 0.784314, 0.588235, 0.654902, 0.686275, 1)
[quick_open_dialog]
last_mode=1

View File

@ -0,0 +1,2 @@
res://scripts
res://

View File

@ -0,0 +1,3 @@
[folding]
sections_unfolded=PackedStringArray()

View File

@ -0,0 +1,59 @@
[res://scripts/game.gd]
state={
"bookmarks": PackedInt32Array(),
"breakpoints": PackedInt32Array(),
"column": 27,
"folded_lines": Array[int]([]),
"h_scroll_position": 0,
"row": 54,
"scroll_position": 12.0,
"selection": true,
"selection_from_column": 20,
"selection_from_line": 54,
"selection_to_column": 27,
"selection_to_line": 54,
"syntax_highlighter": "GDScript"
}
[res://scripts/configuration.gd]
state={
"bookmarks": PackedInt32Array(),
"breakpoints": PackedInt32Array(),
"column": 40,
"folded_lines": Array[int]([]),
"h_scroll_position": 0,
"row": 89,
"scroll_position": 69.0,
"selection": false,
"syntax_highlighter": "GDScript"
}
[res://scripts/screen_manager.gd]
state={
"bookmarks": PackedInt32Array(),
"breakpoints": PackedInt32Array(),
"column": 0,
"folded_lines": Array[int]([]),
"h_scroll_position": 0,
"row": 22,
"scroll_position": 0.0,
"selection": false,
"syntax_highlighter": "GDScript"
}
[res://scripts/game_data.gd]
state={
"bookmarks": PackedInt32Array(),
"breakpoints": PackedInt32Array(),
"column": 25,
"folded_lines": Array[int]([]),
"h_scroll_position": 0,
"row": 22,
"scroll_position": 18.0,
"selection": false,
"syntax_highlighter": "GDScript"
}

View File

@ -0,0 +1 @@
list=[]

View File

@ -0,0 +1,3 @@
source_md5="d0a2e8efb08934c125002ca2342b0b1b"
dest_md5="5eac8ba711953b444769459c636fa80b"

View File

@ -0,0 +1,3 @@
source_md5="4f399bb14dd4336695b39d49ec4efc50"
dest_md5="1da956c37aacbb2d616aff49df392e02"

View File

@ -0,0 +1,3 @@
source_md5="78687f61f7636839a990dd7241418511"
dest_md5="31495e9ef1c8480db9407b663c9641c9"

View File

@ -0,0 +1,3 @@
source_md5="b7ed27b8733ac3938ea97b6f62f03fe2"
dest_md5="078c2aa3879e5d8fb05a4a95d08f28cb"

View File

@ -0,0 +1,3 @@
source_md5="13fa9399ff066d872ef7b61ab16b2e73"
dest_md5="3bf30b72728e17e5b7b4f06796930ccd"

View File

@ -0,0 +1,3 @@
source_md5="0eed98577cbbf02f0bdc0f5c9f70465b"
dest_md5="b48bef1f2eefdd190e0a3e60a6188d75"

View File

@ -0,0 +1 @@
source_md5="5bf73d4812f73436c189095565252ae2"

View File

@ -0,0 +1,3 @@
source_md5="5bf73d4812f73436c189095565252ae2"
dest_md5="8be7e08267d2e327926b679322f9196c"

Binary file not shown.

BIN
bingo-auditivo/Fondo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 MiB

View File

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bhjl7furxm0dv"
path="res://.godot/imported/Fondo.png-90ffc355f5eaeb5a9d9680e0d0d619ff.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Fondo.png"
dest_files=["res://.godot/imported/Fondo.png-90ffc355f5eaeb5a9d9680e0d0d619ff.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

View File

@ -0,0 +1,19 @@
[remap]
importer="mp3"
type="AudioStreamMP3"
uid="uid://p16ch53umcvi"
path="res://.godot/imported/Elefant.mp3-e3e5c8488a65256c22d6f79b59243fe7.mp3str"
[deps]
source_file="res://audio/Elefant.mp3"
dest_files=["res://.godot/imported/Elefant.mp3-e3e5c8488a65256c22d6f79b59243fe7.mp3str"]
[params]
loop=false
loop_offset=0
bpm=0
beat_count=0
bar_beats=4

1
bingo-auditivo/icon.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128"><rect width="124" height="124" x="2" y="2" fill="#363d52" stroke="#212532" stroke-width="4" rx="14"/><g fill="#fff" transform="translate(12.322 12.322)scale(.101)"><path d="M105 673v33q407 354 814 0v-33z"/><path fill="#478cbf" d="m105 673 152 14q12 1 15 14l4 67 132 10 8-61q2-11 15-15h162q13 4 15 15l8 61 132-10 4-67q3-13 15-14l152-14V427q30-39 56-81-35-59-83-108-43 20-82 47-40-37-88-64 7-51 8-102-59-28-123-42-26 43-46 89-49-7-98 0-20-46-46-89-64 14-123 42 1 51 8 102-48 27-88 64-39-27-82-47-48 49-83 108 26 42 56 81zm0 33v39c0 276 813 276 814 0v-39l-134 12-5 69q-2 10-14 13l-162 11q-12 0-16-11l-10-65H446l-10 65q-4 11-16 11l-162-11q-12-3-14-13l-5-69z"/><path d="M483 600c0 34 58 34 58 0v-86c0-34-58-34-58 0z"/><circle cx="725" cy="526" r="90"/><circle cx="299" cy="526" r="90"/></g><g fill="#414042" transform="translate(12.322 12.322)scale(.101)"><circle cx="307" cy="532" r="60"/><circle cx="717" cy="532" r="60"/></g></svg>

After

Width:  |  Height:  |  Size: 994 B

View File

@ -0,0 +1,37 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cd4nfs4di62lg"
path="res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://icon.svg"
dest_files=["res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
svg/scale=1.0
editor/scale_with_editor_scale=false
editor/convert_colors_with_editor_theme=false

View File

@ -0,0 +1,32 @@
; Engine configuration file.
; It's best edited using the editor UI and not directly,
; since the parameters that go here are not all obvious.
;
; Format:
; [section] ; section goes between []
; param=value ; assign values to parameters
config_version=5
[application]
config/name="Bingo Auditivo"
run/main_scene="uid://orghy6w50dfb"
config/features=PackedStringArray("4.4", "GL Compatibility")
config/icon="res://icon.svg"
[autoload]
ScreenManager="*res://scripts/screen_manager.gd"
GameData="*res://scripts/game_data.gd"
[display]
window/size/viewport_width=1920
window/size/viewport_height=1080
window/stretch/mode="viewport"
[rendering]
renderer/rendering_method="gl_compatibility"
renderer/rendering_method.mobile="gl_compatibility"

View File

@ -0,0 +1,119 @@
[gd_scene load_steps=5 format=3 uid="uid://orghy6w50dfb"]
[ext_resource type="Script" uid="uid://e41ws6j00o5" path="res://scripts/configuration.gd" id="1_hc4xr"]
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_hc4xr"]
bg_color = Color(0.588235, 0.654902, 0.686275, 1)
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_7wcdq"]
bg_color = Color(0.588235, 0.654902, 0.686275, 1)
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_lditi"]
bg_color = Color(0.196078, 0.309804, 0.368627, 1)
[node name="Configuration" type="Control"]
layout_mode = 3
anchors_preset = 0
script = ExtResource("1_hc4xr")
[node name="Window" type="Window" parent="."]
initial_position = 1
size = Vector2i(500, 230)
[node name="ColorRect" type="ColorRect" parent="Window"]
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
color = Color(0.8, 0.8, 0.8, 1)
[node name="VBoxContainer" type="VBoxContainer" parent="Window"]
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -200.0
offset_top = -99.0
offset_right = 200.0
offset_bottom = 101.0
grow_horizontal = 2
grow_vertical = 2
theme_override_constants/separation = 10
[node name="Label" type="Label" parent="Window/VBoxContainer"]
layout_mode = 2
size_flags_vertical = 3
theme_override_colors/font_color = Color(0.196078, 0.309804, 0.368627, 1)
text = "Correo electronico:"
horizontal_alignment = 1
vertical_alignment = 1
[node name="EmailInput" type="LineEdit" parent="Window/VBoxContainer"]
custom_minimum_size = Vector2(400, 0)
layout_mode = 2
size_flags_horizontal = 4
size_flags_vertical = 6
theme_override_styles/normal = SubResource("StyleBoxFlat_hc4xr")
[node name="Label2" type="Label" parent="Window/VBoxContainer"]
layout_mode = 2
size_flags_vertical = 6
theme_override_colors/font_color = Color(0.196078, 0.309804, 0.368627, 1)
text = "Contraseña:"
horizontal_alignment = 1
vertical_alignment = 1
[node name="PasswordInput" type="LineEdit" parent="Window/VBoxContainer"]
custom_minimum_size = Vector2(400, 0)
layout_mode = 2
size_flags_horizontal = 4
size_flags_vertical = 6
theme_override_styles/normal = SubResource("StyleBoxFlat_7wcdq")
[node name="LogInButton" type="Button" parent="Window/VBoxContainer"]
custom_minimum_size = Vector2(250, 50)
layout_mode = 2
size_flags_horizontal = 4
size_flags_vertical = 6
theme_override_styles/normal = SubResource("StyleBoxFlat_lditi")
text = "Iniciar sesion"
[node name="VBoxContainer" type="VBoxContainer" parent="."]
layout_mode = 0
offset_right = 40.0
offset_bottom = 40.0
[node name="Label" type="Label" parent="VBoxContainer"]
layout_mode = 2
text = "CONFIGURACIÓN"
[node name="Label2" type="Label" parent="VBoxContainer"]
layout_mode = 2
text = "Selecciona los jugadores"
[node name="MenuButton" type="MenuButton" parent="VBoxContainer"]
layout_mode = 2
text = "Jugadores"
flat = false
[node name="Label3" type="Label" parent="VBoxContainer"]
layout_mode = 2
text = "Jugadores seleccionados"
[node name="FlowContainer" type="FlowContainer" parent="VBoxContainer"]
layout_mode = 2
[node name="PlayButton" type="Button" parent="VBoxContainer"]
layout_mode = 2
text = "Empezar juego"
[node name="Bloqueador" type="ColorRect" parent="."]
layout_mode = 1
offset_right = 1920.0
offset_bottom = 1080.0
color = Color(0.196078, 0.309804, 0.368627, 0.784314)
[connection signal="pressed" from="Window/VBoxContainer/LogInButton" to="." method="_on_log_in_button_pressed"]
[connection signal="pressed" from="VBoxContainer/PlayButton" to="." method="_on_play_button_pressed"]

View File

@ -0,0 +1,61 @@
[gd_scene load_steps=2 format=3 uid="uid://orghy6w50dfb"]
[ext_resource type="Script" uid="uid://e41ws6j00o5" path="res://scripts/configuration.gd" id="1_hc4xr"]
[node name="Configuration" type="Node2D"]
script = ExtResource("1_hc4xr")
[node name="VBoxContainer" type="VBoxContainer" parent="."]
offset_right = 40.0
offset_bottom = 40.0
[node name="Label" type="Label" parent="VBoxContainer"]
layout_mode = 2
text = "CONFIGURACIÓN"
[node name="Label2" type="Label" parent="VBoxContainer"]
layout_mode = 2
text = "Selecciona los jugadores"
[node name="MenuButton" type="MenuButton" parent="VBoxContainer"]
layout_mode = 2
text = "Jugadores"
flat = false
[node name="Label3" type="Label" parent="VBoxContainer"]
layout_mode = 2
text = "Jugadores seleccionados"
[node name="FlowContainer" type="FlowContainer" parent="VBoxContainer"]
layout_mode = 2
[node name="PlayButton" type="Button" parent="VBoxContainer"]
layout_mode = 2
text = "Empezar juego"
[node name="Window" type="Window" parent="."]
[node name="Label" type="Label" parent="Window"]
offset_right = 40.0
offset_bottom = 23.0
text = "Correo electronico"
[node name="EmailInput" type="LineEdit" parent="Window"]
offset_right = 68.5625
offset_bottom = 31.0
[node name="Label2" type="Label" parent="Window"]
offset_right = 40.0
offset_bottom = 23.0
text = "Contraseña
"
[node name="PasswordInput" type="LineEdit" parent="Window"]
offset_right = 68.5625
offset_bottom = 31.0
[node name="LogInButton" type="Button" parent="Window"]
offset_right = 8.0
offset_bottom = 8.0
[connection signal="pressed" from="VBoxContainer/PlayButton" to="." method="_on_play_button_pressed"]

View File

@ -0,0 +1,61 @@
[gd_scene load_steps=2 format=3 uid="uid://orghy6w50dfb"]
[ext_resource type="Script" uid="uid://e41ws6j00o5" path="res://scripts/configuration.gd" id="1_hc4xr"]
[node name="Configuration" type="Node2D"]
script = ExtResource("1_hc4xr")
[node name="VBoxContainer" type="VBoxContainer" parent="."]
offset_right = 40.0
offset_bottom = 40.0
[node name="Label" type="Label" parent="VBoxContainer"]
layout_mode = 2
text = "CONFIGURACIÓN"
[node name="Label2" type="Label" parent="VBoxContainer"]
layout_mode = 2
text = "Selecciona los jugadores"
[node name="MenuButton" type="MenuButton" parent="VBoxContainer"]
layout_mode = 2
text = "Jugadores"
flat = false
[node name="Label3" type="Label" parent="VBoxContainer"]
layout_mode = 2
text = "Jugadores seleccionados"
[node name="FlowContainer" type="FlowContainer" parent="VBoxContainer"]
layout_mode = 2
[node name="PlayButton" type="Button" parent="VBoxContainer"]
layout_mode = 2
text = "Empezar juego"
[node name="Window" type="Window" parent="."]
[node name="Label" type="Label" parent="Window"]
offset_right = 40.0
offset_bottom = 23.0
text = "Correo electronico"
[node name="EmailInput" type="LineEdit" parent="Window"]
offset_right = 68.5625
offset_bottom = 31.0
[node name="Label2" type="Label" parent="Window"]
offset_right = 40.0
offset_bottom = 23.0
text = "Contraseña
"
[node name="PasswordInput" type="LineEdit" parent="Window"]
offset_right = 68.5625
offset_bottom = 31.0
[node name="LogInButton" type="Button" parent="Window"]
offset_right = 8.0
offset_bottom = 8.0
[connection signal="pressed" from="VBoxContainer/PlayButton" to="." method="_on_play_button_pressed"]

View File

@ -0,0 +1,61 @@
[gd_scene load_steps=2 format=3 uid="uid://orghy6w50dfb"]
[ext_resource type="Script" uid="uid://e41ws6j00o5" path="res://scripts/configuration.gd" id="1_hc4xr"]
[node name="Configuration" type="Node2D"]
script = ExtResource("1_hc4xr")
[node name="VBoxContainer" type="VBoxContainer" parent="."]
offset_right = 40.0
offset_bottom = 40.0
[node name="Label" type="Label" parent="VBoxContainer"]
layout_mode = 2
text = "CONFIGURACIÓN"
[node name="Label2" type="Label" parent="VBoxContainer"]
layout_mode = 2
text = "Selecciona los jugadores"
[node name="MenuButton" type="MenuButton" parent="VBoxContainer"]
layout_mode = 2
text = "Jugadores"
flat = false
[node name="Label3" type="Label" parent="VBoxContainer"]
layout_mode = 2
text = "Jugadores seleccionados"
[node name="FlowContainer" type="FlowContainer" parent="VBoxContainer"]
layout_mode = 2
[node name="PlayButton" type="Button" parent="VBoxContainer"]
layout_mode = 2
text = "Empezar juego"
[node name="Window" type="Window" parent="."]
initial_position = 1
[node name="VBoxContainer" type="VBoxContainer" parent="Window"]
offset_right = 40.0
offset_bottom = 40.0
[node name="Label" type="Label" parent="Window/VBoxContainer"]
layout_mode = 2
text = "Correo electronico"
[node name="EmailInput" type="LineEdit" parent="Window/VBoxContainer"]
layout_mode = 2
[node name="Label2" type="Label" parent="Window/VBoxContainer"]
layout_mode = 2
text = "Contraseña
"
[node name="PasswordInput" type="LineEdit" parent="Window/VBoxContainer"]
layout_mode = 2
[node name="LogInButton" type="Button" parent="Window/VBoxContainer"]
layout_mode = 2
[connection signal="pressed" from="VBoxContainer/PlayButton" to="." method="_on_play_button_pressed"]

View File

@ -0,0 +1,136 @@
[gd_scene load_steps=8 format=3 uid="uid://c466swcqlfwtj"]
[ext_resource type="Script" uid="uid://dhqnf0xm2mwwm" path="res://scripts/game.gd" id="1_uwrxv"]
[ext_resource type="Texture2D" uid="uid://bhjl7furxm0dv" path="res://Fondo.png" id="2_yqjtg"]
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_yqjtg"]
bg_color = Color(0.926771, 0.375165, 0.614248, 0.909804)
corner_radius_top_left = 60
corner_radius_top_right = 60
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_lnu2h"]
bg_color = Color(0, 0.718972, 0.352325, 1)
corner_radius_bottom_left = 60
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_lbhrr"]
bg_color = Color(0.901268, 0.463041, 0.139193, 1)
corner_radius_bottom_right = 60
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_iywne"]
bg_color = Color(0.588235, 0.654902, 0.686275, 1)
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_p57ef"]
bg_color = Color(0.196078, 0.309804, 0.368627, 1)
[node name="Game" type="Control"]
layout_mode = 3
anchors_preset = 0
script = ExtResource("1_uwrxv")
[node name="TextureRect" type="TextureRect" parent="."]
layout_mode = 0
offset_right = 1920.0
offset_bottom = 1080.0
texture = ExtResource("2_yqjtg")
expand_mode = 1
stretch_mode = 6
flip_h = true
[node name="AnimalAudio" type="AudioStreamPlayer2D" parent="."]
[node name="VBoxContainer" type="VBoxContainer" parent="."]
layout_mode = 0
offset_left = 502.0
offset_top = 267.0
offset_right = 1585.0
offset_bottom = 794.0
[node name="NextSoundButton" type="Button" parent="VBoxContainer"]
layout_mode = 2
size_flags_vertical = 3
theme_override_font_sizes/font_size = 50
theme_override_styles/normal = SubResource("StyleBoxFlat_yqjtg")
text = "Reproducir sonido"
[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer"]
layout_mode = 2
size_flags_vertical = 3
[node name="RepeatSoundButton" type="Button" parent="VBoxContainer/HBoxContainer"]
layout_mode = 2
size_flags_horizontal = 3
theme_override_font_sizes/font_size = 40
theme_override_styles/normal = SubResource("StyleBoxFlat_lnu2h")
text = "Repetir sonido"
[node name="EndOfGameButton" type="Button" parent="VBoxContainer/HBoxContainer"]
layout_mode = 2
size_flags_horizontal = 3
theme_override_font_sizes/font_size = 40
theme_override_styles/normal = SubResource("StyleBoxFlat_lbhrr")
text = "Fin de partida"
[node name="WinnerSelector" type="Window" parent="."]
initial_position = 1
size = Vector2i(500, 200)
visible = false
[node name="ColorRect" type="ColorRect" parent="WinnerSelector"]
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
color = Color(0.8, 0.8, 0.8, 1)
[node name="VBoxContainer" type="VBoxContainer" parent="WinnerSelector"]
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -225.0
offset_top = -56.0
offset_right = 225.0
offset_bottom = 56.0
grow_horizontal = 2
grow_vertical = 2
theme_override_constants/separation = 30
[node name="Label" type="Label" parent="WinnerSelector/VBoxContainer"]
layout_mode = 2
size_flags_vertical = 6
theme_override_colors/font_color = Color(0.196078, 0.309804, 0.368627, 1)
text = "¿Quien a ganado?"
horizontal_alignment = 1
vertical_alignment = 1
[node name="MenuPlayers" type="MenuButton" parent="WinnerSelector/VBoxContainer"]
custom_minimum_size = Vector2(450, 30)
layout_mode = 2
size_flags_horizontal = 4
size_flags_vertical = 6
theme_override_colors/font_color = Color(0.196078, 0.309804, 0.368627, 1)
theme_override_styles/normal = SubResource("StyleBoxFlat_iywne")
text = "Jugadores 🡣"
flat = false
[node name="Button" type="Button" parent="WinnerSelector/VBoxContainer"]
custom_minimum_size = Vector2(250, 50)
layout_mode = 2
size_flags_horizontal = 4
size_flags_vertical = 6
theme_override_styles/normal = SubResource("StyleBoxFlat_p57ef")
text = "Finalizar partida"
[node name="Bloqueador" type="ColorRect" parent="."]
visible = false
layout_mode = 1
offset_right = 1920.0
offset_bottom = 1080.0
color = Color(0.196078, 0.309804, 0.368627, 0.784314)
[connection signal="pressed" from="VBoxContainer/NextSoundButton" to="." method="_on_next_sound_button_pressed"]
[connection signal="pressed" from="VBoxContainer/HBoxContainer/RepeatSoundButton" to="." method="_on_repeat_sound_button_pressed"]
[connection signal="pressed" from="VBoxContainer/HBoxContainer/EndOfGameButton" to="." method="_on_end_of_game_button_pressed"]
[connection signal="pressed" from="WinnerSelector/VBoxContainer/Button" to="." method="_on_winner_button_pressed"]

View File

@ -0,0 +1,91 @@
extends Control
@onready var login_popup = $Window
@onready var email_input = $Window/VBoxContainer/EmailInput
@onready var password_input = $Window/VBoxContainer/PasswordInput
@onready var players_menu = $VBoxContainer/MenuButton
@onready var seleccionados_container = $VBoxContainer/FlowContainer
@onready var play_button = $VBoxContainer/PlayButton
var todos_los_jugadores = []
var jugadores_disponibles = []
var jugadores_seleccionados = []
func _ready():
await get_tree().process_frame # Esperar a que todo esté listo
if GameData.id_user == -1:
login_popup.show()
$Bloqueador.visible = true
todos_los_jugadores = await GameData.get_residents_loaded()
jugadores_disponibles = todos_los_jugadores.duplicate()
_actualizar_menu()
players_menu.get_popup().connect("id_pressed", Callable(self, "_on_jugador_seleccionado"))
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_popup.hide()
$Bloqueador.visible = false
break
if GameData.id_user == -1:
email_input.clear()
password_input.clear()
# Color rojo en el borde o texto
email_input.add_theme_color_override("font_color", Color.RED)
password_input.add_theme_color_override("font_color", Color.RED)
func _actualizar_menu():
var popup = players_menu.get_popup()
popup.clear()
for i in jugadores_disponibles.size():
popup.add_item(jugadores_disponibles[i].nombre, i)
func _on_jugador_seleccionado(index: int):
var jugador = jugadores_disponibles[index]
jugadores_seleccionados.append(jugador)
jugadores_disponibles.erase(jugador)
_actualizar_menu()
_agregar_jugador_visual(jugador.nombre)
func _agregar_jugador_visual(nombre: String):
var boton = Button.new()
boton.text = nombre + ""
boton.name = nombre
boton.pressed.connect(Callable(self, "_quitar_jugador").bind(nombre))
seleccionados_container.add_child(boton)
func _quitar_jugador(nombre: String):
# Quitar de la vista
var boton = seleccionados_container.get_node(nombre)
if boton:
seleccionados_container.remove_child(boton)
boton.queue_free()
# Buscar el jugador por nombre
for jugador in jugadores_seleccionados:
if jugador.nombre == nombre:
jugadores_seleccionados.erase(jugador)
jugadores_disponibles.append(jugador)
break
jugadores_disponibles.sort_custom(func(a, b): return a.nombre < b.nombre)
_actualizar_menu()
func _on_play_button_pressed():
var game_scene = preload("res://scenes/game.tscn").instantiate()
#Validar que selecciona almenos un jugador, sino mostrar popup informando
game_scene.jugadores_seleccionados = jugadores_seleccionados
for jugador in jugadores_seleccionados:
GameData.start_game(jugador.id, null)
ScreenManager.change_scene(game_scene, self)

View File

@ -0,0 +1 @@
uid://e41ws6j00o5

View File

@ -0,0 +1,56 @@
extends Control
@onready var next_sound_button = $VBoxContainer/NextSoundButton
@onready var repeat_sound_button = $VBoxContainer/HBoxContainer/RepeatSoundButton
@onready var end_of_game_button = $VBoxContainer/HBoxContainer/EndOfGameButton
@onready var winner_selector = $WinnerSelector
@onready var menu_players = $WinnerSelector/VBoxContainer/MenuPlayers
var animales = [
{ "nombre": "Elfante", "sonido": preload("res://audio/Elefant.mp3") },
]
var animales_restantes = []
var sound_just_played
@export var jugadores_seleccionados = []
var ganador = -1
func _ready():
animales_restantes = animales.duplicate()
randomize()
func _on_next_sound_button_pressed():
if animales_restantes.is_empty():
print("¡Todos los sonidos han sido usados!")
return
var index = randi() % animales_restantes.size()
var animal = animales_restantes[index]
sound_just_played = animal
# Reproduce el sonido
$AnimalAudio.stream = animal["sonido"]
$AnimalAudio.play()
animales_restantes.erase(index)
func _on_repeat_sound_button_pressed():
$AnimalAudio.stream = sound_just_played["sonido"]
$AnimalAudio.play()
func _on_end_of_game_button_pressed():
for i in jugadores_seleccionados.size():
menu_players.get_popup().add_item(jugadores_seleccionados[i].nombre, i)
menu_players.get_popup().connect("id_pressed", Callable(self, "_on_jugador_seleccionado"))
winner_selector.show()
$Bloqueador.visible = true
func _on_jugador_seleccionado(index: int):
ganador = jugadores_seleccionados[index].id
func _on_winner_button_pressed():
if ganador != -1:
GameData.end_game(ganador)
ScreenManager.go_back_to_previous_scene()

View File

@ -0,0 +1 @@
uid://dhqnf0xm2mwwm

View File

@ -0,0 +1,220 @@
extends Node
# Este script se encarga de comunicarse con la API
#Señales para saber cuando se recibe los datos
signal users_received(users)
signal residents_received(residents)
signal games_received(games)
var all_users = []
var all_residents = []
var all_games = []
var resident_playing = -1
var start_time: int = 0
var end_time: int = 0
var level_game = -1
var id_user = -1
var partidas_activas: Array = []
### Metodo para inicar partida
func start_game(resident, level):
var partida = {
"idUsuario": id_user,
"idResidente": resident,
"start_time": Time.get_unix_time_from_system(),
"nivel": level
}
partidas_activas.append(partida)
### Metodo para finalizar partida
func end_game(ganador):
var end_time = Time.get_unix_time_from_system()
var games = await get_games_loaded()
var game_id = 0;
for game in games:
if game.nombre == "Bingo auditivo":
game_id = 3 #game.id
for partida in partidas_activas:
var fallos = 0
if partida["idResidente"] == ganador:
fallos = 1
var duracion: int = end_time - partida["start_time"]
var data = {
"idJuego": game_id,
"idResidente": partida["idResidente"],
"idUsuario": partida["idUsuario"],
"fallos": fallos,
"duracion": duracion,
"dificultad": partida["nivel"]
}
send_game_data(data)
partidas_activas.clear()
### Metodo para calcular la duracion entre el incio y el final de la partida (en segundos)
func get_duration() -> int:
return end_time - start_time
#-------------------------------------GET USERS-------------------------------------------------------
func get_users():
var http_request = HTTPRequest.new()
get_tree().root.add_child(http_request)
var status = http_request.connect(
"request_completed",
Callable(self, "_on_request_get_users").bind(http_request)
)
var url = "http://localhost:8080/resi/users"
var headers = ["User-Agent: Godot"]
var error = http_request.request(url, headers)
if error != OK:
print("Error al hacer GET:", error)
### Metodo para parsear json de residentes y que emite una señal cuando lo tenga
func _on_request_get_users(result, response_code, headers, body, request_node):
print("Código de respuesta:", response_code)
if response_code == 200:
var response_text = body.get_string_from_utf8()
var parsed = JSON.parse_string(response_text)
if parsed != null:
all_users = parsed
print("Users obtenidos:", all_users)
# Emitir la señal para notificar a quien esté conectado
emit_signal("users_received", all_users)
else:
print("Error al parsear JSON")
else:
print("Error del servidor o conexión:", response_code)
request_node.queue_free() # Liberar para evitar error 31
### Metodo que espera a la señal de que se han obtenido y parseado los residentes y los devuelve.
func get_users_loaded() -> Array:
print("Hola")
get_users()
var result = await self.users_received
return result
#--------------------------------------GET RESIDENTES-----------------------------------------------
### Metodo para hacer un get a la api de todos los residentes
func get_residents():
var http_request = HTTPRequest.new()
get_tree().root.add_child(http_request)
var status = http_request.connect(
"request_completed",
Callable(self, "_on_request_get_residents").bind(http_request)
)
var url = "http://localhost:8080/resi/residents"
var headers = ["User-Agent: Godot"]
var error = http_request.request(url, headers)
if error != OK:
print("Error al hacer GET:", error)
### Metodo para parsear json de residentes y que emite una señal cuando lo tenga
func _on_request_get_residents(result, response_code, headers, body, request_node):
print("Código de respuesta:", response_code)
if response_code == 200:
var response_text = body.get_string_from_utf8()
var parsed = JSON.parse_string(response_text)
if parsed != null:
all_residents = parsed
print("Residentes obtenidos:", all_residents)
# Emitir la señal para notificar a quien esté conectado
emit_signal("residents_received", all_residents)
else:
print("Error al parsear JSON")
else:
print("Error del servidor o conexión:", response_code)
request_node.queue_free() # Liberar para evitar error 31
### Metodo que espera a la señal de que se han obtenido y parseado los residentes y los devuelve.
func get_residents_loaded() -> Array:
get_residents()
var result = await self.residents_received
return result
# ----------------------------- GET JUEGOS --------------------------------------------
func get_games():
var http_request = HTTPRequest.new()
get_tree().root.add_child(http_request)
var status = http_request.connect(
"request_completed",
Callable(self, "_on_request_get_games").bind(http_request)
)
var url = "http://localhost:8080/resi/juegos"
var headers = ["User-Agent: Godot"]
var error = http_request.request(url, headers)
if error != OK:
print("Error al hacer GET en juegos:", error)
### Metodo para parsear json de residentes y que emite una señal cuando lo tenga
func _on_request_get_games(result, response_code, headers, body, request_node):
print("Código de respuesta en juegos:", response_code)
if response_code == 200:
var response_text = body.get_string_from_utf8()
var parsed = JSON.parse_string(response_text)
if parsed != null:
all_games = parsed
print("Juegos obtenidos:", all_games)
# Emitir la señal para notificar a quien esté conectado
emit_signal("games_received", all_games)
else:
print("Error al parsear JSON de juegos")
else:
print("Error del servidor o conexión en juegos:", response_code)
request_node.queue_free() # Liberar para evitar error 31
### Metodo que espera a la señal de que se han obtenido y parseado los residentes y los devuelve.
func get_games_loaded() -> Array:
get_games()
var result = await self.games_received
return result
# ------------------------------- POST PARTIDA ------------------------------------
func send_game_data(data: Dictionary):
var http_request = HTTPRequest.new()
get_tree().root.add_child(http_request)
var json_body = JSON.stringify(data)
var headers = ["Content-Type: application/json"]
var url = "http://localhost:8080/resi/juegos/stats/add"
http_request.connect("request_completed", Callable(self, "_on_game_data_sent").bind(http_request))
var error = http_request.request(url, headers, HTTPClient.METHOD_POST, json_body)
if error != OK:
print("Error al enviar los datos:", error)

View File

@ -0,0 +1 @@
uid://bj0rbb7d8ojgf

View File

@ -0,0 +1 @@
uid://uiq7fem2cocj

View File

@ -8,7 +8,7 @@ Anim={
"grid_snap_active": false,
"grid_step": Vector2(8, 8),
"grid_visibility": 1,
"ofs": Vector2(-115.402, 74.5408),
"ofs": Vector2(-555.679, -77.392),
"primary_grid_step": Vector2i(8, 8),
"show_group_gizmos": true,
"show_guides": true,
@ -34,7 +34,7 @@ Anim={
"snap_rotation_step": 0.261799,
"snap_scale": false,
"snap_scale_step": 0.1,
"zoom": 0.683013
"zoom": 0.466507
}
3D={
"fov": 70.01,
@ -192,4 +192,4 @@ Game={
"hide_selection": false,
"select_mode": 0
}
selected_nodes=Array[NodePath]([NodePath("/root/@EditorNode@21272/@Panel@14/@VBoxContainer@15/DockHSplitLeftL/DockHSplitLeftR/DockHSplitMain/@VBoxContainer@26/DockVSplitCenter/@VSplitContainer@54/@VBoxContainer@55/@EditorMainScreen@102/MainScreen/@CanvasItemEditor@11482/@VSplitContainer@11134/@HSplitContainer@11136/@HSplitContainer@11138/@Control@11139/@SubViewportContainer@11140/@SubViewport@11141/Node2D")])
selected_nodes=Array[NodePath]([NodePath("/root/@EditorNode@21272/@Panel@14/@VBoxContainer@15/DockHSplitLeftL/DockHSplitLeftR/DockHSplitMain/@VBoxContainer@26/DockVSplitCenter/@VSplitContainer@54/@VBoxContainer@55/@EditorMainScreen@102/MainScreen/@CanvasItemEditor@11482/@VSplitContainer@11134/@HSplitContainer@11136/@HSplitContainer@11138/@Control@11139/@SubViewportContainer@11140/@SubViewport@11141/Configuration")])

View File

@ -1,5 +1,5 @@
[folding]
node_unfolds=[NodePath("VBoxContainer/bg_color_picker"), PackedStringArray("Layout", "Layout/Container Sizing"), NodePath("VBoxContainer/tiles_lines_color_picker"), PackedStringArray("Layout", "Layout/Container Sizing"), NodePath("VBoxContainer/table_lines_color_picker"), PackedStringArray("Layout", "Layout/Container Sizing"), NodePath("VBoxContainer/levels_menu"), PackedStringArray("item_count_array")]
resource_unfolds=[]
nodes_folded=[]
node_unfolds=[NodePath("."), PackedStringArray("Layout"), NodePath("MarginContainer"), PackedStringArray("Layout", "Layout/Transform", "Theme Overrides", "Theme Overrides/constants"), NodePath("MarginContainer/VBoxContainer"), PackedStringArray("Layout", "Visibility", "Theme Overrides/constants", "Layout/Transform"), NodePath("MarginContainer/VBoxContainer/Label6"), PackedStringArray("Theme Overrides", "Theme Overrides/font_sizes", "Theme Overrides/colors", "Layout", "Layout/Container Sizing"), NodePath("MarginContainer/VBoxContainer/Label"), PackedStringArray("Theme Overrides", "Theme Overrides/font_sizes", "Theme Overrides/colors", "Theme Overrides/fonts"), NodePath("MarginContainer/VBoxContainer/residents_menu"), PackedStringArray("Layout", "Theme", "Theme Overrides", "Layout/Container Sizing", "theme_override_styles/normal"), NodePath("MarginContainer/VBoxContainer/Label2"), PackedStringArray("Theme Overrides", "Theme Overrides/font_sizes", "Theme Overrides/colors"), NodePath("MarginContainer/VBoxContainer/bg_color_picker"), PackedStringArray("Layout", "Layout/Container Sizing", "Layout/Transform", "Theme Overrides"), NodePath("MarginContainer/VBoxContainer/Label3"), PackedStringArray("Theme Overrides", "Theme Overrides/font_sizes", "Theme Overrides/colors"), NodePath("MarginContainer/VBoxContainer/tiles_lines_color_picker"), PackedStringArray("Layout", "Layout/Container Sizing"), NodePath("MarginContainer/VBoxContainer/Label4"), PackedStringArray("Theme Overrides", "Theme Overrides/font_sizes", "Theme Overrides/colors"), NodePath("MarginContainer/VBoxContainer/table_lines_color_picker"), PackedStringArray("Layout", "Layout/Container Sizing"), NodePath("MarginContainer/VBoxContainer/Label5"), PackedStringArray("Theme Overrides", "Theme Overrides/font_sizes", "Theme Overrides/colors"), NodePath("MarginContainer/VBoxContainer/levels_menu"), PackedStringArray("Theme Overrides/colors", "Theme Overrides", "theme_override_styles/normal", "Layout", "Layout/Container Sizing", "Theme Overrides/styles"), NodePath("MarginContainer/VBoxContainer/Button"), PackedStringArray("Layout", "Layout/Container Sizing", "Theme", "theme", "Theme Overrides", "Theme Overrides/styles", "theme_override_styles/normal"), NodePath("Warning"), PackedStringArray("Flags"), NodePath("Warning/Panel"), PackedStringArray("theme_override_styles/panel", "Layout", "Theme Overrides", "Theme Overrides/styles"), NodePath("LogIn"), PackedStringArray("Theme Overrides", "Theme Overrides/styles", "Flags"), NodePath("LogIn/ColorRect"), PackedStringArray("Layout"), NodePath("LogIn/VBoxContainer"), PackedStringArray("Layout", "Layout/Transform", "Theme Overrides", "Theme Overrides/constants"), NodePath("LogIn/VBoxContainer/Label"), PackedStringArray("Layout", "Layout/Container Sizing", "Theme Overrides", "Theme Overrides/colors"), NodePath("LogIn/VBoxContainer/EmailInput"), PackedStringArray("Layout", "Layout/Container Sizing", "Theme Overrides", "Theme Overrides/styles", "theme_override_styles/normal", "Theme Overrides/colors"), NodePath("LogIn/VBoxContainer/Label2"), PackedStringArray("Theme Overrides", "Theme Overrides/colors"), NodePath("LogIn/VBoxContainer/PasswordInput"), PackedStringArray("Layout", "Layout/Container Sizing", "Theme Overrides", "Theme Overrides/styles", "theme_override_styles/normal", "Theme Overrides/colors"), NodePath("LogIn/VBoxContainer/LogInButton"), PackedStringArray("Layout", "Layout/Container Sizing", "Theme Overrides", "Theme Overrides/styles", "theme_override_styles/normal"), NodePath("Blocker"), PackedStringArray("Layout", "Layout/Transform")]
resource_unfolds=["res://scenes/Configuration.tscn::StyleBoxFlat_742ft", PackedStringArray(), "res://scenes/Configuration.tscn::StyleBoxFlat_rjxe2", PackedStringArray(), "res://scenes/Configuration.tscn::StyleBoxFlat_hjuae", PackedStringArray(), "res://scenes/Configuration.tscn::StyleBoxFlat_d6xro", PackedStringArray(), "res://scenes/Configuration.tscn::StyleBoxFlat_u2atv", PackedStringArray(), "res://scenes/Configuration.tscn::StyleBoxFlat_khph0", PackedStringArray(), "res://scenes/Configuration.tscn::StyleBoxFlat_1f7ew", PackedStringArray()]
nodes_folded=[NodePath("MarginContainer/VBoxContainer"), NodePath("Warning"), NodePath("LogIn")]

View File

@ -192,4 +192,4 @@ Game={
"hide_selection": false,
"select_mode": 0
}
selected_nodes=Array[NodePath]([NodePath("/root/@EditorNode@21272/@Panel@14/@VBoxContainer@15/DockHSplitLeftL/DockHSplitLeftR/DockHSplitMain/@VBoxContainer@26/DockVSplitCenter/@VSplitContainer@54/@VBoxContainer@55/@EditorMainScreen@102/MainScreen/@CanvasItemEditor@11482/@VSplitContainer@11134/@HSplitContainer@11136/@HSplitContainer@11138/@Control@11139/@SubViewportContainer@11140/@SubViewport@11141/Node2D")])
selected_nodes=Array[NodePath]([NodePath("/root/@EditorNode@21272/@Panel@14/@VBoxContainer@15/DockHSplitLeftL/DockHSplitLeftR/DockHSplitMain/@VBoxContainer@26/DockVSplitCenter/@VSplitContainer@54/@VBoxContainer@55/@EditorMainScreen@102/MainScreen/@CanvasItemEditor@11482/@VSplitContainer@11134/@HSplitContainer@11136/@HSplitContainer@11138/@Control@11139/@SubViewportContainer@11140/@SubViewport@11141/Configuration/Blocker")])

View File

@ -1,5 +1,5 @@
[folding]
node_unfolds=[NodePath("MenuButton"), PackedStringArray("Layout", "Layout/Transform", "icon"), NodePath("HBoxContainer"), PackedStringArray("Layout", "Theme Overrides", "Theme Overrides/constants"), NodePath("HBoxContainer/VBoxContainer"), PackedStringArray("Layout", "Layout/Transform", "Layout/Container Sizing"), NodePath("HBoxContainer/VBoxContainer/Label"), PackedStringArray("BiDi", "Theme Overrides", "Theme Overrides/font_sizes", "Theme Overrides/fonts"), NodePath("HBoxContainer/VBoxContainer/TilesContainer"), PackedStringArray("Layout", "Layout/Transform", "Texture", "Layout/Container Sizing"), NodePath("HBoxContainer/VBoxContainer2"), PackedStringArray("Layout", "Layout/Container Sizing"), NodePath("HBoxContainer/VBoxContainer2/Label"), PackedStringArray("Theme Overrides", "Theme Overrides/font_sizes"), NodePath("HBoxContainer/VBoxContainer2/GameBoardContainer"), PackedStringArray("Layout", "Layout/Transform", "Layout/Container Sizing"), NodePath("HBoxContainer/VBoxContainer2/GameBoardContainer/GameBoard"), PackedStringArray("Layout", "Layout/Transform"), NodePath("HBoxContainer/VBoxContainer2/GameBoardContainer/GameBoard/GridContainer"), PackedStringArray("Layout", "Layout/Container Sizing", "Layout/Transform")]
resource_unfolds=[]
nodes_folded=[]
node_unfolds=[NodePath("."), PackedStringArray("Layout"), NodePath("VBoxContainer"), PackedStringArray("Layout"), NodePath("VBoxContainer/MenuButton"), PackedStringArray("Layout", "Layout/Transform", "icon", "Layout/Container Sizing", "Theme Overrides", "Theme Overrides/constants"), NodePath("VBoxContainer/HBoxContainer"), PackedStringArray("Layout", "Theme Overrides", "Theme Overrides/constants", "Layout/Transform"), NodePath("VBoxContainer/HBoxContainer/VBoxContainer"), PackedStringArray("Layout", "Layout/Transform", "Layout/Container Sizing"), NodePath("VBoxContainer/HBoxContainer/VBoxContainer/Label"), PackedStringArray("BiDi", "Theme Overrides", "Theme Overrides/font_sizes", "Theme Overrides/fonts"), NodePath("VBoxContainer/HBoxContainer/VBoxContainer/TilesContainer"), PackedStringArray("Layout", "Layout/Transform", "Texture", "Layout/Container Sizing"), NodePath("VBoxContainer/HBoxContainer/VBoxContainer2"), PackedStringArray("Layout", "Layout/Container Sizing"), NodePath("VBoxContainer/HBoxContainer/VBoxContainer2/Label"), PackedStringArray("Theme Overrides", "Theme Overrides/font_sizes"), NodePath("VBoxContainer/HBoxContainer/VBoxContainer2/GameBoardContainer"), PackedStringArray("Layout", "Layout/Transform", "Layout/Container Sizing"), NodePath("VBoxContainer/HBoxContainer/VBoxContainer2/GameBoardContainer/GameBoard"), PackedStringArray("Layout", "Theme", "Theme Overrides", "Theme Overrides/styles"), NodePath("VBoxContainer/HBoxContainer/VBoxContainer2/GameBoardContainer/GameBoard/GridContainer"), PackedStringArray("Layout", "Layout/Container Sizing", "Layout/Transform"), NodePath("WinPopup/ColorRect"), PackedStringArray("Layout", "Layout/Container Sizing"), NodePath("WinPopup/VBoxContainer"), PackedStringArray("Layout"), NodePath("WinPopup/VBoxContainer/victory_label"), PackedStringArray("Theme Overrides", "Theme Overrides/colors"), NodePath("WinPopup/VBoxContainer/duration_label"), PackedStringArray("Theme Overrides", "Theme Overrides/styles", "Theme Overrides/colors"), NodePath("WinPopup/VBoxContainer/fail_count_label"), PackedStringArray("Theme Overrides", "Theme Overrides/colors"), NodePath("WinPopup/VBoxContainer/exit_endgame_button"), PackedStringArray("Layout", "Layout/Container Sizing", "Theme Overrides", "Theme Overrides/styles", "theme_override_styles/normal"), NodePath("Blocker"), PackedStringArray("Layout", "Layout/Transform")]
resource_unfolds=["res://scenes/Game.tscn::StyleBoxEmpty_cpr0p", PackedStringArray(), "res://scenes/Game.tscn::StyleBoxFlat_cpr0p", PackedStringArray()]
nodes_folded=[NodePath("WinPopup"), NodePath("WinPopup/VBoxContainer")]

View File

@ -1,12 +1,14 @@
Button
Label
VBoxContainer
Control
MarginContainer
ColorRect
Window
PopupPanel
Button
LineEdit
Label
Popup
Panel
MenuButton
ColorPickerButton
Control
HBoxContainer
AudioStreamPlayer
TextureRect
GridContainer
PanelContainer

View File

@ -2,14 +2,14 @@
dock_3_selected_tab_idx=0
dock_4_selected_tab_idx=0
dock_5_selected_tab_idx=1
dock_5_selected_tab_idx=0
dock_floating={}
dock_filesystem_h_split_offset=240
dock_filesystem_v_split_offset=0
dock_filesystem_display_mode=0
dock_filesystem_file_sort=0
dock_filesystem_file_list_display_mode=1
dock_filesystem_selected_paths=PackedStringArray("res://scenes/Game.tscn")
dock_filesystem_selected_paths=PackedStringArray("res://scripts/game_data.gd")
dock_filesystem_uncollapsed_paths=PackedStringArray("Favorites", "res://", "res://scripts/", "res://scenes/")
dock_node_current_tab=0
dock_history_include_scene=true
@ -28,11 +28,11 @@ dock_5="Inspector,Node,History"
[EditorNode]
open_scenes=PackedStringArray("res://scenes/Game.tscn", "res://scenes/Configuration.tscn")
open_scenes=PackedStringArray("res://scenes/Configuration.tscn", "res://scenes/Game.tscn")
current_scene="res://scenes/Game.tscn"
center_split_offset=0
selected_default_debugger_tab_idx=0
selected_main_editor_idx=2
selected_main_editor_idx=0
selected_bottom_panel_item=0
[EditorWindow]
@ -44,8 +44,8 @@ size=Vector2i(1024, 1000)
[ScriptEditor]
open_scripts=["res://scripts/animal_tile.gd", "res://scripts/configuration.gd", "res://scripts/game_data.gd", "res://scripts/image_loader.gd", "res://scripts/node_2d.gd", "res://scripts/screen_manager.gd"]
selected_script="res://scripts/game_data.gd"
open_scripts=["res://scripts/animal_tile.gd", "res://scripts/configuration.gd", "res://scripts/game.gd", "res://scripts/game_data.gd", "res://scripts/image_loader.gd", "res://scripts/screen_manager.gd"]
selected_script="res://scripts/configuration.gd"
open_help=[]
script_split_offset=200
list_split_offset=0

View File

@ -1,6 +1,6 @@
fc8a56933c4b1c8d796fdb8f7a9f9475
::res://::1744408654
export_presets.cfg::TextFile::-1::1744399092::0::1::::<><><>0<>0<><>::
::res://::1744835306
export_presets.cfg::TextFile::-1::1744834849::0::1::::<><><>0<>0<><>::
icon.svg::CompressedTexture2D/CompressedTexture2D::4846091670585274137::1744195706::1744195716::1::::<><><>0<>0<>a6ef899d0bda3cdd63eaa6b079d03aca<>res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex::
::res://audios/::1744295153
instrucciones.mp3::AudioStreamMP3/AudioStreamMP3::7110748935779360531::1744295152::1744295153::1::::<><><>0<>0<>907b78c75c0c4deb72d14e7a74dd7acf<>res://.godot/imported/instrucciones.mp3-3e910247f8d0baa2378a660539fef5b4.mp3str::
@ -60,14 +60,14 @@ vaca_color.png::CompressedTexture2D/CompressedTexture2D::1639453517109408540::17
vaca_sombra.png::CompressedTexture2D/CompressedTexture2D::4137840386567035395::1744226338::1744226677::1::::<><><>0<>0<>8b8f93705ab813c8fda24891062e2b93<>res://.godot/imported/vaca_sombra.png-87bf77b3bedacf2de6553221767d8158.ctex::
zorro_color.png::CompressedTexture2D/CompressedTexture2D::1666546973926131984::1744220372::1744222652::1::::<><><>0<>0<>507db7ef7a8e54c877af1f7c2e943778<>res://.godot/imported/zorro_color.png-9357deebbe773a59422357e0f482914f.ctex::
zorro_sombra.png::CompressedTexture2D/CompressedTexture2D::6252548807644359177::1744226356::1744226677::1::::<><><>0<>0<>dd376ca5b7be9cc4c9ab8247eb78f99a<>res://.godot/imported/zorro_sombra.png-a7d9fb62668d52352c13e90c900ac2bc.ctex::
::res://scenes/::1744404395
Configuration.tscn::PackedScene::6729908559101085089::1744403417::0::1::::<><><>0<>0<><>::uid://ctge47k34s7yi::::res://scripts/configuration.gd
Game.tscn::PackedScene::7300647384769136354::1744404395::0::1::::<><><>0<>0<><>::uid://3qvb4d882mqd::::res://scripts/node_2d.gd<>uid://c8kq84p5btav8::::res://audios/instrucciones.mp3<>uid://bkwdw0l43i15v::::res://images/menu_logo.png
::res://scripts/::1744404395
animal_tile.gd::GDScript::4714635075097887840::1744403019::0::1::::AnimalTile<>Node2D<><>0<>0<><>::
configuration.gd::GDScript::6119112016534423576::1744402008::0::1::::<>Control<><>0<>0<><>::
game_data.gd::GDScript::1767393862001390866::1744404395::0::1::::<>Node<><>0<>0<><>::
::res://scenes/::1744835032
Configuration.tscn::PackedScene::6729908559101085089::1744835032::0::1::::<><><>0<>0<><>::uid://ctge47k34s7yi::::res://scripts/configuration.gd
Game.tscn::PackedScene::7300647384769136354::1744834812::0::1::::<><><>0<>0<><>::uid://3qvb4d882mqd::::res://scripts/game.gd<>uid://c8kq84p5btav8::::res://audios/instrucciones.mp3<>uid://bkwdw0l43i15v::::res://images/menu_logo.png
::res://scripts/::1744834810
animal_tile.gd::GDScript::4714635075097887840::1744834515::0::1::::AnimalTile<>Node2D<><>0<>0<><>::
configuration.gd::GDScript::6119112016534423576::1744834810::0::1::::<>Control<><>0<>0<><>::
game.gd::GDScript::1999596037927974939::1744834409::0::1::::<>Control<><>0<>0<><>::
game_data.gd::GDScript::1767393862001390866::1744833131::0::1::::<>Node<><>0<>0<><>::
image_loader.gd::GDScript/GDScript::4945911806681378795::1744289398::0::1::::ImageLoader<>Node<><>0<>0<><>::
node_2d.gd::GDScript::1999596037927974939::1744403411::0::1::::<>Node2D<><>0<>0<><>::
screen_manager.gd::GDScript/GDScript::6637911554621855883::1744315379::0::1::::<>Node<><>0<>0<><>::
screen_manager.tscn::PackedScene::1657251017967126927::1744396137::0::1::::<><><>0<>0<><>::
screen_manager.tscn::PackedScene/PackedScene::564416849166704526::1744815684::0::1::::<><><>0<>0<><>::

View File

@ -1,5 +1,2 @@
res://scenes/Game.tscn
res://scripts/game_data.gd
res://scripts/node_2d.gd
res://scripts/configuration.gd
res://scenes/Configuration.tscn
res://scripts/configuration.gd

View File

@ -0,0 +1,3 @@
[folding]
sections_unfolded=PackedStringArray()

View File

@ -17,9 +17,14 @@ last_selected_language="GDScript"
[recent_files]
scripts=["Object", "res://scenes/configuration.gd", "res://scripts/screen_manager.gd", "res://scripts/game_data.gd", "res://image_loader.gd", "res://export_presets.cfg", "res://number_title.gd", "res://node_2d.gd"]
scenes=["res://scenes/Configuration.tscn", "res://scenes/Game.tscn"]
scenes=["res://scenes/Game.tscn", "res://scenes/Configuration.tscn", "res://scripts/screen_manager.tscn"]
[export_options]
default_filename="Empareja las sombras"
export_debug=true
[color_picker]
picker_shape=3
recent_presets=PackedColorArray(0.896849, 0.408015, 0.615551, 1, 0.895487, 0.454204, 0.346526, 1, 0.867944, 0.423967, 0.666011, 1, 0.588235, 0.654902, 0.686275, 1, 0.196078, 0.309804, 0.368627, 1, 0.8, 0.8, 0.8, 1, 5.0812e-05, 0.000128423, 0.000185361, 0.784314, 0, 0, 0, 1, 0.196078, 0.309804, 0.368627, 0.784314)

View File

@ -20,8 +20,8 @@ state={
"column": 0,
"folded_lines": Array[int]([]),
"h_scroll_position": 0,
"row": 89,
"scroll_position": 71.0,
"row": 15,
"scroll_position": 0.0,
"selection": false,
"syntax_highlighter": "GDScript"
}
@ -31,24 +31,10 @@ state={
state={
"bookmarks": PackedInt32Array(),
"breakpoints": PackedInt32Array(),
"column": 2,
"column": 47,
"folded_lines": Array[int]([]),
"h_scroll_position": 0,
"row": 32,
"scroll_position": 10.0,
"selection": false,
"syntax_highlighter": "GDScript"
}
[res://scripts/node_2d.gd]
state={
"bookmarks": PackedInt32Array(),
"breakpoints": PackedInt32Array(),
"column": 0,
"folded_lines": Array[int]([]),
"h_scroll_position": 0,
"row": 182,
"row": 9,
"scroll_position": 0.0,
"selection": false,
"syntax_highlighter": "GDScript"
@ -59,12 +45,16 @@ state={
state={
"bookmarks": PackedInt32Array(),
"breakpoints": PackedInt32Array(),
"column": 28,
"column": 0,
"folded_lines": Array[int]([]),
"h_scroll_position": 0,
"row": 18,
"scroll_position": 140.0,
"selection": false,
"row": 3,
"scroll_position": 0.0,
"selection": true,
"selection_from_column": 0,
"selection_from_line": 3,
"selection_to_column": 30,
"selection_to_line": 3,
"syntax_highlighter": "GDScript"
}
@ -87,10 +77,24 @@ state={
state={
"bookmarks": PackedInt32Array(),
"breakpoints": PackedInt32Array(),
"column": 30,
"column": 18,
"folded_lines": Array[int]([]),
"h_scroll_position": 0,
"row": 44,
"row": 11,
"scroll_position": 9.0,
"selection": false,
"syntax_highlighter": "GDScript"
}
[res://scripts/game.gd]
state={
"bookmarks": PackedInt32Array(),
"breakpoints": PackedInt32Array(),
"column": 21,
"folded_lines": Array[int]([]),
"h_scroll_position": 0,
"row": 13,
"scroll_position": 0.0,
"selection": false,
"syntax_highlighter": "GDScript"

View File

@ -1,3 +1,3 @@
res://scenes/Game.tscn::470d2ca5918c266d5f5ad41f90064b19::1744399048::res://.godot/exported/133200997/export-ff8ceb9b2bd5b48777d3d52e811276ab-Game.scn
res://scenes/Configuration.tscn::c438d452251509b6acf75454df33bea5::1744399048::res://.godot/exported/133200997/export-9342d86e93843c4fab70a2c0224d3fd3-Configuration.scn
res://scripts/screen_manager.tscn::9988fbb1a6b9e1613010f5ccda4bc922::1744396137::res://.godot/exported/133200997/export-d70c5745a12c569d3ecc03f08fad1e89-screen_manager.scn
res://scenes/Game.tscn::c040271b6470fca2a39ef829cb0b3f75::1744834812::res://.godot/exported/133200997/export-ff8ceb9b2bd5b48777d3d52e811276ab-Game.scn
res://scenes/Configuration.tscn::dad3371c7771ec5d14ee92b8b60b036a::1744834812::res://.godot/exported/133200997/export-9342d86e93843c4fab70a2c0224d3fd3-Configuration.scn
res://scripts/screen_manager.tscn::3772d0b47a11041194608177b882051d::1744815684::res://.godot/exported/133200997/export-d70c5745a12c569d3ecc03f08fad1e89-screen_manager.scn

View File

@ -36,7 +36,7 @@ architectures/x86_64=false
version/code=1
version/name=""
package/unique_name="com.andresgmoran.$genname"
package/name="g g"
package/name="Empareja las sombras"
package/signed=true
package/app_category=2
package/retain_data_on_uninstall=false

View File

@ -1,61 +1,124 @@
[gd_scene load_steps=2 format=3 uid="uid://c25au08um2kxt"]
[gd_scene load_steps=9 format=3 uid="uid://c25au08um2kxt"]
[ext_resource type="Script" uid="uid://ctge47k34s7yi" path="res://scripts/configuration.gd" id="1_d6xro"]
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_742ft"]
bg_color = Color(0.588235, 0.654902, 0.686275, 1)
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_rjxe2"]
bg_color = Color(0.588235, 0.654902, 0.686275, 1)
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_hjuae"]
bg_color = Color(0.196078, 0.309804, 0.368627, 1)
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_d6xro"]
bg_color = Color(0.8, 0.8, 0.8, 1)
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_u2atv"]
bg_color = Color(0.588235, 0.654902, 0.686275, 1)
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_khph0"]
bg_color = Color(0.588235, 0.654902, 0.686275, 1)
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_1f7ew"]
bg_color = Color(0.196078, 0.309804, 0.368627, 1)
[node name="Configuration" type="Control"]
layout_mode = 3
anchors_preset = 0
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
script = ExtResource("1_d6xro")
[node name="VBoxContainer" type="VBoxContainer" parent="."]
layout_mode = 0
offset_left = 180.0
offset_top = 344.0
offset_right = 1794.0
offset_bottom = 731.0
[node name="MarginContainer" type="MarginContainer" parent="."]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
theme_override_constants/margin_left = 30
[node name="Label" type="Label" parent="VBoxContainer"]
[node name="VBoxContainer" type="VBoxContainer" parent="MarginContainer"]
layout_mode = 2
theme_override_constants/separation = 20
alignment = 1
[node name="Label6" type="Label" parent="MarginContainer/VBoxContainer"]
layout_mode = 2
theme_override_colors/font_color = Color(0.196078, 0.309804, 0.368627, 1)
theme_override_font_sizes/font_size = 40
text = "CONFIGURACIÓN"
horizontal_alignment = 1
vertical_alignment = 1
[node name="Label" type="Label" parent="MarginContainer/VBoxContainer"]
layout_mode = 2
theme_override_colors/font_color = Color(0.196078, 0.309804, 0.368627, 1)
theme_override_font_sizes/font_size = 30
text = "Selecciona un jugador"
[node name="residents_menu" type="MenuButton" parent="VBoxContainer"]
[node name="residents_menu" type="MenuButton" parent="MarginContainer/VBoxContainer"]
custom_minimum_size = Vector2(1000, 30)
layout_mode = 2
size_flags_horizontal = 0
theme_override_colors/font_color = Color(0.196078, 0.309804, 0.368627, 1)
theme_override_styles/normal = SubResource("StyleBoxFlat_742ft")
text = "Residentes"
flat = false
[node name="Label2" type="Label" parent="VBoxContainer"]
[node name="Label2" type="Label" parent="MarginContainer/VBoxContainer"]
layout_mode = 2
theme_override_colors/font_color = Color(0.196078, 0.309804, 0.368627, 1)
theme_override_font_sizes/font_size = 30
text = "Selecciona el color de fondo"
[node name="bg_color_picker" type="ColorPickerButton" parent="VBoxContainer"]
custom_minimum_size = Vector2(200, 70)
[node name="bg_color_picker" type="ColorPickerButton" parent="MarginContainer/VBoxContainer"]
custom_minimum_size = Vector2(250, 120)
layout_mode = 2
size_flags_horizontal = 0
size_flags_vertical = 0
color = Color(1, 1, 1, 1)
[node name="Label3" type="Label" parent="VBoxContainer"]
[node name="Label3" type="Label" parent="MarginContainer/VBoxContainer"]
layout_mode = 2
theme_override_colors/font_color = Color(0.196078, 0.309804, 0.368627, 1)
theme_override_font_sizes/font_size = 30
text = "Selecciona el color de las líneas de las fichas"
[node name="tiles_lines_color_picker" type="ColorPickerButton" parent="VBoxContainer"]
custom_minimum_size = Vector2(200, 70)
[node name="tiles_lines_color_picker" type="ColorPickerButton" parent="MarginContainer/VBoxContainer"]
custom_minimum_size = Vector2(250, 120)
layout_mode = 2
size_flags_horizontal = 0
size_flags_vertical = 0
color = Color(0.976471, 0, 0, 1)
[node name="Label4" type="Label" parent="VBoxContainer"]
[node name="Label4" type="Label" parent="MarginContainer/VBoxContainer"]
layout_mode = 2
theme_override_colors/font_color = Color(0.196078, 0.309804, 0.368627, 1)
theme_override_font_sizes/font_size = 30
text = "Selecciona el color de las líneas del tablero"
[node name="table_lines_color_picker" type="ColorPickerButton" parent="VBoxContainer"]
custom_minimum_size = Vector2(200, 70)
[node name="table_lines_color_picker" type="ColorPickerButton" parent="MarginContainer/VBoxContainer"]
custom_minimum_size = Vector2(250, 120)
layout_mode = 2
size_flags_horizontal = 0
color = Color(0, 0, 0.972549, 1)
[node name="Label5" type="Label" parent="VBoxContainer"]
[node name="Label5" type="Label" parent="MarginContainer/VBoxContainer"]
layout_mode = 2
theme_override_colors/font_color = Color(0.196078, 0.309804, 0.368627, 1)
theme_override_font_sizes/font_size = 30
text = "Selecciona el nivel"
[node name="levels_menu" type="MenuButton" parent="VBoxContainer"]
[node name="levels_menu" type="MenuButton" parent="MarginContainer/VBoxContainer"]
custom_minimum_size = Vector2(1000, 30)
layout_mode = 2
size_flags_horizontal = 0
theme_override_colors/font_color = Color(0.196078, 0.309804, 0.368627, 1)
theme_override_styles/normal = SubResource("StyleBoxFlat_rjxe2")
text = "Niveles"
flat = false
item_count = 3
@ -66,8 +129,102 @@ popup/item_1/id = 1
popup/item_2/text = "Dificil"
popup/item_2/id = 2
[node name="Button" type="Button" parent="VBoxContainer"]
[node name="Button" type="Button" parent="MarginContainer/VBoxContainer"]
custom_minimum_size = Vector2(1000, 50)
layout_mode = 2
size_flags_horizontal = 4
size_flags_vertical = 4
theme_override_styles/normal = SubResource("StyleBoxFlat_hjuae")
text = "EMPEZAR JUEGO"
[connection signal="pressed" from="VBoxContainer/Button" to="." method="_on_button_pressed"]
[node name="Warning" type="Popup" parent="."]
title = "Alerta ⚠️"
borderless = false
[node name="Panel" type="Panel" parent="Warning"]
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
theme_override_styles/panel = SubResource("StyleBoxFlat_d6xro")
[node name="LogIn" type="Window" parent="."]
title = "Iniciar sesion"
initial_position = 2
size = Vector2i(500, 230)
visible = false
[node name="ColorRect" type="ColorRect" parent="LogIn"]
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
color = Color(0.8, 0.8, 0.8, 1)
[node name="VBoxContainer" type="VBoxContainer" parent="LogIn"]
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -72.0
offset_top = -77.5
offset_right = 72.0
offset_bottom = 77.5
grow_horizontal = 2
grow_vertical = 2
theme_override_constants/separation = 10
[node name="Label" type="Label" parent="LogIn/VBoxContainer"]
layout_mode = 2
size_flags_vertical = 3
theme_override_colors/font_color = Color(0.196078, 0.309804, 0.368627, 1)
text = "Correo electronico"
horizontal_alignment = 1
vertical_alignment = 1
[node name="EmailInput" type="LineEdit" parent="LogIn/VBoxContainer"]
custom_minimum_size = Vector2(400, 0)
layout_mode = 2
size_flags_horizontal = 4
size_flags_vertical = 6
theme_override_colors/font_color = Color(0.196078, 0.309804, 0.368627, 1)
theme_override_styles/normal = SubResource("StyleBoxFlat_u2atv")
[node name="Label2" type="Label" parent="LogIn/VBoxContainer"]
layout_mode = 2
theme_override_colors/font_color = Color(0.196078, 0.309804, 0.368627, 1)
text = "Contrseña"
horizontal_alignment = 1
vertical_alignment = 1
[node name="PasswordInput" type="LineEdit" parent="LogIn/VBoxContainer"]
custom_minimum_size = Vector2(400, 0)
layout_mode = 2
size_flags_horizontal = 4
size_flags_vertical = 6
theme_override_colors/font_color = Color(0.196078, 0.309804, 0.368627, 1)
theme_override_styles/normal = SubResource("StyleBoxFlat_khph0")
[node name="LogInButton" type="Button" parent="LogIn/VBoxContainer"]
custom_minimum_size = Vector2(250, 50)
layout_mode = 2
size_flags_horizontal = 4
size_flags_vertical = 6
theme_override_styles/normal = SubResource("StyleBoxFlat_1f7ew")
text = "Iniciar sesion"
[node name="Blocker" type="ColorRect" parent="."]
visible = false
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
color = Color(0.196078, 0.309804, 0.368627, 0.784314)
[connection signal="pressed" from="MarginContainer/VBoxContainer/Button" to="." method="_on_button_pressed"]
[connection signal="pressed" from="LogIn/VBoxContainer/LogInButton" to="." method="_on_log_in_button_pressed"]

View File

@ -1,94 +1,147 @@
[gd_scene load_steps=4 format=3 uid="uid://dcaquiy5tvss5"]
[gd_scene load_steps=6 format=3 uid="uid://dcaquiy5tvss5"]
[ext_resource type="Script" uid="uid://3qvb4d882mqd" path="res://scripts/node_2d.gd" id="1_ibkli"]
[ext_resource type="Script" uid="uid://3qvb4d882mqd" path="res://scripts/game.gd" id="1_ibkli"]
[ext_resource type="AudioStream" uid="uid://c8kq84p5btav8" path="res://audios/instrucciones.mp3" id="2_qbsmt"]
[ext_resource type="Texture2D" uid="uid://bkwdw0l43i15v" path="res://images/menu_logo.png" id="3_cpr0p"]
[node name="Node2D" type="Node2D"]
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_cpr0p"]
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_cpr0p"]
bg_color = Color(0.196078, 0.309804, 0.368627, 1)
[node name="Node2D" type="Control"]
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
script = ExtResource("1_ibkli")
[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="."]
stream = ExtResource("2_qbsmt")
[node name="MenuButton" type="MenuButton" parent="."]
offset_left = 11.0
offset_top = 3.0
offset_right = 88.0
offset_bottom = 87.0
[node name="VBoxContainer" type="VBoxContainer" parent="."]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
[node name="MenuButton" type="MenuButton" parent="VBoxContainer"]
layout_mode = 2
size_flags_horizontal = 0
size_flags_vertical = 4
icon = ExtResource("3_cpr0p")
[node name="HBoxContainer" type="HBoxContainer" parent="."]
[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer"]
layout_direction = 2
offset_left = 53.0
offset_right = 1872.0
offset_bottom = 1073.0
layout_mode = 2
theme_override_constants/separation = 100
alignment = 1
[node name="VBoxContainer" type="VBoxContainer" parent="HBoxContainer"]
[node name="VBoxContainer" type="VBoxContainer" parent="VBoxContainer/HBoxContainer"]
layout_mode = 2
alignment = 1
[node name="Label" type="Label" parent="HBoxContainer/VBoxContainer"]
[node name="Label" type="Label" parent="VBoxContainer/HBoxContainer/VBoxContainer"]
layout_mode = 2
theme_override_font_sizes/font_size = 44
text = "FICHAS"
horizontal_alignment = 1
vertical_alignment = 1
[node name="TilesContainer" type="GridContainer" parent="HBoxContainer/VBoxContainer"]
[node name="TilesContainer" type="GridContainer" parent="VBoxContainer/HBoxContainer/VBoxContainer"]
custom_minimum_size = Vector2(760, 880)
layout_direction = 2
layout_mode = 2
columns = 5
[node name="VBoxContainer2" type="VBoxContainer" parent="HBoxContainer"]
[node name="VBoxContainer2" type="VBoxContainer" parent="VBoxContainer/HBoxContainer"]
layout_mode = 2
alignment = 1
[node name="Label" type="Label" parent="HBoxContainer/VBoxContainer2"]
[node name="Label" type="Label" parent="VBoxContainer/HBoxContainer/VBoxContainer2"]
layout_mode = 2
theme_override_font_sizes/font_size = 44
text = "TABLERO"
horizontal_alignment = 1
vertical_alignment = 1
[node name="GameBoardContainer" type="Control" parent="HBoxContainer/VBoxContainer2"]
[node name="GameBoardContainer" type="Control" parent="VBoxContainer/HBoxContainer/VBoxContainer2"]
custom_minimum_size = Vector2(760, 880)
layout_mode = 2
[node name="GameBoard" type="PanelContainer" parent="HBoxContainer/VBoxContainer2/GameBoardContainer"]
[node name="GameBoard" type="PanelContainer" parent="VBoxContainer/HBoxContainer/VBoxContainer2/GameBoardContainer"]
layout_mode = 0
offset_left = 6.0
offset_top = 3.0
offset_right = 766.0
offset_bottom = 883.0
theme_override_styles/panel = SubResource("StyleBoxEmpty_cpr0p")
[node name="GridContainer" type="GridContainer" parent="HBoxContainer/VBoxContainer2/GameBoardContainer/GameBoard"]
[node name="GridContainer" type="GridContainer" parent="VBoxContainer/HBoxContainer/VBoxContainer2/GameBoardContainer/GameBoard"]
custom_minimum_size = Vector2(760, 880)
layout_mode = 2
size_flags_horizontal = 0
size_flags_vertical = 0
columns = 5
[node name="WinPopup" type="PopupPanel" parent="."]
[node name="WinPopup" type="Window" parent="."]
initial_position = 1
size = Vector2i(500, 200)
visible = false
[node name="ColorRect" type="ColorRect" parent="WinPopup"]
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
color = Color(0.8, 0.8, 0.8, 1)
[node name="VBoxContainer" type="VBoxContainer" parent="WinPopup"]
offset_left = 4.0
offset_top = 4.0
offset_right = 96.0
offset_bottom = 96.0
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -46.0
offset_top = -56.0
offset_right = 46.0
offset_bottom = 56.0
grow_horizontal = 2
grow_vertical = 2
[node name="victory_label" type="Label" parent="WinPopup/VBoxContainer"]
layout_mode = 2
theme_override_colors/font_color = Color(0.196078, 0.309804, 0.368627, 1)
[node name="duration_label" type="Label" parent="WinPopup/VBoxContainer"]
layout_mode = 2
theme_override_colors/font_color = Color(0.196078, 0.309804, 0.368627, 1)
[node name="fail_count_label" type="Label" parent="WinPopup/VBoxContainer"]
layout_mode = 2
theme_override_colors/font_color = Color(0.196078, 0.309804, 0.368627, 1)
[node name="exit_endgame_button" type="Button" parent="WinPopup/VBoxContainer"]
custom_minimum_size = Vector2(250, 50)
layout_mode = 2
size_flags_horizontal = 4
size_flags_vertical = 6
theme_override_styles/normal = SubResource("StyleBoxFlat_cpr0p")
text = "SALIR"
[node name="Blocker" type="ColorRect" parent="."]
visible = false
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
color = Color(0.196078, 0.309804, 0.368627, 0.784314)
[connection signal="pressed" from="WinPopup/VBoxContainer/exit_endgame_button" to="." method="_on_exit_button_pressed"]

View File

@ -44,10 +44,10 @@ func get_tile_rect() -> Rect2:
func check_drop_on_board():
# Ruta actualizada según jerarquía corregida
if not get_tree().get_root().has_node("Node2D/HBoxContainer/VBoxContainer2/GameBoardContainer/GameBoard/GridContainer"):
if not get_tree().get_root().has_node("Node2D/VBoxContainer/HBoxContainer/VBoxContainer2/GameBoardContainer/GameBoard/GridContainer"):
return
var game_board = get_tree().get_root().get_node("Node2D/HBoxContainer/VBoxContainer2/GameBoardContainer/GameBoard/GridContainer")
var game_board = get_tree().get_root().get_node("Node2D/VBoxContainer/HBoxContainer/VBoxContainer2/GameBoardContainer/GameBoard/GridContainer")
var tile_rect = get_tile_rect()
var placed_on_board = false
@ -82,7 +82,7 @@ func check_drop_on_board():
slot.set("is_occupied", true)
queue_free() # Destruimos el tile porque ya está colocado
var tiles_container = get_tree().get_root().get_node("Node2D/HBoxContainer/VBoxContainer/TilesContainer")
var tiles_container = get_tree().get_root().get_node("Node2D/VBoxContainer/HBoxContainer/VBoxContainer/TilesContainer")
if tiles_container.get_child_count() <= 1:
get_tree().get_root().get_node("Node2D").check_win()
placed_on_board = true

View File

@ -1,16 +1,28 @@
extends Control
@onready var levels_menu = $VBoxContainer/levels_menu
@onready var residents_menu = $VBoxContainer/residents_menu
@onready var login_popup = $LogIn
@onready var email_input = $LogIn/VBoxContainer/EmailInput
@onready var password_input = $LogIn/VBoxContainer/PasswordInput
@onready var login_button = $LogIn/VBoxContainer/LogInButton
@onready var levels_menu = $MarginContainer/VBoxContainer/levels_menu
@onready var residents_menu = $MarginContainer/VBoxContainer/residents_menu
var level = -1
var id_player = -1
var id_user = -1
func _ready():
RenderingServer.set_default_clear_color(Color.SKY_BLUE)
RenderingServer.set_default_clear_color("#CCCCCC")
await get_tree().process_frame # Esperar a que todo esté listo
if not GameData.is_logged_in:
login_popup.show()
$Blocker.visible = true
levels_menu.get_popup().connect("id_pressed", self._on_level_selected)
await get_tree().process_frame #Esperar a que se cree HTTPRequest en GameData
var residents = await GameData.get_residents_loaded()
if residents_menu.item_count < residents.size():
@ -20,22 +32,64 @@ func _ready():
residents_menu.get_popup().add_item(full_name, id)
residents_menu.get_popup().connect("id_pressed", self._on_player_selected)
### Metodo para cuando se pulse el boton de iniciar sesion
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 or not user.is_empty():
GameData.is_logged_in = true
id_user = int(user.id)
login_popup.hide()
$Blocker.visible = false
break
if not GameData.is_logged_in:
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)
### Metodo para cuando el usuario elija el nivel en el menu
func _on_level_selected(id):
match id:
0:
level = 1
level = 0
1:
level = 2
level = 1
2:
level = 3
level = 2
### Metodo para cuando el usuario elija el jugador en el menu
func _on_player_selected(id):
id_player = id
### Metodo para cuando el usuario le de al boton de jugar
func _on_button_pressed() -> void:
var bg_color = $VBoxContainer/bg_color_picker.color
var tiles_lines_color = $VBoxContainer/tiles_lines_color_picker.color
var table_lines_color = $VBoxContainer/table_lines_color_picker.color
var bg_color = $MarginContainer/VBoxContainer/bg_color_picker.color
var tiles_lines_color = $MarginContainer/VBoxContainer/tiles_lines_color_picker.color
var table_lines_color = $MarginContainer/VBoxContainer/table_lines_color_picker.color
var warning = Label.new()
warning.text = ""
warning.add_theme_color_override("font_color","#324f5e")
if level == -1:
warning.text = " - Debes seleccionar un nivel\n"
if id_player == -1:
warning.text += " - Debes seleccionar un jugador"
if warning.text != "":
$Warning/Panel.add_child(warning)
$Warning.popup_centered(Vector2(400, 200))
return
var game_scene = preload("res://scenes/Game.tscn").instantiate()
@ -44,8 +98,5 @@ func _on_button_pressed() -> void:
game_scene.table_lines_color = table_lines_color
game_scene.difficulty = level
if id_player != -1:
GameData.start_game(id_player, level)
else:
print("Selecciona un jugador") #Cambiar a popup
GameData.start_game(id_player, id_user, level)
ScreenManager.change_scene(game_scene, self)

View File

@ -1,14 +1,14 @@
extends Node2D
extends Control
@onready var game_board_container = $HBoxContainer/VBoxContainer2/GameBoardContainer
@onready var game_board = $HBoxContainer/VBoxContainer2/GameBoardContainer/GameBoard
@onready var tiles_container = $HBoxContainer/VBoxContainer/TilesContainer
@onready var game_board_container = $VBoxContainer/HBoxContainer/VBoxContainer2/GameBoardContainer
@onready var game_board = $VBoxContainer/HBoxContainer/VBoxContainer2/GameBoardContainer/GameBoard
@onready var tiles_container = $VBoxContainer/HBoxContainer/VBoxContainer/TilesContainer
@onready var audio_player = $AudioStreamPlayer
@export var bg_color: Color = Color(1, 0, 0)
@export var table_lines_color: Color = Color(1, 0, 0)
@export var tiles_lines_color: Color = Color(1, 0, 0)
@export var difficulty = 1 # 1: Fácil, 2: Medio, 3: Difícil
@export var difficulty = -1 # 0: Fácil, 1: Medio, 2: Difícil
var board_size = Vector2i(5, 5)
var game_numbers = []
@ -17,20 +17,20 @@ var used_animals = []
func _ready():
RenderingServer.set_default_clear_color(bg_color)
set_difficulty() # Cambiá a 2 o 3 para probar otros niveles
set_difficulty()
audio_player.play()
$MenuButton.get_popup().add_item("Reproducir sonido", 0)
$MenuButton.get_popup().add_item("Salir", 1)
$MenuButton.get_popup().connect("id_pressed", self._on_menu_item_selected)
$VBoxContainer/MenuButton.get_popup().add_item("Reproducir sonido", 0)
$VBoxContainer/MenuButton.get_popup().add_item("Salir", 1)
$VBoxContainer/MenuButton.get_popup().connect("id_pressed", self._on_menu_item_selected)
func set_difficulty():
match difficulty:
1:
0:
board_size = Vector2i(3, 3)
2:
1:
board_size = Vector2i(4, 4)
3:
2:
board_size = Vector2i(5, 5)
setup_game()
@ -194,16 +194,12 @@ func check_win():
if all_matched:
GameData.end_game()
GameData.send_game_data()
var popup = $WinPopup
popup.get_node("VBoxContainer/victory_label").text = "✅ ¡Has ganado!"
popup.get_node("VBoxContainer/duration_label").text = "🕐 Tiempo total: %s segundos" % GameData.get_duration()
popup.get_node("VBoxContainer/fail_count_label").text = "❌ Fallos totales: %s" % GameData.fail_count
popup.popup_centered()
popup.show()
$Blocker.visible = true
func _on_exit_button_pressed() -> void:
func _on_exit_button_pressed():
ScreenManager.go_back_to_previous_scene()
func _on_exit_endgame_button_pressed() -> void:
pass # Replace with function body.

View File

@ -1,21 +1,28 @@
extends Node
# Este script se encarga de comunicarse con la API
var is_logged_in: bool = false
#Señales para saber cuando se recibe los datos
signal users_received(users)
signal residents_received(residents)
signal games_received(games)
var all_users = []
var all_residents = []
var all_games = []
var resident_playing = " "
var user_id = -1
var resident_playing = -1
var start_time: int = 0
var end_time: int = 0
var fail_count: int = 0
var level_game = -1
### Metodo para inicar partida
func start_game(resident, level):
func start_game(resident, user, level):
user_id = user
resident_playing = resident
level_game = level
start_time = Time.get_unix_time_from_system()
@ -24,6 +31,7 @@ func start_game(resident, level):
### Metodo para finalizar partida
func end_game():
end_time = Time.get_unix_time_from_system()
send_game_data()
### Metodo para añadir fallos
func add_fail():
@ -33,6 +41,55 @@ func add_fail():
func get_duration() -> int:
return end_time - start_time
#--------------------------------------COMUNICACION CON LA API-------------------------------------------------
#-------------------------------------GET USERS-------------------------------------------------------
func get_users():
var http_request = HTTPRequest.new()
get_tree().root.add_child(http_request)
var status = http_request.connect(
"request_completed",
Callable(self, "_on_request_get_users").bind(http_request)
)
var url = "http://localhost:8080/resi/users"
var headers = ["User-Agent: Godot"]
var error = http_request.request(url, headers)
if error != OK:
print("Error al hacer GET:", error)
### Metodo para parsear json de residentes y que emite una señal cuando lo tenga
func _on_request_get_users(result, response_code, headers, body, request_node):
print("Código de respuesta:", response_code)
if response_code == 200:
var response_text = body.get_string_from_utf8()
var parsed = JSON.parse_string(response_text)
if parsed != null:
all_users = parsed
print("Users obtenidos:", all_users)
# Emitir la señal para notificar a quien esté conectado
emit_signal("users_received", all_users)
else:
print("Error al parsear JSON")
else:
print("Error del servidor o conexión:", response_code)
request_node.queue_free() # Liberar para evitar error 31
### Metodo que espera a la señal de que se han obtenido y parseado los residentes y los devuelve.
func get_users_loaded() -> Array:
print("Hola")
get_users()
var result = await self.users_received
return result
#--------------------------------------GET RESIDENTES-----------------------------------------------
### Metodo para hacer un get a la api de todos los residentes
@ -45,7 +102,7 @@ func get_residents():
Callable(self, "_on_request_get_residents").bind(http_request)
)
var url = "http://localhost:8080/resi/resident"
var url = "http://localhost:8080/resi/residents"
var headers = ["User-Agent: Godot"]
var error = http_request.request(url, headers)
@ -133,7 +190,7 @@ func send_game_data():
var game_id = 0;
for game in games:
if game.nombre == "Emparejar las sombras":
game_id = game.id
game_id = 1 #game.id
var http_request = HTTPRequest.new()
get_tree().root.add_child(http_request)
@ -143,8 +200,10 @@ func send_game_data():
var data = {
"idJuego": game_id,
"idResidente": resident_playing,
"idUsuario": user_id,
"fallos": fail_count,
"duracion": get_duration()
"duracion": get_duration(),
"dificultad": level_game
}
var json_body = JSON.stringify(data)

View File

@ -1,3 +1,3 @@
[gd_scene format=3 uid="uid://xu1xgs1ivyu6"]
[gd_scene format=3 uid="uid://ibn4lxcaykxy"]
[node name="ScreenManager" type="Node2D"]

View File

@ -0,0 +1,3 @@
[folding]
sections_unfolded=PackedStringArray()

View File

@ -0,0 +1,3 @@
[folding]
sections_unfolded=PackedStringArray()

Some files were not shown because too many files have changed in this diff Show More