Cambios en los métodos de serialización y logging.

Los métodos de serialización a JSON ahora toman un FileHandle como parámetro.
Se ha cambiado todo el Logging al sistema de LibGDX.
Quizás se debiera hacer un logger propio que imprimiera a GDX y a archivo.
This commit is contained in:
2022-05-24 23:09:37 +02:00
parent 81f563ebcc
commit a41d90d4a3
7 changed files with 88 additions and 49 deletions
@@ -1,5 +1,6 @@
package uberelectron.gameSystems; package uberelectron.gameSystems;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.utils.Null; import com.badlogic.gdx.utils.Null;
import java.util.HashMap; import java.util.HashMap;
@@ -16,6 +17,8 @@ ToDo:
/*** /***
* Almacena los datos relativos a una máquina. * Almacena los datos relativos a una máquina.
* Esta clase es construida a partir de JSON automáticamente en MachineLoader.
*
* @author Daniel García * @author Daniel García
*/ */
public class Machine public class Machine
@@ -80,7 +83,7 @@ public class Machine
Integer value = attributes.get(name); Integer value = attributes.get(name);
if(value == null) if(value == null)
{ {
System.err.println("El atributo solicitado no existe: " + name Gdx.app.error("Machine - " + machineID, "El atributo solicitado no existe: " + name
+ " en la maquina " + machineID); + " en la maquina " + machineID);
} }
return value; return value;
@@ -1,5 +1,6 @@
package uberelectron.gameSystems; package uberelectron.gameSystems;
import com.badlogic.gdx.Files;
import com.badlogic.gdx.Gdx; import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.files.FileHandle; import com.badlogic.gdx.files.FileHandle;
import com.badlogic.gdx.utils.Json; import com.badlogic.gdx.utils.Json;
@@ -37,13 +38,13 @@ public class MachineLoader
/** /**
* Carga una lista de máquinas desde el archivo JSON. * Carga una lista de máquinas desde el archivo JSON.
* @param path Ubicación del JSON (Path interno). * @param file Ubicación del JSON (Preferiblemente, FileHandle.internal).
*/ */
public void LoadFromJSON(String path) public void LoadFromJSON(FileHandle file)
{ {
//Cargamos las máquinas en un ArrayList. //Cargamos las máquinas en un ArrayList.
Json json = new Json(); Json json = new Json();
FileHandle file = Gdx.files.internal(path); //FileHandle file = Gdx.files.internal(path);
ArrayList<Machine> list = json.fromJson(ArrayList.class, file); ArrayList<Machine> list = json.fromJson(ArrayList.class, file);
//Iteramos y añadimos las máquinas al mapa identificadas por su ID. //Iteramos y añadimos las máquinas al mapa identificadas por su ID.
@@ -51,6 +52,7 @@ public class MachineLoader
{ {
machineMap.put(mc.getMachineID(), mc); machineMap.put(mc.getMachineID(), mc);
} }
Gdx.app.log("MachineLoader", "Se han cargado " + machineMap.size() + " máquinas.");
//Limpiamos. //Limpiamos.
list.clear(); list.clear();
@@ -59,9 +61,9 @@ public class MachineLoader
/*** /***
* Permite guardar el estado del machineLoader (las máquinas del mapa) a un JSON. * Permite guardar el estado del machineLoader (las máquinas del mapa) a un JSON.
* Utilizado para debug o herramientas de desarrollo. * Utilizado para debug o herramientas de desarrollo.
* @param path Ubicación en que guardar el JSON (Path local). * @param file Ubicación en que guardar el JSON (Tiene que ser un FileHandle escribible.).
*/ */
public void SaveToJSON(String path) public void SaveToJSON(FileHandle file)
{ {
//Creamos y configuramos el serializador. //Creamos y configuramos el serializador.
Json json = new Json(); Json json = new Json();
@@ -73,8 +75,10 @@ public class MachineLoader
String jsonData = json.toJson(mcList); String jsonData = json.toJson(mcList);
//Abrimos el archivo y escribimos los datos. //Abrimos el archivo y escribimos los datos.
FileHandle file = Gdx.files.local(path); //FileHandle file = Gdx.files.local(filePath);
file.writeString(json.prettyPrint(jsonData), false); file.writeString(json.prettyPrint(jsonData), false);
Gdx.app.log("MachineLoader", "Se han guardado " + machineMap.size() + " máquinas" +
" en " + file);
} }
/*** /***
@@ -97,11 +101,11 @@ public class MachineLoader
Machine mc = machineMap.get(machineID); Machine mc = machineMap.get(machineID);
if(mc == null) if(mc == null)
{ {
System.out.println("El mapa no contiene una máquina de ID: " + machineID); Gdx.app.log("MachineLoader" ,"El mapa no contiene una máquina de ID: " + machineID);
} }
if(!mc.getMachineID().equals(machineID)) if(!mc.getMachineID().equals(machineID))
{ {
System.err.println("Hay una inconsistencia en los IDs de máquina: " Gdx.app.error("MachineLoader" , "Hay una inconsistencia en los IDs de máquina: "
+ mc.getMachineID() + "!=" + machineID); + mc.getMachineID() + "!=" + machineID);
} }
+19 -18
View File
@@ -1,5 +1,6 @@
package uberelectron.gameSystems; package uberelectron.gameSystems;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.math.Vector2;
import java.util.Arrays; import java.util.Arrays;
@@ -7,16 +8,13 @@ import java.util.HashMap;
import java.util.Map; import java.util.Map;
/*ToDo: /*ToDo:
- Quizás se podría añadir un contador del número de máquinas puestas,
de esta forma, si no quedan huecos, ComprobarMaquina() retorna false. No es necesario serializarlo.
- Añadir serialización para var espacioDisponible.
- Revisar métodos de añadir máquinas.
- Revisar métodos para mover y eliminar máquinas. - Revisar métodos para mover y eliminar máquinas.
- Crear el método para calcular la sala. - Crear el método para calcular la sala.
*/ */
/*** /***
* Clase que contiene los datos de la Sala y realiza permite interactuar con ellos. * Clase que contiene los datos de la Sala y permite interactuar con ellos.
* Esta clase es construida desde JSON o BD por el RoomLoader.
* *
* @author Daniel García. * @author Daniel García.
*/ */
@@ -83,6 +81,8 @@ public class Room
recursosOcupados.put(recurso.getKey(), 0); recursosOcupados.put(recurso.getKey(), 0);
} }
Gdx.app.debug("Room - " + roomName, "Se ha creado una la Room Debug: " + roomName);
} }
/*------------- /*-------------
@@ -100,7 +100,8 @@ public class Room
if(!ComprobarMaquina(machineToAdd, x, y)) if(!ComprobarMaquina(machineToAdd, x, y))
{ {
System.out.println("No se puede añadir la máquina " + machineToAdd.machineID + " a la room " + roomName); Gdx.app.log("Room - " + roomName, "No se puede añadir la máquina "
+ machineToAdd.machineID + " a la room " + roomName);
return; return;
} }
@@ -134,14 +135,15 @@ public class Room
Integer ocupados = recursosOcupados.get(attribute); Integer ocupados = recursosOcupados.get(attribute);
if(max == null || ocupados == null) if(max == null || ocupados == null)
{ {
System.err.println("El atributo " + attribute + " no existe en la sala " + roomName); Gdx.app.error("Room - " + roomName , "El recurso " + attribute + " no existe en esta sala");
return false; return false;
} }
if((ocupados + valorComprobar) <= max) if((ocupados + valorComprobar) >= max)
{ {
return true; //Gdx.app.debug("Room - " + roomName, "El recurso " + attribute + " de esta sala ya está lleno.");
return false;
} }
return false; return true;
} }
/*** /***
@@ -200,23 +202,22 @@ public class Room
//Comprobamos si queda hueco en la room para añadir más máquinas. //Comprobamos si queda hueco en la room para añadir más máquinas.
if((espacioOcupado+1) > espacioTotal) if((espacioOcupado+1) > espacioTotal)
{ {
System.out.println("No queda hueco en la room " + roomName + ", no se pueden añadir más máquinas."); Gdx.app.log("Room - " + roomName, "No queda hueco en esta sala, no se pueden añadir más máquinas.");
return false; return false;
} }
//Comprobamos si la posición es válida. //Comprobamos si la posición es válida.
if(!ComprobarPosicion(x, y)) if(!ComprobarPosicion(x, y))
{ {
System.out.println("No se puede poner una máquina en x:" + x + ", y:" Gdx.app.log("Room - " + roomName, "No se puede poner una máquina en " +
+ y + " de la room " + roomName "x:" + x + ", y:" + y + ". La posición ya está ocupada.");
+ ". La posición ya está ocupada.");
return false; return false;
} }
//Comprobamos que tenemos todos los recursos necesarios. //Comprobamos que tenemos todos los recursos necesarios.
if(!ComprobarRecursos(maquinaComprobar)) if(!ComprobarRecursos(maquinaComprobar))
{ {
System.out.println("No tienes capacidad de recursos suficiente para esta máquina..."); Gdx.app.log("Room - " + roomName, "No tienes capacidad de recursos suficiente para esta máquina...");
return false; return false;
} }
@@ -246,7 +247,7 @@ public class Room
} }
if(act == null) if(act == null)
{ {
System.err.println("La room" + roomName + " no tiene el recurso " + resourceName); Gdx.app.error("Room - " + roomName, "Esta room no tiene el recurso " + resourceName);
return false; return false;
} }
//Añadimos el modificador y lo actualizamos. //Añadimos el modificador y lo actualizamos.
@@ -275,7 +276,7 @@ public class Room
//Comprobamos si la posición nueva está disponible. //Comprobamos si la posición nueva está disponible.
if(!ComprobarPosicion(newX, newY)) if(!ComprobarPosicion(newX, newY))
{ {
System.out.println("La posición nueva: " + newX + ", " + newY + " ya está ocupada."); Gdx.app.log("Room - " + roomName, "La posición nueva: " + newX + ", " + newY + " ya está ocupada.");
return; return;
} }
@@ -283,7 +284,7 @@ public class Room
Machine mc = machineData[oldY][oldX]; Machine mc = machineData[oldY][oldX];
if(mc == null) if(mc == null)
{ {
System.out.println("No existe ninguna máquina en la posición inicia: " + newX + ", " + newY); Gdx.app.log("Room - " + roomName, "No existe ninguna máquina en la posición inicia: " + newX + ", " + newY);
return; return;
} }
//Si está correcto, la movemos. //Si está correcto, la movemos.
@@ -56,37 +56,37 @@ public class RoomLoader
/*** /***
* Carga una Room desde un archivo. * Carga una Room desde un archivo.
* @param path Ubicación del archivo JSON de datos de la Room. * @param file Ubicación del archivo JSON de datos de la Room. (Un FileHandle, preferiblemente, internal.)
*/ */
public void LoadRoomFromJSON(String path) public void LoadRoomFromJSON(FileHandle file)
{ {
FileHandle file = Gdx.files.internal(path); //FileHandle file = Gdx.files.internal(path);
Room r = loaderJson.fromJson(Room.class, file); Room r = loaderJson.fromJson(Room.class, file);
loadedRooms.put(r.roomName, r); loadedRooms.put(r.roomName, r);
System.out.println("Se ha cargado la Room " + r.roomName + " correctamente."); Gdx.app.log("RoomLoader", "Se ha cargado la Room " + r.roomName + " correctamente.");
} }
/*** /***
* Guarda la Room indicada al archivo indicado. * Guarda la Room indicada al archivo indicado.
* @param roomID ID de la Room a guardar. * @param roomID ID de la Room a guardar.
* @param path Ubicación del archivo JSON de destino. * @param file Ubicación del archivo JSON de destino. (FileHandle en que se pueda escribir).
*/ */
public void SaveRoomToJSON(String roomID, String path) public void SaveRoomToJSON(String roomID, FileHandle file)
{ {
Room rSave = loadedRooms.get(roomID); Room rSave = loadedRooms.get(roomID);
if(rSave == null) if(rSave == null)
{ {
System.err.println("No es posible guardar la Room: " + roomID + Gdx.app.error("RoomLoader", "No es posible guardar la Room: " + roomID +
"; ¿Está cargada?"); "; ¿Está cargada?");
return; return;
} }
String data = loaderJson.toJson(rSave); String data = loaderJson.toJson(rSave);
FileHandle file = Gdx.files.local(path); //FileHandle file = Gdx.files.local(path);
file.writeString(loaderJson.prettyPrint(data), false); file.writeString(loaderJson.prettyPrint(data), false);
System.out.println("Se ha guardado la room " + roomID + " en " + path); Gdx.app.log("RoomLoader", "Se ha guardado la room " + roomID + " en " + file);
} }
/*** /***
@@ -96,8 +96,10 @@ public class RoomLoader
public void UnloadRoom(String roomID) public void UnloadRoom(String roomID)
{ {
loadedRooms.remove(roomID); loadedRooms.remove(roomID);
Gdx.app.log("RoomLoader", "Se ha descargado (supuestamente) la Room: " + roomID);
//¿Habría que matar al objeto manualmente? //¿Habría que matar al objeto manualmente?
//¿Quizás debamos hacerlo un recurso de LibGDX para poder matarlo? //¿Quizás debamos hacerlo un recurso de LibGDX para poder matarlo?
// En ningún momento estamos comprobando que se haya eliminado correctamente.
} }
@@ -114,6 +116,7 @@ public class RoomLoader
/*** /***
* Establece la Room activa. * Establece la Room activa.
* La Room debe estar cargada para poder ser la activa. * La Room debe estar cargada para poder ser la activa.
* Si la Room a activar no está cargada, no se cambia la Room activa.
* @param roomID ID de la Room Activa. * @param roomID ID de la Room Activa.
*/ */
public void SetCurrentRoom(String roomID) public void SetCurrentRoom(String roomID)
@@ -121,7 +124,8 @@ public class RoomLoader
Room r = loadedRooms.get(roomID); Room r = loadedRooms.get(roomID);
if(r == null) if(r == null)
{ {
System.err.println("No se puede activar la room " + roomID + " ; No está cargada."); Gdx.app.error("RoomLoader", "No se puede activar la Room " + roomID + " ; No está cargada.");
return;
} }
currentRoom = r; currentRoom = r;
} }
@@ -12,15 +12,25 @@ public class SaveLoader
} }
public static Save LoadFromJSON(String path) /***
* Permite cargar los datos de una partida desde un archivo JSON.
* @param file FileHandle (internal) del JSON de datos.
* @return El objeto Save que se ha creado.
*/
public static Save LoadFromJSON(FileHandle file)
{ {
FileHandle file = Gdx.files.internal(path); //FileHandle file = Gdx.files.internal(path);
Json json = new Json(); Json json = new Json();
Gdx.app.debug("SaveLoader", "Se están cargado los datos de guardado desde: " + file);
return json.fromJson(Save.class, file); return json.fromJson(Save.class, file);
} }
public static void SaveToJSON(Save saveToSerialize, String path) /***
* Permite guardar un objeto Save a un JSON.
* @param saveToSerialize Ptr al objeto Save que se quiere guardar.
* @param file FileHandle (Escribible, como local) en que guardar el JSON.
*/
public static void SaveToJSON(Save saveToSerialize, FileHandle file)
{ {
//Creamos y configuramos el serializador. //Creamos y configuramos el serializador.
Json json = new Json(); Json json = new Json();
@@ -28,9 +38,9 @@ public class SaveLoader
json.setUsePrototypes(false); json.setUsePrototypes(false);
String data = json.toJson(saveToSerialize); String data = json.toJson(saveToSerialize);
FileHandle file = Gdx.files.local(path); //FileHandle file = Gdx.files.local(path);
file.writeString(json.prettyPrint(data), false); file.writeString(json.prettyPrint(data), false);
System.out.println("Se ha guardado un save en " + path); Gdx.app.log("SaveLoader", "Se ha guardado un save en " + file);
} }
} }
@@ -20,11 +20,19 @@ public class TileSetManager
//testSet = new TiledMapTileSet(); //testSet = new TiledMapTileSet();
} }
/***
* Carga los Tiles de un TileSet dada su textura.
* @param path Ubicación de la textura.
* @param tileSetName Nombre del TileSet.
* @param tileWidth Anchura en pixeles de las Tiles.
* @param tileHeight Altura en píxeles de las Tiles.
* @return True si se ha cargado correctamente. False si ha ocurrido algún error.
*/
public boolean loadTileSet(String path, String tileSetName, public boolean loadTileSet(String path, String tileSetName,
//int numTilesX, int numTilesY, //int numTilesX, int numTilesY,
int tileWidth, int tileHeight) int tileWidth, int tileHeight)
{ {
System.out.println("Cargando el tileSet de: " + path); Gdx.app.log("TileSetManager", "Cargando el tileSet de: " + path);
//Cargamos la textura indicada. //Cargamos la textura indicada.
Texture txLoader = new Texture(Gdx.files.internal(path)); Texture txLoader = new Texture(Gdx.files.internal(path));
@@ -44,19 +52,25 @@ public class TileSetManager
idCounter++; idCounter++;
} }
} }
System.out.println("Se han cargado " + idCounter + " tiles en " + tileSetName); Gdx.app.log("TileSetManager", "Se han cargado " + idCounter +
" tiles en el tileSet: " + tileSetName);
tileSetsMap.put(tileSetName, tileSet); tileSetsMap.put(tileSetName, tileSet);
return true; return true;
} }
/***
* Devuelve el TileSet con el nombre indicado.
* @param tileSetName Nombre del TileSet a obtener.
* @return TileSet con el nombre indicado.
*/
public TiledMapTileSet GetTileSet(String tileSetName) public TiledMapTileSet GetTileSet(String tileSetName)
{ {
TiledMapTileSet set = tileSetsMap.get(tileSetName); TiledMapTileSet set = tileSetsMap.get(tileSetName);
if(set == null) if(set == null)
{ {
System.err.println("No se ha encontrado el tileSet: " + tileSetName); Gdx.app.error("TileSetManager", "No se ha encontrado el tileSet con nombre: " + tileSetName);
} }
return set; return set;
} }
@@ -43,7 +43,7 @@ public class BackEndTest implements Screen
*/ */
mcLoader = new MachineLoader(); mcLoader = new MachineLoader();
mcLoader.LoadFromJSON(Gdx.files.internal("data/testMachines.json").path()); mcLoader.LoadFromJSON(Gdx.files.internal("data/testMachines.json"));
// mcLoader.AddMachine(testMach); // mcLoader.AddMachine(testMach);
// mcLoader.AddMachine(mach2); // mcLoader.AddMachine(mach2);
@@ -57,7 +57,7 @@ public class BackEndTest implements Screen
------ RoomLoader Tests ------ RoomLoader Tests
*/ */
RoomLoader rmLoader = new RoomLoader(mcLoader); RoomLoader rmLoader = new RoomLoader(mcLoader);
rmLoader.LoadRoomFromJSON("data/testRoom.json"); rmLoader.LoadRoomFromJSON(Gdx.files.internal("data/testRoom.json"));
@@ -77,7 +77,10 @@ public class BackEndTest implements Screen
// System.out.println("Pues eso..."); // System.out.println("Pues eso...");
System.out.println("Prueba completada."); // Gdx.app.log("Test", "Mensaje del LOG");
// Gdx.app.error("Test", "Mensaje de ERROR");
// Gdx.app.debug("Test", "Mensaje de Debug");
Gdx.app.log("BackEndTest", "Prueba completada.");
} }