Pequeñas mejoras y arreglos

This commit is contained in:
2022-05-23 14:33:28 +02:00
parent 46c659a92f
commit 81f563ebcc
5 changed files with 117 additions and 53 deletions
+6 -6
View File
@@ -3,10 +3,10 @@
"class": "uberelectron.gameSystems.Machine",
"machineID": "base_raspi_mk1",
"attributes": {
"Test": 5,
"Otro": -2
"Electricidad": 2,
"Refrigeracion": 3
},
"esDeRecursos": true,
"esDeRecursos": false,
"tileSetID": "Machine_Set",
"tilePos": 3
},
@@ -14,10 +14,10 @@
"class": "uberelectron.gameSystems.Machine",
"machineID": "test_mach2",
"attributes": {
"Otro": -6,
"Test2": 3
"Electricidad": 6,
"Refrigeracion": 3
},
"esDeRecursos": false,
"esDeRecursos": true,
"tileSetID": "Machine_Set",
"tilePos": 4
}
+8 -1
View File
@@ -4,6 +4,13 @@
"x": 8,
"y": 5
},
"HuecosDisponibles": 10,
"CapacidadPorDefecto": {
"Abonos": 8,
"Refrigeracion": 10,
"Electricidad": 5
},
"BackGroundTileSet": "BGTiles",
"BackgroundData": [
[ 2, 2, 2, 2, 2, 2, 2, 2 ],
[ 2, 3, 3, 3, 3, 3, 3, 2 ],
@@ -36,8 +43,8 @@
null,
null,
null,
"base_raspi_mk1",
"test_mach2",
"base_raspi_mk1",
null,
null,
null
+41 -23
View File
@@ -28,12 +28,10 @@ public class Room
public Room()
{
//¿Puedo suponer que será suficientemente inteligente el JSON?
//Como gestionamos la deserialization manualmente, los que tenemos que ser inteligentes somos nosotros.
//Hay que instanciar las cosas que no se instancian en el JSON.
//En vez de hacer deserialization directamente,
// MachineLoader puede leer los datos manualmente sin necesidad de crear una clase,
// y construir el objeto pasándolos a un constructor...
}
/***
@@ -46,7 +44,9 @@ public class Room
{
this.roomName = roomName;
this.roomSize = new Vector2(width, height);
this.espacioTotal = 10;
this.tileSetID = "BGTiles";
bgData = new int[height][width];
machineData = new Machine[height][width];
@@ -67,6 +67,22 @@ public class Room
{
Arrays.fill(machineDatum, null);
}
recursosDefecto = new HashMap<>();
recursosDefecto.put("Electricidad", 5);
recursosDefecto.put("Refrigeracion", 10);
recursosDefecto.put("Abonos", 8);
recursosMaximos = new HashMap<>(recursosDefecto);
//Inicialmente, los recursos ocupados tienen el valor 0.
// Totamos los nombres de los por defecto, pero su valor será 0.
recursosOcupados = new HashMap<>();
for(Map.Entry<String, Integer> recurso : recursosDefecto.entrySet())
{
recursosOcupados.put(recurso.getKey(), 0);
}
}
/*-------------
@@ -91,8 +107,7 @@ public class Room
//Añadimos los recursos que consume.
for(Map.Entry<String, Integer> resource : machineToAdd.getAttributes().entrySet())
{
String resourceName = resource.getKey();
ModificarRecursoSala(resourceName, resource.getValue(), deRecursos);
ModificarRecursoSala(resource.getKey(), resource.getValue(), deRecursos);
}
//Añadimos un ptr de la máquina en las coordenadas.
@@ -296,33 +311,36 @@ public class Room
ModificarRecursoSala(recurso.getKey(), -recurso.getValue(), deRecursos);
}
}
/*-------------
* Variables
* -------------*/
String roomName;
// int width;
// int height;
Vector2 roomSize;
//Contador de la cantidad de máquinas añadidas.
int espacioOcupado;
//Indica cuantas máquinas caben en la sala.
//Puede serializarse (recomendable) o calcularse con las dimensiones de la sala.
int espacioTotal;
//Recursos y capacidad de la sala.
HashMap<String, Integer> recursosOcupados;
HashMap<String, Integer> recursosMaximos;
//Almacena la capacidad que tiene una sala por defecto. Es a partir de esta que se genera la actual cuando se carga.
HashMap<String, Integer> recursosDefecto;
//Permite saber de qué tileSet son los ints de bgData.
String tileSetID;
int[][] bgData;
Machine[][] machineData;
//Únicamente, para probar la serialización como array.
//String[][] machineData_Test;
//Atributos de la sala.
//nombreAtributo
HashMap<String, Integer> recursosOcupados;
//nombreAtributo_max
HashMap<String, Integer> recursosMaximos;
boolean esOnline = false;
//Contador de la cantidad de máquinas añadidas.
int espacioOcupado;
//Indica cuantas máquinas caben en la sala.
//Puede serializarse (recomendable) o calcularse con las dimensiones de la sala.
int espacioTotal;
}
@@ -8,6 +8,7 @@ import com.badlogic.gdx.utils.JsonValue;
import com.badlogic.gdx.utils.JsonWriter;
import java.util.HashMap;
import java.util.Map;
/*
ToDo:
@@ -163,11 +164,20 @@ public class RoomLoader
json.setOutputType(JsonWriter.OutputType.json);
json.writeObjectStart();
//Guardamos datos de la sala.
json.writeValue("RoomName", object.roomName);
json.writeValue("RoomSize", object.roomSize);
json.writeValue("HuecosDisponibles", object.espacioTotal);
//Serializamos los atributos/capacidad base de la sala.
json.writeValue("CapacidadPorDefecto", object.recursosDefecto, HashMap.class, Integer.class);
//Almacenamos los datos del background.
json.writeValue("BackGroundTileSet", object.tileSetID);
json.writeValue("BackgroundData", object.bgData);
//Datos de máquinas. Creamos un JSON array bidimensional.
//Datos de máquinas. Creamos un JSON array bidimensional con el ID de la máquina.
json.writeArrayStart("MaquinasData");
for(int y = 0; y < object.machineData.length; y++)
{
@@ -205,10 +215,34 @@ public class RoomLoader
//jsonData = jsonData.child();
room.roomName = jsonData.get("RoomName").asString();
//Cargamos Tamaño y huecos de la sala.
room.roomSize = new Vector2();
room.roomSize.x = jsonData.get("RoomSize").get("x").asFloat();
room.roomSize.y = jsonData.get("RoomSize").get("y").asFloat();
room.espacioTotal = jsonData.get("HuecosDisponibles").asInt();
//Cargamos la capacidad por defecto de la sala.
room.recursosDefecto = new HashMap<>();
for(JsonValue recurso : jsonData.get("CapacidadPorDefecto"))
{
room.recursosDefecto.put(recurso.name, recurso.asInt());
}
//Inicializamos los otros hashmaps de recursos.
//Inicialmente, los recursos máximos son una copia de los recursos por defecto.
room.recursosMaximos = new HashMap<>(room.recursosDefecto);
//Inicialmente, los recursos ocupados tienen el valor 0.
// Totamos los nombres de los por defecto, pero su valor será 0.
room.recursosOcupados = new HashMap<>();
for(Map.Entry<String, Integer> recurso : room.recursosDefecto.entrySet())
{
room.recursosOcupados.put(recurso.getKey(), 0);
}
room.tileSetID = jsonData.get("BackGroundTileSet").asString();
//ToDo: En principio, bgData debería ser el tamaño de la sala (el grid de máquinas) + 2 (para paredes).
room.bgData = new int[(int)room.roomSize.y][(int)room.roomSize.x];
for(int y = 0; y < room.bgData.length; y++)
@@ -244,12 +278,16 @@ public class RoomLoader
}
//Obtenemos un ptr a la máquina que corresponda.
// TODO: Revisar y utilizar los métodos de Room para añadir máquinas.
// Si lo añadimos con el método, se puede romper si no hay recursos suficiente por el orden.
// Hay que hacer un método concreto.
room.machineData[y][x] = mcLoader.GetMachine(mcName);
//room.machineData_Test[y][x] = yData.get(x).asString();
}
}
// ToDo: Los atributos de la sala se generan al cargar la sala contando las máquinas que haya.
// habría que llamar al método que lo haga. O hacerlo al añadir las máquinas.........
return room;
}
+23 -22
View File
@@ -1,5 +1,6 @@
package uberelectron.testgame;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Screen;
import com.badlogic.gdx.utils.Json;
import uberelectron.gameSystems.Machine;
@@ -21,29 +22,30 @@ public class BackEndTest implements Screen
{
this.game = game;
Machine testMach = new Machine();
testMach.setMachineID("base_raspi_mk1");
testMach.AddAtribute("Test", 5);
testMach.AddAtribute("Otro", -2);
testMach.setEsDeRecursos(true);
testMach.setTileSetID("Machine_Set");
testMach.setTilePos(3);
Machine mach2 = new Machine();
mach2.setMachineID("test_mach2");
mach2.AddAtribute("Test2", 3);
mach2.AddAtribute("Otro", -6);
mach2.setEsDeRecursos(true);
mach2.setTileSetID("Machine_Set");
mach2.setTilePos(4);
// Machine testMach = new Machine();
// testMach.setMachineID("base_raspi_mk1");
// testMach.AddAtribute("Test", 5);
// testMach.AddAtribute("Otro", -2);
// testMach.setEsDeRecursos(true);
// testMach.setTileSetID("Machine_Set");
// testMach.setTilePos(3);
//
// Machine mach2 = new Machine();
// mach2.setMachineID("test_mach2");
// mach2.AddAtribute("Test2", 3);
// mach2.AddAtribute("Otro", -6);
// mach2.setEsDeRecursos(true);
// mach2.setTileSetID("Machine_Set");
// mach2.setTilePos(4);
/*
---- MachineLoader Tests.
*/
//mcLoader = new MachineLoader();
mcLoader.AddMachine(testMach);
mcLoader.AddMachine(mach2);
mcLoader = new MachineLoader();
mcLoader.LoadFromJSON(Gdx.files.internal("data/testMachines.json").path());
// mcLoader.AddMachine(testMach);
// mcLoader.AddMachine(mach2);
// mcLoader.SaveToJSON("assets/data/testMachines.json");
// mcLoader.LoadFromJSON("data/testMachines.json");
@@ -60,14 +62,13 @@ public class BackEndTest implements Screen
// Room testRoom = new Room("testRoom", 8, 5);
// testRoom.LoadRoom();
// testRoom.AddMachine(3,2, testMach);
// testRoom.AddMachine(4,2, mach2);
// testRoom.AddMachine(3,2, mcLoader.GetMachine("test_mach2"));
// testRoom.AddMachine(4,2, mcLoader.GetMachine("base_raspi_mk1"));
//
// rmLoader.AddRoom(testRoom);
// rmLoader.SaveRoomToJSON("testRoom", "assets/data/testRoom.json");
//
// String textRoom = json.toJson(testRoom);
// System.out.println(json.prettyPrint(textRoom));
//