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;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.utils.Null;
import java.util.HashMap;
@@ -16,6 +17,8 @@ ToDo:
/***
* Almacena los datos relativos a una máquina.
* Esta clase es construida a partir de JSON automáticamente en MachineLoader.
*
* @author Daniel García
*/
public class Machine
@@ -80,7 +83,7 @@ public class Machine
Integer value = attributes.get(name);
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);
}
return value;
@@ -1,5 +1,6 @@
package uberelectron.gameSystems;
import com.badlogic.gdx.Files;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.files.FileHandle;
import com.badlogic.gdx.utils.Json;
@@ -37,13 +38,13 @@ public class MachineLoader
/**
* 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.
Json json = new Json();
FileHandle file = Gdx.files.internal(path);
//FileHandle file = Gdx.files.internal(path);
ArrayList<Machine> list = json.fromJson(ArrayList.class, file);
//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);
}
Gdx.app.log("MachineLoader", "Se han cargado " + machineMap.size() + " máquinas.");
//Limpiamos.
list.clear();
@@ -59,9 +61,9 @@ public class MachineLoader
/***
* Permite guardar el estado del machineLoader (las máquinas del mapa) a un JSON.
* 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.
Json json = new Json();
@@ -73,8 +75,10 @@ public class MachineLoader
String jsonData = json.toJson(mcList);
//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);
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);
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))
{
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);
}
+19 -18
View File
@@ -1,5 +1,6 @@
package uberelectron.gameSystems;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.math.Vector2;
import java.util.Arrays;
@@ -7,16 +8,13 @@ import java.util.HashMap;
import java.util.Map;
/*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.
- 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.
*/
@@ -83,6 +81,8 @@ public class Room
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))
{
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;
}
@@ -134,15 +135,16 @@ public class Room
Integer ocupados = recursosOcupados.get(attribute);
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;
}
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 true;
}
/***
* Permite comprobar si se puede añadir una máquina a la sala.
@@ -200,23 +202,22 @@ public class Room
//Comprobamos si queda hueco en la room para añadir más máquinas.
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;
}
//Comprobamos si la posición es válida.
if(!ComprobarPosicion(x, y))
{
System.out.println("No se puede poner una máquina en x:" + x + ", y:"
+ y + " de la room " + roomName
+ ". La posición ya está ocupada.");
Gdx.app.log("Room - " + roomName, "No se puede poner una máquina en " +
"x:" + x + ", y:" + y + ". La posición ya está ocupada.");
return false;
}
//Comprobamos que tenemos todos los recursos necesarios.
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;
}
@@ -246,7 +247,7 @@ public class Room
}
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;
}
//Añadimos el modificador y lo actualizamos.
@@ -275,7 +276,7 @@ public class Room
//Comprobamos si la posición nueva está disponible.
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;
}
@@ -283,7 +284,7 @@ public class Room
Machine mc = machineData[oldY][oldX];
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;
}
//Si está correcto, la movemos.
@@ -56,37 +56,37 @@ public class RoomLoader
/***
* 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);
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.
* @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);
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?");
return;
}
String data = loaderJson.toJson(rSave);
FileHandle file = Gdx.files.local(path);
//FileHandle file = Gdx.files.local(path);
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)
{
loadedRooms.remove(roomID);
Gdx.app.log("RoomLoader", "Se ha descargado (supuestamente) la Room: " + roomID);
//¿Habría que matar al objeto manualmente?
//¿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.
* 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.
*/
public void SetCurrentRoom(String roomID)
@@ -121,7 +124,8 @@ public class RoomLoader
Room r = loadedRooms.get(roomID);
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;
}
@@ -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();
Gdx.app.debug("SaveLoader", "Se están cargado los datos de guardado desde: " + 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.
Json json = new Json();
@@ -28,9 +38,9 @@ public class SaveLoader
json.setUsePrototypes(false);
String data = json.toJson(saveToSerialize);
FileHandle file = Gdx.files.local(path);
//FileHandle file = Gdx.files.local(path);
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();
}
/***
* 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,
//int numTilesX, int numTilesY,
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.
Texture txLoader = new Texture(Gdx.files.internal(path));
@@ -44,19 +52,25 @@ public class TileSetManager
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);
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)
{
TiledMapTileSet set = tileSetsMap.get(tileSetName);
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;
}
@@ -43,7 +43,7 @@ public class BackEndTest implements Screen
*/
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(mach2);
@@ -57,7 +57,7 @@ public class BackEndTest implements Screen
------ RoomLoader Tests
*/
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("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.");
}