AppResidencia/empareja-las-sombras/scripts/game_data.gd

161 lines
4.6 KiB
GDScript

extends Node
# Este script se encarga de comunicarse con la API
#Señales para saber cuando se recibe los datos
signal residents_received(residents)
signal games_received(games)
var all_residents = []
var all_games = []
var resident_playing = " "
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):
resident_playing = resident
level_game = level
start_time = Time.get_unix_time_from_system()
fail_count = 0
### Metodo para finalizar partida
func end_game():
end_time = Time.get_unix_time_from_system()
### Metodo para añadir fallos
func add_fail():
fail_count += 1
### 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 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/resident"
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():
var games = await get_games_loaded()
var game_id = 0;
for game in games:
if game.nombre == "Emparejar las sombras":
game_id = game.id
var http_request = HTTPRequest.new()
get_tree().root.add_child(http_request)
print(game_id)
print(resident_playing)
var data = {
"idJuego": game_id,
"idResidente": resident_playing,
"fallos": fail_count,
"duracion": get_duration()
}
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)