Archived
Nuevos métodos en dbConnector y cambios varios.
Ahora es posible guardar salas en la Base de datos y obtener algunas cosas. Hay muchos dilemas sobre la carga de salas desde DB. Se han hecho pequeños cambios y añadido métodos por aquí y por allá.
This commit is contained in:
@@ -45,7 +45,7 @@ public class GameManager
|
||||
/**
|
||||
* Realiza el guardado del save y de las salas.
|
||||
*/
|
||||
public void SaveGame()
|
||||
public void SaveGameToJSON()
|
||||
{
|
||||
SaveLoader.SaveToJSON(saveData, Gdx.files.local(localSavePath + "save.json"));
|
||||
rmLoader.SaveAllRoomsToJSON();
|
||||
@@ -56,7 +56,7 @@ public class GameManager
|
||||
* No activa ninguna de ellas.
|
||||
* Todo: Probablemente queramos también autentificar al usuario.
|
||||
*/
|
||||
public void LoadGame()
|
||||
public void LoadGameFromJSON()
|
||||
{
|
||||
SaveLoader.LoadFromJSON(Gdx.files.local(localSavePath + "save.json"));
|
||||
|
||||
@@ -84,15 +84,28 @@ public class GameManager
|
||||
prefab.copyTo(roomSave);
|
||||
}
|
||||
|
||||
/**
|
||||
* Realiza la compra de una nueva sala. Para ello:
|
||||
* - Carga la sala por defecto desde el prefab.
|
||||
* - Se comprueba que se tiene dinero.
|
||||
* - Guarda la sala en la ubicación de salas del jugador.
|
||||
* - Resta el dinero que cuesta esta sala.
|
||||
* - Actualiza el Save para indicar que se tiene esa sala.
|
||||
* @param roomID
|
||||
* @return
|
||||
*/
|
||||
public boolean ComprarRoom(String roomID)
|
||||
{
|
||||
//Cargamos la sala por defecto desde el prefab de la misma.
|
||||
rmLoader.LoadRoomFromJSON(Gdx.files.internal(internalRoomDataPath + roomID + ".json"));
|
||||
Room rm = rmLoader.GetRoomByID(roomID);
|
||||
|
||||
//Es necesario cargar la sala primero para saber su precio.
|
||||
if(saveData.dinero < rm.roomPrice)
|
||||
{
|
||||
Gdx.app.log("GameManager", "No tienes dinero para comprar la sala");
|
||||
//Si no se ha comprado, deberíamos descargar la sala.
|
||||
rmLoader.UnloadRoom(roomID);
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -101,10 +114,19 @@ public class GameManager
|
||||
//Cobramos por ella.
|
||||
saveData.dinero -= rm.roomPrice;
|
||||
|
||||
//Fixme: Debería devolver true/false en función de cómo haya ido.
|
||||
//Actualizamos el Save para indicar que se tiene esa sala.
|
||||
saveData.ownedRooms.put(roomID, true);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Realiza las operaciones necesarias para comprar una máquina para la sala activa.
|
||||
* @param mc Prt a la máquina que queremos añadir.
|
||||
* @param posX Posición x para la nueva máquina.
|
||||
* @param posY Posición y para la nueva máquina.
|
||||
* @return True si la compra se ha completado, false si no.
|
||||
*/
|
||||
public boolean ComprarMachine(Machine mc, int posX, int posY)
|
||||
{
|
||||
//Comprobamos si tenemos dinero suficiente.
|
||||
@@ -127,6 +149,20 @@ public class GameManager
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Completa un ciclo del juego y el jugador obtiene el dinero de sus máquinas.
|
||||
*/
|
||||
public void CompletarCiclo()
|
||||
{
|
||||
//Calculamos el dinero obtenido.
|
||||
int dineroObtenido = 0;
|
||||
|
||||
//TODO: ¿Cómo iteramos por las salas?
|
||||
// ¿Iteramos por las cargadas o las que se indican en el Save?
|
||||
|
||||
//Se itera por las salas y se suma su dinero por ciclo al dinero total.
|
||||
saveData.dinero += dineroObtenido;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -77,15 +77,7 @@ public class RoomLoader
|
||||
*/
|
||||
public void SaveRoomToJSON(String roomID, FileHandle file)
|
||||
{
|
||||
Room rSave = loadedRooms.get(roomID);
|
||||
if(rSave == null)
|
||||
{
|
||||
Gdx.app.error("RoomLoader", "No es posible guardar la Room: " + roomID +
|
||||
"; ¿Está cargada?");
|
||||
return;
|
||||
}
|
||||
|
||||
String data = loaderJson.toJson(rSave);
|
||||
String data = GetRoomJSON(roomID);
|
||||
//FileHandle file = Gdx.files.local(path);
|
||||
file.writeString(loaderJson.prettyPrint(data), false);
|
||||
|
||||
@@ -104,6 +96,25 @@ public class RoomLoader
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Devuelve los datos de la sala en formato JSON.
|
||||
* @param roomName Nombre de la sala a obtener.
|
||||
* @return Datos de la sala indicada en formato JSON.
|
||||
*/
|
||||
public String GetRoomJSON(String roomName)
|
||||
{
|
||||
Room rSave = loadedRooms.get(roomName);
|
||||
if(rSave == null)
|
||||
{
|
||||
Gdx.app.error("RoomLoader", "No es posible guardar la Room: " + roomName +
|
||||
"; ¿Está cargada?");
|
||||
return "";
|
||||
}
|
||||
|
||||
String data = loaderJson.toJson(rSave);
|
||||
return data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Descarga una Room dado su ID.
|
||||
* @param roomID ID de la Room a descargar.
|
||||
|
||||
@@ -11,6 +11,7 @@ public class Save
|
||||
{
|
||||
|
||||
int dinero;
|
||||
|
||||
/*
|
||||
Indica si el jugador tiene comprada esa sala y, por tanto, ha de aparecer/cargarse.
|
||||
*/
|
||||
|
||||
@@ -4,11 +4,8 @@ import com.badlogic.gdx.Gdx;
|
||||
import com.badlogic.gdx.files.FileHandle;
|
||||
import com.badlogic.gdx.utils.Json;
|
||||
import com.badlogic.gdx.utils.JsonWriter;
|
||||
import com.mysql.jdbc.Driver;
|
||||
import java.sql.DriverManager;
|
||||
import java.sql.Connection;
|
||||
import java.sql.Statement;
|
||||
import java.sql.ResultSet;
|
||||
|
||||
import java.sql.*;
|
||||
|
||||
/**
|
||||
* Clase estática que realiza todas las interacciones con la BD.
|
||||
@@ -21,6 +18,8 @@ public class dbConnector
|
||||
private static Connection connect = null;
|
||||
private static dbData datosConexion = null;
|
||||
|
||||
private static int IDPartida = -1;
|
||||
|
||||
private static final String localDefaultSavePath = "gameData/";
|
||||
private static final String defaultFileName = "dbData.json";
|
||||
|
||||
@@ -116,13 +115,202 @@ public class dbConnector
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
//TODO: ¿Qué necesito? Creo que el ID de partida...
|
||||
// ¿Dónde lo guardo?
|
||||
public static void SaveRoomToDB()
|
||||
/**
|
||||
* Devuelve el ID de partida del jugador. Utiliza el usuario con el que está autentificado.
|
||||
* Sólo se realiza la consulta una vez, luego el valor se guarda.
|
||||
* @return ID de partida del jugador.
|
||||
*/
|
||||
public static int GetIDPartidaFromDB()
|
||||
{
|
||||
//Como siempre es la misma consulta, podemos reutilizar los datos y ahorrarnos la consulta.
|
||||
if(IDPartida >= 0)
|
||||
{
|
||||
return IDPartida;
|
||||
}
|
||||
|
||||
//Si no tenemos los datos, hacemos la consulta.
|
||||
Statement stt = CrearStatement();
|
||||
|
||||
//Obtenemos el ID de partida.
|
||||
String username = LoginSystem.GetUserName();
|
||||
|
||||
IDPartida = GetIDPartidaFromDB(username);
|
||||
|
||||
return IDPartida;
|
||||
}
|
||||
|
||||
/**
|
||||
* Permite obtener el ID de la partida dado un usuario.
|
||||
* Este método siempre realiza la consulta para obtener este ID.
|
||||
* @param username Nombre del usuario del que obtener la partida.
|
||||
* @return ID de la partida del usuario indicado.
|
||||
*/
|
||||
public static int GetIDPartidaFromDB(String username)
|
||||
{
|
||||
//En este caso, siempre hemos de hacer la consulta.
|
||||
//Creamos el Statement.
|
||||
Statement stt = CrearStatement();
|
||||
|
||||
//Obtenemos el ID de partida.
|
||||
int id = -1;
|
||||
try
|
||||
{
|
||||
ResultSet set = stt.executeQuery("select id from partidas where nickname_usuario = '" + username + "';");
|
||||
id = set.getInt(0);
|
||||
} catch (SQLException e)
|
||||
{
|
||||
Gdx.app.error("dbConnector", "No se ha podido obtener el ID de partida.");
|
||||
}
|
||||
|
||||
//Cerramos el Statement.
|
||||
CerrarStatement(stt);
|
||||
return id;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Sube a la DB el Save y los datos del usuario.
|
||||
* Esto incluye las salas asociadas al mismo.
|
||||
*/
|
||||
public static void UploadSave()
|
||||
{
|
||||
//TODO: Guardar los datos.
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Sube la sala indicada a la BD.
|
||||
* @param roomName Nombre de la sala a guardar.
|
||||
*/
|
||||
public static void SaveRoomToDB(String roomName)
|
||||
{
|
||||
//Obtenemos los datos necesarios.
|
||||
int idPartida = GetIDPartidaFromDB();
|
||||
String roomJSON = RoomLoader.getInstance().GetRoomJSON(roomName);
|
||||
|
||||
//Comprobamos que se han obtenido los datos de la sala.
|
||||
if(roomJSON.equals(""))
|
||||
{
|
||||
Gdx.app.error("dbConnector", "No se puede guardar la sala " + roomName +
|
||||
". No se han podido obtener sus datos.");
|
||||
return;
|
||||
}
|
||||
|
||||
//Creamos el Statement.
|
||||
Statement stt = CrearStatement();
|
||||
|
||||
//Subimos la sala a la DB.
|
||||
try
|
||||
{
|
||||
stt.executeUpdate("update salas set sala_data = '" + roomJSON + "' " +
|
||||
"where nombre = '" + roomName + "' and " +
|
||||
"id_partida = " + idPartida + ";");
|
||||
} catch (SQLException e)
|
||||
{
|
||||
Gdx.app.error("dbConnector", "No se ha podido actualizar la sala " + roomName);
|
||||
}
|
||||
|
||||
//Al terminar, cerramos el Statement.
|
||||
CerrarStatement(stt);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Obtiene los datos de una partida del usuario indicado.
|
||||
* @param username Nombre del usuario.
|
||||
* @return Datos de la partida del usuario.
|
||||
*/
|
||||
public static Save GetSaveDataFromDB(String username)
|
||||
{
|
||||
int idPartidaUser = GetIDPartidaFromDB(username);
|
||||
|
||||
//Creamos el statement.
|
||||
Statement stt = CrearStatement();
|
||||
|
||||
Save s = new Save();
|
||||
//Obtenemos el dinero.
|
||||
try
|
||||
{
|
||||
ResultSet rs = stt.executeQuery("select dinero from partidas where " +
|
||||
"id = " + idPartidaUser + " and " +
|
||||
"nickname_usuario = '" + username + "';");
|
||||
s.dinero = rs.getInt(0);
|
||||
} catch (SQLException e)
|
||||
{
|
||||
Gdx.app.error("dbConnector", "No se ha podido cargar la partida del usuario " + username);
|
||||
}
|
||||
|
||||
//Obtenemos las salas.
|
||||
|
||||
//TODO: Completar la carga del Save.
|
||||
// Supongo que también cargará las salas de ese save.
|
||||
|
||||
|
||||
CerrarStatement(stt);
|
||||
|
||||
return s;
|
||||
}
|
||||
|
||||
public static String GetRoomDataFromDB(String roomName)
|
||||
{
|
||||
//Obtenemos los datos necesarios.
|
||||
int idPartida = GetIDPartidaFromDB();
|
||||
|
||||
//Creamos el Statement.
|
||||
Statement stt = CrearStatement();
|
||||
|
||||
//Obtenemos el JSON de la sala desde la DB.
|
||||
String datosJSON = "";
|
||||
try
|
||||
{
|
||||
ResultSet rs = stt.executeQuery("select sala_data from salas where" +
|
||||
"nombre = '" + roomName + "', " +
|
||||
"id_partida = " + idPartida + ";");
|
||||
datosJSON = rs.getString(0);
|
||||
} catch (SQLException e)
|
||||
{
|
||||
Gdx.app.error("dbConnector", "No se han podido obtener los datos de la " + roomName);
|
||||
}
|
||||
|
||||
return datosJSON;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Crea un nuevo Statement a partir de la conexión y lo devuelve.
|
||||
* @return Statement creado.
|
||||
*/
|
||||
private static Statement CrearStatement()
|
||||
{
|
||||
Statement stt = null;
|
||||
try
|
||||
{
|
||||
stt = connect.createStatement();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
System.err.println("No ha sido posible comunicarse con la BD.");
|
||||
}
|
||||
return stt;
|
||||
}
|
||||
|
||||
/**
|
||||
* CUIDADO!! Al cerrar Statement, se rompen los datos de ResultSet.
|
||||
* @param sttCerrar Statement que se quiere cerrar.
|
||||
*/
|
||||
private static void CerrarStatement(Statement sttCerrar)
|
||||
{
|
||||
try
|
||||
{
|
||||
sttCerrar.close();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
System.err.println("No se ha podido cerrar el Statement.");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user