enhance chest object handling and save/load functionality
This commit is contained in:
@@ -23,6 +23,14 @@ public class DataStorage implements Serializable {
|
||||
// PLAYER INVENTORY
|
||||
List<String> itemNames = new ArrayList<>();
|
||||
List<Integer> itemAmounts = new ArrayList<>();
|
||||
int currentWeaponSlot;
|
||||
int currentShieldSlot;
|
||||
|
||||
// MAP OBJECTS
|
||||
String[][] mapObjectNames;
|
||||
int[][] mapObjectWorldX;
|
||||
int[][] mapObjectWorldY;
|
||||
String[][] mapObjectLootNames;
|
||||
boolean[][] mapObjectOpened;
|
||||
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package de.miaurizius.jgame2d.data;
|
||||
|
||||
import de.miaurizius.jgame2d.core.GamePanel;
|
||||
import de.miaurizius.jgame2d.core.enums.Map;
|
||||
import de.miaurizius.jgame2d.entity.Entity;
|
||||
|
||||
import java.io.*;
|
||||
@@ -17,7 +18,7 @@ public class SaveLoad {
|
||||
public Entity getObject(String itemName) {
|
||||
Entity obj;
|
||||
try {
|
||||
obj = (Entity) Class.forName(itemName).getDeclaredConstructor().newInstance(panel);
|
||||
obj = (Entity) Class.forName(itemName).getDeclaredConstructor(GamePanel.class).newInstance(panel);
|
||||
} catch (ClassNotFoundException | NoSuchMethodException | InstantiationException | IllegalAccessException |
|
||||
InvocationTargetException e) {
|
||||
throw new RuntimeException(e);
|
||||
@@ -50,6 +51,29 @@ public class SaveLoad {
|
||||
ds.itemAmounts.add(panel.player.inventory.get(i).amt);
|
||||
}
|
||||
|
||||
// PLAYER EQUIPMENT
|
||||
ds.currentWeaponSlot = panel.player.getCurrentWeaponSlot();
|
||||
ds.currentShieldSlot = panel.player.getCurrentShieldSlot();
|
||||
|
||||
// MAP OBJECTS
|
||||
ds.mapObjectNames = new String[Map.values().length][panel.obj[1].length];
|
||||
ds.mapObjectWorldX = new int[Map.values().length][panel.obj[1].length];
|
||||
ds.mapObjectWorldY = new int[Map.values().length][panel.obj[1].length];
|
||||
ds.mapObjectLootNames = new String[Map.values().length][panel.obj[1].length];
|
||||
ds.mapObjectOpened = new boolean[Map.values().length][panel.obj[1].length];
|
||||
|
||||
for(int mapNum = 0; mapNum < Map.values().length; mapNum++) {
|
||||
for(int i = 0; i < panel.obj[mapNum].length; i++) {
|
||||
if(panel.obj[mapNum][i] != null) {
|
||||
ds.mapObjectNames[mapNum][i] = panel.obj[mapNum][i].getClass().getName();
|
||||
ds.mapObjectWorldX[mapNum][i] = panel.obj[mapNum][i].worldX;
|
||||
ds.mapObjectWorldY[mapNum][i] = panel.obj[mapNum][i].worldY;
|
||||
if(panel.obj[mapNum][i].loot != null) ds.mapObjectLootNames[mapNum][i] = panel.obj[mapNum][i].loot.getClass().getName();
|
||||
ds.mapObjectOpened[mapNum][i] = panel.obj[mapNum][i].opened;
|
||||
} else ds.mapObjectNames[mapNum][i] = "NA";
|
||||
}
|
||||
}
|
||||
|
||||
// WRITE
|
||||
oos.writeObject(ds);
|
||||
}
|
||||
@@ -72,10 +96,33 @@ public class SaveLoad {
|
||||
panel.player.worldX = ds.worldX;
|
||||
panel.player.worldY = ds.worldY;
|
||||
|
||||
|
||||
// PLAYER INVENTORY
|
||||
panel.player.inventory.clear();
|
||||
for(int i = 0; i < ds.itemNames.size(); i++) {
|
||||
Entity obj = getObject(ds.itemNames.get(i));
|
||||
obj.amt = ds.itemAmounts.get(i);
|
||||
panel.player.inventory.add(obj);
|
||||
panel.player.inventory.add(getObject(ds.itemNames.get(i)));
|
||||
panel.player.inventory.get(i).amt = ds.itemAmounts.get(i);
|
||||
}
|
||||
|
||||
// PLAYER EQUIPMENT
|
||||
panel.player.currentWeapon = panel.player.inventory.get(ds.currentWeaponSlot);
|
||||
panel.player.currentShield = panel.player.inventory.get(ds.currentShieldSlot);
|
||||
panel.player.getAttack();
|
||||
panel.player.getDefense();
|
||||
panel.player.getPlayerAttackImage();
|
||||
|
||||
// MAP OBJECTS
|
||||
for(int mapNum = 0; mapNum < Map.values().length; mapNum++) {
|
||||
for (int i = 0; i < ds.mapObjectNames[mapNum].length; i++) {
|
||||
if (!ds.mapObjectNames[mapNum][i].equals("NA")) {
|
||||
panel.obj[mapNum][i] = getObject(ds.mapObjectNames[mapNum][i]);
|
||||
panel.obj[mapNum][i].worldX = ds.mapObjectWorldX[mapNum][i];
|
||||
panel.obj[mapNum][i].worldY = ds.mapObjectWorldY[mapNum][i];
|
||||
if (ds.mapObjectLootNames[mapNum][i] != null) panel.obj[mapNum][i].loot = getObject(ds.mapObjectLootNames[mapNum][i]);
|
||||
panel.obj[mapNum][i].opened = ds.mapObjectOpened[mapNum][i];
|
||||
if(panel.obj[mapNum][i].opened) panel.obj[mapNum][i].down1 = panel.obj[mapNum][i].image2;
|
||||
} else panel.obj[mapNum][i] = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user