Archived
Nuevas variables de dinero y mejoras de GameManager.
Se han añadido el coste y el dinero que produce una máquina tanto al JSON como al backend. Añadido una variable dineroPorCiclo en la sala. Se ha añadido el coste de una sala. Ahora los recursos que consumen las máquinas se cargan correctamente al cargar la sala. Se han añadido diversos métodos a la clase GameManager.
This commit is contained in:
@@ -3,13 +3,22 @@ package uberelectron.gameSystems;
|
||||
import com.badlogic.gdx.Gdx;
|
||||
import com.badlogic.gdx.files.FileHandle;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/*
|
||||
ToDo:
|
||||
- ¿Creamos una función para operar con dinero? De ser así,
|
||||
modificar todas las asignaciones manuales.
|
||||
*/
|
||||
|
||||
public class GameManager
|
||||
{
|
||||
//TODO: Añadir precios de sala y de Maquina a los JSON.
|
||||
private static GameManager instance;
|
||||
|
||||
private final String savePath = "save/";
|
||||
private final String localSavePath = "save/";
|
||||
private final String localRoomSavePath = "save/Rooms/";
|
||||
private final String internalDataPath = "data/";
|
||||
private final String internalRoomDataPath = "data/";
|
||||
|
||||
public MachineLoader mcLoader;
|
||||
public RoomLoader rmLoader;
|
||||
@@ -38,22 +47,83 @@ public class GameManager
|
||||
*/
|
||||
public void SaveGame()
|
||||
{
|
||||
SaveLoader.SaveToJSON(saveData, Gdx.files.local(savePath + "save.json"));
|
||||
SaveLoader.SaveToJSON(saveData, Gdx.files.local(localSavePath + "save.json"));
|
||||
rmLoader.SaveAllRoomsToJSON();
|
||||
}
|
||||
|
||||
/***
|
||||
* Carga todas las salas que el jugador tenga compradas.
|
||||
* No activa ninguna de ellas.
|
||||
* Todo: Probablemente queramos también autentificar al usuario.
|
||||
*/
|
||||
public void LoadGame()
|
||||
{
|
||||
SaveLoader.LoadFromJSON(Gdx.files.local(localSavePath + "save.json"));
|
||||
|
||||
//Cargamos desde sus archivos todas las salas que el jugador tenga compradas.
|
||||
for(Map.Entry<String, Boolean> rooms : saveData.ownedRooms.entrySet())
|
||||
{
|
||||
if(rooms.getValue())
|
||||
{
|
||||
String path = localRoomSavePath + rooms.getKey() + ".json";
|
||||
rmLoader.LoadRoomFromJSON(Gdx.files.local(path));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/***
|
||||
* Reinicia la sala indicada.
|
||||
* Para ello, copia el archivo por defecto a la carpeta de guardado del jugador.
|
||||
* Fixme: Quizás en vez de copiar el archivo queramos cargarlo y luego guardarlo...
|
||||
* @param roomID ID de la room a reiniciar.
|
||||
*/
|
||||
public void ReiniciarRoom(String roomID)
|
||||
{
|
||||
FileHandle prefab = Gdx.files.internal(internalDataPath + roomID + ".json");
|
||||
FileHandle roomSave = Gdx.files.local(savePath + roomID + ".json");
|
||||
FileHandle roomSave = Gdx.files.local(localSavePath + roomID + ".json");
|
||||
prefab.copyTo(roomSave);
|
||||
}
|
||||
|
||||
public void ComprarRoom(String roomID)
|
||||
public boolean ComprarRoom(String roomID)
|
||||
{
|
||||
ReiniciarRoom(roomID);
|
||||
saveData.dinero -= 1000;
|
||||
//Cargamos la sala por defecto desde el prefab de la misma.
|
||||
rmLoader.LoadRoomFromJSON(Gdx.files.internal(internalRoomDataPath + roomID + ".json"));
|
||||
Room rm = rmLoader.GetRoomByID(roomID);
|
||||
|
||||
if(saveData.dinero < rm.roomPrice)
|
||||
{
|
||||
Gdx.app.log("GameManager", "No tienes dinero para comprar la sala");
|
||||
return false;
|
||||
}
|
||||
|
||||
//Si se puede comprar, guardamos la sala.
|
||||
rmLoader.SaveRoomToJSON(roomID, Gdx.files.local(localRoomSavePath + roomID + ".json"));
|
||||
//Cobramos por ella.
|
||||
saveData.dinero -= rm.roomPrice;
|
||||
|
||||
//Fixme: Debería devolver true/false en función de cómo haya ido.
|
||||
return true;
|
||||
}
|
||||
|
||||
public boolean ComprarMachine(Machine mc, int posX, int posY)
|
||||
{
|
||||
//Comprobamos si tenemos dinero suficiente.
|
||||
if(saveData.dinero < mc.machineCost)
|
||||
{
|
||||
Gdx.app.log("GameManager", "No tienes dinero para comprar la máquina: " + mc.machineID);
|
||||
return false;
|
||||
}
|
||||
|
||||
//Intentamos añadir la máquina.
|
||||
if(rmLoader.GetCurrentRoom().AddMachine(posX, posY, mc))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
//Si es correcto, restamos el dinero gastado.
|
||||
saveData.dinero -= mc.machineCost;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -96,6 +96,12 @@ public class Machine
|
||||
|
||||
String machineID;
|
||||
public HashMap<String, Integer> attributes;
|
||||
|
||||
//Coste de comprar la máquina.
|
||||
int machineCost;
|
||||
//Dinero que produce cada ciclo.
|
||||
int dineroProducido;
|
||||
|
||||
boolean esDeRecursos;
|
||||
|
||||
/*
|
||||
|
||||
@@ -55,6 +55,14 @@ public class MachineLoader
|
||||
*/
|
||||
public void LoadFromJSON(FileHandle file)
|
||||
{
|
||||
//Comprobamos si existe el archivo de datos.
|
||||
if(!file.exists())
|
||||
{
|
||||
Gdx.app.error("MachineLoader", "No se han podido cargar las máquinas. " +
|
||||
"No existe el archivo: " + file.path());
|
||||
return;
|
||||
}
|
||||
|
||||
//Cargamos las máquinas en un ArrayList.
|
||||
Json json = new Json();
|
||||
//FileHandle file = Gdx.files.internal(path);
|
||||
|
||||
@@ -86,32 +86,29 @@ public class Room
|
||||
* Methods
|
||||
* -------------*/
|
||||
|
||||
public void AddMachine(int x, int y, Machine machineToAdd)
|
||||
public boolean AddMachine(int x, int y, Machine machineToAdd)
|
||||
{
|
||||
boolean deRecursos = false;
|
||||
//Si es de recursos la movemos a su método correspondiente y listo.
|
||||
if(machineToAdd.isEsDeRecursos())
|
||||
{
|
||||
deRecursos = true;
|
||||
}
|
||||
|
||||
if(!ComprobarMaquina(machineToAdd, x, y))
|
||||
{
|
||||
Gdx.app.log("Room - " + roomName, "No se puede añadir la máquina "
|
||||
+ machineToAdd.machineID + " a la room " + roomName);
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
|
||||
//Añadimos los recursos que consume.
|
||||
for(Map.Entry<String, Integer> resource : machineToAdd.getAttributes().entrySet())
|
||||
{
|
||||
ModificarRecursoSala(resource.getKey(), resource.getValue(), deRecursos);
|
||||
}
|
||||
ModificarRecursosPorMaquina(machineToAdd, true);
|
||||
|
||||
//Añadimos un ptr de la máquina en las coordenadas.
|
||||
machineData[y][x] = machineToAdd;
|
||||
|
||||
//Añadimos el dinero que produce.
|
||||
//Todo: Esto debería ser únicamente en máquinas de dinero o
|
||||
// en todas las máquinas. Podemos considerar que si no producen dinero tendrán valor 0.
|
||||
dineroPorCiclo += machineToAdd.dineroProducido;
|
||||
|
||||
//Se consume un hueco de espacio en la sala.
|
||||
espacioOcupado += 1;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
//He estado pensando en como va esto.
|
||||
@@ -148,7 +145,7 @@ public class Room
|
||||
* @param maquinaComprobar Ptr a la máquina que se quiere comprobar.
|
||||
* @return True si es posible añadir la máquina, False si no hay recursos o espacio suficiente.
|
||||
*/
|
||||
public boolean ComprobarRecursos(Machine maquinaComprobar)
|
||||
public boolean ComprobarRecursosParaMaquina(Machine maquinaComprobar)
|
||||
{
|
||||
|
||||
//En principio, las máquinas de recursos siempre se pueden poner.
|
||||
@@ -188,7 +185,7 @@ public class Room
|
||||
|
||||
/***
|
||||
* Realiza todas las comprobaciones para ver si es posible colocar la máquina indicada en la posición indicada.
|
||||
* Hace uso del los otros métodos de comprobación.
|
||||
* Hace uso de los otros métodos de comprobación (ComprobarRecursos, ComprobarPosición,...).
|
||||
* @param maquinaComprobar Ptr a la máquina. Permite comprobar si se tiene la capacidad de recursos necesaria.
|
||||
* @param x Posición X.
|
||||
* @param y Posición Y.
|
||||
@@ -212,7 +209,7 @@ public class Room
|
||||
}
|
||||
|
||||
//Comprobamos que tenemos todos los recursos necesarios.
|
||||
if(!ComprobarRecursos(maquinaComprobar))
|
||||
if(!ComprobarRecursosParaMaquina(maquinaComprobar))
|
||||
{
|
||||
Gdx.app.log("Room - " + roomName, "No tienes capacidad de recursos suficiente para esta máquina...");
|
||||
return false;
|
||||
@@ -230,7 +227,7 @@ public class Room
|
||||
* @param esMaximo Indica si se trata de la capacidad máxima de la sala (true= o de la capacidad ocupada (false).
|
||||
* @return True si se ha conseguido modificar. False si ha ocurrido un error.
|
||||
*/
|
||||
public boolean ModificarRecursoSala(String resourceName, int mod, boolean esMaximo)
|
||||
public boolean ModificarRecurso(String resourceName, int mod, boolean esMaximo)
|
||||
{
|
||||
//Obtenemos los actuales recursos ocupados.
|
||||
Integer act = null;
|
||||
@@ -260,6 +257,25 @@ public class Room
|
||||
return true;
|
||||
}
|
||||
|
||||
/***
|
||||
* Modifica los recursos de la sala a partir de lo consumido/generado por una máquina.
|
||||
* Utilizado al añadir y eliminar una máquina.
|
||||
* @param mc Máquina cuyos recursos se quieren añadir/restar.
|
||||
* @param add Indica si los recursos se sumaran (true) o se restarán (false).
|
||||
*/
|
||||
public void ModificarRecursosPorMaquina(Machine mc, boolean add)
|
||||
{
|
||||
//Utilizamos el modificador para sumar/restar los recusos.
|
||||
//Si se añaden, el modificador será 1, si se restan, -1 (el opuesto).
|
||||
int mod = (add ? 1 : -1);
|
||||
//Añadimos los recursos que consume.
|
||||
for(Map.Entry<String, Integer> resource : mc.getAttributes().entrySet())
|
||||
{
|
||||
ModificarRecurso(resource.getKey(), mod * resource.getValue(), mc.esDeRecursos);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/***
|
||||
* Mueve una máquina de una casilla a otra.
|
||||
* Como solo la movemos, no hace falta modificar atributos de la sala.
|
||||
@@ -301,13 +317,13 @@ public class Room
|
||||
//Obtenemos la máquina de esta posición.
|
||||
Machine mc = machineData[posY][posX];
|
||||
|
||||
//Extraemos la variable por optimización.
|
||||
boolean deRecursos = mc.isEsDeRecursos();
|
||||
|
||||
//Iteramos por sus recursos, modificándolos.
|
||||
for(Map.Entry<String, Integer> recurso : mc.getAttributes().entrySet())
|
||||
{
|
||||
ModificarRecursoSala(recurso.getKey(), -recurso.getValue(), deRecursos);
|
||||
}
|
||||
ModificarRecursosPorMaquina(mc, false);
|
||||
|
||||
//Quitamos el dinero que produce.
|
||||
dineroPorCiclo -= mc.dineroProducido;
|
||||
}
|
||||
|
||||
|
||||
@@ -330,21 +346,21 @@ public class Room
|
||||
/*-------------
|
||||
* Variables
|
||||
* -------------*/
|
||||
|
||||
//Variables que se almacenan en el JSON.
|
||||
|
||||
//Nombre identificador de la sala.
|
||||
String roomName;
|
||||
//Tamaño de la sala. Todo: Revisar pues el tamaño de paredes y maq. debería ser diferente.
|
||||
Vector2 roomSize;
|
||||
|
||||
//Contador de la cantidad de máquinas añadidas.
|
||||
int espacioOcupado;
|
||||
//El dinero que cuesta comprar esta sala. Se almacena en al JSON.
|
||||
int roomPrice;
|
||||
|
||||
//Indica cuantas máquinas caben en la sala.
|
||||
//Puede serializarse (recomendable) o calcularse con las dimensiones de la sala.
|
||||
//Indica el total de máquinas caben en 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;
|
||||
|
||||
@@ -355,6 +371,27 @@ public class Room
|
||||
Machine[][] machineData;
|
||||
|
||||
|
||||
|
||||
//Variables adicionales que se rellenan en Runtime (Cuando carga la sala).
|
||||
|
||||
//Cuanto dinero genera esta sala por ciclo. var = Sum(maquinas dinero).
|
||||
int dineroPorCiclo;
|
||||
|
||||
//Puntuación de la sala.
|
||||
// Todo: Lo podemos almacenar como variable y modificarlo en
|
||||
// según se modifique la sala o añadir una función que lo calcule cuando sea necesario.
|
||||
int roomScore;
|
||||
|
||||
//Recursos y capacidad de la sala.
|
||||
//Recursos ocupados actualmente de la sala.
|
||||
HashMap<String, Integer> recursosOcupados;
|
||||
//Los recursos máximos que caben en la sala. var = defecto + máquinas de recursos.
|
||||
HashMap<String, Integer> recursosMaximos;
|
||||
|
||||
//Contador de la cantidad de máquinas añadidas.
|
||||
int espacioOcupado;
|
||||
|
||||
//Indica si la sala es propia (cargada desde JSON) o de otro (Cargada desde DB).
|
||||
boolean esOnline = false;
|
||||
|
||||
}
|
||||
|
||||
@@ -58,7 +58,13 @@ public class RoomLoader
|
||||
*/
|
||||
public void LoadRoomFromJSON(FileHandle file)
|
||||
{
|
||||
//FileHandle file = Gdx.files.internal(path);
|
||||
//Comprobamos si existe el archivo...
|
||||
if(!file.exists())
|
||||
{
|
||||
Gdx.app.error("RoomLoader", "No existe el archivo: " + file.path());
|
||||
return;
|
||||
}
|
||||
|
||||
Room r = loaderJson.fromJson(Room.class, file);
|
||||
|
||||
loadedRooms.put(r.roomName, r);
|
||||
@@ -149,6 +155,11 @@ public class RoomLoader
|
||||
return currentRoom;
|
||||
}
|
||||
|
||||
public Room GetRoomByID(String roomID)
|
||||
{
|
||||
return loadedRooms.get(roomID);
|
||||
}
|
||||
|
||||
|
||||
//DEBUG: Para hacer pruebas desde BackEndTest.java.
|
||||
public void AddRoom(Room rToAdd)
|
||||
@@ -182,6 +193,8 @@ public class RoomLoader
|
||||
//Guardamos datos de la sala.
|
||||
json.writeValue("RoomName", object.roomName);
|
||||
json.writeValue("RoomSize", object.roomSize);
|
||||
json.writeValue("RoomPrice", object.roomPrice);
|
||||
|
||||
json.writeValue("HuecosDisponibles", object.espacioTotal);
|
||||
|
||||
//Serializamos los atributos/capacidad base de la sala.
|
||||
@@ -233,6 +246,9 @@ public class RoomLoader
|
||||
room.roomSize = new Vector2();
|
||||
room.roomSize.x = jsonData.get("RoomSize").get("x").asFloat();
|
||||
room.roomSize.y = jsonData.get("RoomSize").get("y").asFloat();
|
||||
|
||||
room.roomPrice = jsonData.get("RoomPrice").asInt();
|
||||
|
||||
room.espacioTotal = jsonData.get("HuecosDisponibles").asInt();
|
||||
|
||||
//Cargamos la capacidad por defecto de la sala.
|
||||
@@ -279,7 +295,6 @@ public class RoomLoader
|
||||
|
||||
for(int x = 0; x < room.machineData[y].length; x++)
|
||||
{
|
||||
//ToDo: Revisar el acceso al mcLoader....
|
||||
String mcName = yData.get(x).asString();
|
||||
|
||||
//En caso de que no haya máquina (en el JSON haya null) -> Establecemos Null.
|
||||
@@ -295,7 +310,14 @@ public class RoomLoader
|
||||
// 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);
|
||||
|
||||
//Obtenemos la máquina.
|
||||
Machine mc = mcLoader.GetMachine(mcName);
|
||||
//Añadimos su ptr en la posición.
|
||||
room.machineData[y][x] = mc;
|
||||
|
||||
//Añadimos los recursos a la sala.
|
||||
room.ModificarRecursosPorMaquina(mc, true);
|
||||
|
||||
//room.machineData_Test[y][x] = yData.get(x).asString();
|
||||
}
|
||||
@@ -303,6 +325,10 @@ public class RoomLoader
|
||||
// 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.........
|
||||
|
||||
//Iteramos por todas las máquinas de la sala, añadiendo sus recursos manualmente.
|
||||
|
||||
|
||||
|
||||
return room;
|
||||
}
|
||||
};
|
||||
|
||||
@@ -14,6 +14,6 @@ public class Save
|
||||
/*
|
||||
Indica si el jugador tiene comprada esa sala y, por tanto, ha de aparecer/cargarse.
|
||||
*/
|
||||
HashMap<String, Boolean> ownedRoom;
|
||||
HashMap<String, Boolean> ownedRooms;
|
||||
|
||||
}
|
||||
|
||||
@@ -15,7 +15,8 @@ import java.util.logging.FileHandler;
|
||||
public class BackEndTest implements Screen
|
||||
{
|
||||
final testGame game;
|
||||
public static MachineLoader mcLoader = MachineLoader.getInstance();
|
||||
public static MachineLoader mcLoader;
|
||||
public static RoomLoader rmLoader;
|
||||
|
||||
/***
|
||||
* Clase para la realización de pruebas del BackEnd.
|
||||
@@ -45,8 +46,8 @@ public class BackEndTest implements Screen
|
||||
/*
|
||||
---- MachineLoader Tests.
|
||||
*/
|
||||
|
||||
mcLoader.LoadFromJSON(Gdx.files.internal("data/testMachines.json"));
|
||||
mcLoader = MachineLoader.getInstance();
|
||||
// mcLoader.LoadFromJSON(Gdx.files.internal("data/testMachines.json"));
|
||||
// mcLoader.AddMachine(testMach);
|
||||
// mcLoader.AddMachine(mach2);
|
||||
|
||||
@@ -60,10 +61,11 @@ public class BackEndTest implements Screen
|
||||
------ RoomLoader Tests
|
||||
*/
|
||||
RoomLoader rmLoader = RoomLoader.getInstance();
|
||||
rmLoader.LoadRoomFromJSON(Gdx.files.internal("data/testRoom.json"));
|
||||
// rmLoader.LoadRoomFromJSON(Gdx.files.internal("data/testRoom.json"));
|
||||
|
||||
Gdx.app.log("BackEndTest", "Cargarda la sala!");
|
||||
|
||||
rmLoader.SaveRoomToJSON("testRoom", Gdx.files.local("saves/testRoom.json"));
|
||||
// rmLoader.SaveRoomToJSON("testRoom", Gdx.files.local("saves/testRoom.json"));
|
||||
// Room testRoom = new Room("testRoom", 8, 5);
|
||||
// testRoom.AddMachine(3,2, mcLoader.GetMachine("test_mach2"));
|
||||
// testRoom.AddMachine(4,2, mcLoader.GetMachine("base_raspi_mk1"));
|
||||
|
||||
@@ -29,6 +29,9 @@ public class testGame extends Game
|
||||
|
||||
GameManager gm = GameManager.getInstance();
|
||||
|
||||
mcLoader = gm.mcLoader;
|
||||
rmLoader = gm.rmLoader;
|
||||
|
||||
LoadAssets();
|
||||
|
||||
//this.setScreen(new TileMapTest(this));
|
||||
|
||||
Reference in New Issue
Block a user