From f97be94b7d8e16edf930a48399657f31ec98e6ea Mon Sep 17 00:00:00 2001 From: Chris Kearney <chris.kearney@urbanairship.com> Date: Thu, 4 Sep 2014 22:59:15 -0700 Subject: [PATCH] reading and writing to a json file for roomdata is working --- .../java/com/comandante/creeper/Main.java | 14 +-- .../comandante/creeper/room/MapsManager.java | 2 + .../creeper/room/RoomLayoutCsvPrototype.java | 100 ------------------ .../comandante/creeper/room/RoomModel.java | 12 ++- .../creeper/room/RoomModelBuilder.java | 8 +- .../creeper/room/WorldExporter.java | 100 +++++++++++++++++- .../command/admin/SaveWorldCommand.java | 3 +- 7 files changed, 124 insertions(+), 115 deletions(-) delete mode 100644 src/main/java/com/comandante/creeper/room/RoomLayoutCsvPrototype.java diff --git a/src/main/java/com/comandante/creeper/Main.java b/src/main/java/com/comandante/creeper/Main.java index 96f189da..d6655cad 100644 --- a/src/main/java/com/comandante/creeper/Main.java +++ b/src/main/java/com/comandante/creeper/Main.java @@ -7,11 +7,10 @@ import com.comandante.creeper.npc.StreetHustler; import com.comandante.creeper.player.PlayerManager; import com.comandante.creeper.player.PlayerMetadata; import com.comandante.creeper.room.Area; -import com.comandante.creeper.room.MapMatrix; import com.comandante.creeper.room.MapsManager; import com.comandante.creeper.room.Room; -import com.comandante.creeper.room.RoomLayoutCsvPrototype; import com.comandante.creeper.room.RoomManager; +import com.comandante.creeper.room.WorldExporter; import com.comandante.creeper.server.CreeperCommandRegistry; import com.comandante.creeper.server.CreeperServer; import com.comandante.creeper.server.command.DropCommand; @@ -68,16 +67,12 @@ public class Main { System.out.println("Creating Brian User."); playerManager.savePlayerMetadata(new PlayerMetadata("brian", "poop", new String(Base64.encodeBase64("brian".getBytes())), chrisBrianStats)); } - MapMatrix floorMapMatrix = RoomLayoutCsvPrototype.buildRooms(entityManager); System.out.print("Building all rooms."); MapsManager mapsManager = new MapsManager(roomManager); - mapsManager.addFloorMatrix(1, floorMapMatrix); - mapsManager.generateAllMaps(9, 9); GameManager gameManager = new GameManager(roomManager, playerManager, entityManager, mapsManager); - gameManager.getFloorManager().addFloor(1, "main"); - - - + WorldExporter worldExporter = new WorldExporter(roomManager, mapsManager, gameManager.getFloorManager(), entityManager); + worldExporter.readWorldFromDisk(); + mapsManager.generateAllMaps(9, 9); entityManager.addEntity(new NpcSpawner(new StreetHustler(gameManager), Area.NEWBIE_ZONE, gameManager, new SpawnRule(10, 100, 4, 100))); Iterator<Map.Entry<Integer, Room>> rooms = roomManager.getRooms(); while (rooms.hasNext()) { @@ -105,7 +100,6 @@ public class Main { CreeperServer creeperServer = new CreeperServer(8080, db); creeperServer.run(gameManager); - System.out.println("Creeper started."); } diff --git a/src/main/java/com/comandante/creeper/room/MapsManager.java b/src/main/java/com/comandante/creeper/room/MapsManager.java index e4cf561c..bf0ea560 100644 --- a/src/main/java/com/comandante/creeper/room/MapsManager.java +++ b/src/main/java/com/comandante/creeper/room/MapsManager.java @@ -29,7 +29,9 @@ public class MapsManager { } public String drawMap(Integer roomId, Coords max) { + Room room = roomManager.getRoom(roomId); MapMatrix floorMatrix = floorMatrixMaps.get(roomManager.getRoom(roomId).getFloorId()); + MapMatrix mapMatrix = floorMatrix.extractMatrix(roomId, max); return mapMatrix.renderMap(roomId); } diff --git a/src/main/java/com/comandante/creeper/room/RoomLayoutCsvPrototype.java b/src/main/java/com/comandante/creeper/room/RoomLayoutCsvPrototype.java deleted file mode 100644 index c2b6b1e2..00000000 --- a/src/main/java/com/comandante/creeper/room/RoomLayoutCsvPrototype.java +++ /dev/null @@ -1,100 +0,0 @@ -package com.comandante.creeper.room; - - -import com.comandante.creeper.entity.EntityManager; -import com.google.common.base.Optional; -import com.google.common.collect.Lists; - -import java.io.File; -import java.io.FileWriter; -import java.io.IOException; -import java.util.Iterator; -import java.util.List; - -public class RoomLayoutCsvPrototype { - public static String mapCSV = ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,8517,8518,8519,8520,8521\n" + - ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,9017,9018,9019,9020,9021\n" + - ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,9517,9518,9519,9520,9521\n" + - ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,10017,10018,10019,10020,10021\n" + - ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,10517,10518,10519,10520,10521\n" + - "2005,2006,2007,2008,2009,2010,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,11017,11018,11019,11020,11021\n" + - "2505,2506,2507,2508,2509,2510,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,10006,10007,10008,10009,10010,9511,11514,11515,11516,11517,11518,11519,11520,11521\n" + - "3005,3006,3007,3008,3009,3010,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,10505,,,,,,,,,,,,,\n" + - "3505,3506,3507,3508,3509,3510,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,11005,,,,,,,,,,,,,\n" + - "4005,4006,4007,4008,4009,4010,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,11505,,,,,,,,,,,,,\n" + - "4505,4506,4507,4508,4509,4510,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,12005,,,,,,,,,,,,,\n" + - "5005,5006,5007,5008,5009,5010,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,12505,,,,,,,,,,,,,\n" + - "5505,5506,5507,5508,5509,5510,,,,,,,,,25506,,,,25007,,,,,,,,,,,,20510,,,,,,,13005,,,,,,,,,,,,,\n" + - "6005,6006,6007,6008,6009,6010,509,510,511,512,513,514,515,516,517,518,519,520,521,3,4,26509,6,1,8,9,10,11,12,13,21010,15,16,17,18,19,20,21,,,,,,,,,,,,,\n" + - "6505,6506,6507,6508,6509,6510,,,,,,,,,26006,,,,,,,,,,,,,,,,21510,,,,,,,,,,,,,,,,,,,,\n" + - "7005,7006,7007,7008,7009,7010,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,\n" + - "7505,7506,7507,7508,7509,7510,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,\n" + - "8005,8006,8007,8008,8009,8010,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,\n" + - "8505,8506,8507,8508,8509,8510,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,\n" + - "9005,9006,9007,9008,9009,9010,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,\n" + - "9505,9506,9507,9508,9509,9510,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,\n"; - - - public static MapMatrix buildRooms(EntityManager entityManager) { - MapMatrix mapMatrix = MapMatrix.createMatrixFromCsv(mapCSV); - List<BasicRoom> rooms = Lists.newArrayList(); - Iterator<List<Integer>> rows = mapMatrix.getRows(); - while (rows.hasNext()) { - List<Integer> row = rows.next(); - for (Integer newRoomId : row) { - if (newRoomId == 0) { - continue; - } - BasicRoomBuilder basicRoomBuilder = new BasicRoomBuilder(); - basicRoomBuilder.setRoomId(newRoomId); - basicRoomBuilder.setRoomDescription("This is a temporary description."); - basicRoomBuilder.setRoomTitle("The generated room-" + newRoomId); - basicRoomBuilder.setFloorId(1); - Integer north = mapMatrix.getNorth(newRoomId); - if (north > 0) { - basicRoomBuilder.setNorthId(Optional.of(north)); - } - Integer east = mapMatrix.getEast(newRoomId); - if (east > 0) { - basicRoomBuilder.setEastId(Optional.of(east)); - } - Integer south = mapMatrix.getSouth(newRoomId); - if (south > 0) { - basicRoomBuilder.setSouthId(Optional.of(south)); - } - Integer west = mapMatrix.getWest(newRoomId); - if (west > 0) { - basicRoomBuilder.setWestId(Optional.of(west)); - } - rooms.add(basicRoomBuilder.createBasicRoom()); - } - } - for (Room room : rooms) { - entityManager.addEntity(room); - } - return mapMatrix; - } - - public static void main(String[] args) throws IOException { - int totalRows = 500; - int toalColums = 500; - - List<List<Integer>> rows = Lists.newArrayList(); - - for (int i = 0; i < totalRows; i++) { - rows.add(Lists.<Integer>newArrayList()); - } - int id = 1; - FileWriter fileWriter = new FileWriter(new File("/tmp/bigmap.csv")); - for (List<Integer> row : rows) { - for (int i = 0; i < toalColums; i++) { - id++; - fileWriter.write(id + ","); - } - fileWriter.write("\n"); - } - - fileWriter.close(); - } - -} diff --git a/src/main/java/com/comandante/creeper/room/RoomModel.java b/src/main/java/com/comandante/creeper/room/RoomModel.java index 8c140766..1e178a39 100644 --- a/src/main/java/com/comandante/creeper/room/RoomModel.java +++ b/src/main/java/com/comandante/creeper/room/RoomModel.java @@ -7,17 +7,27 @@ import java.util.Set; public class RoomModel { int roomId; + int floorId; String roomDescription; String roomTitle; Set<String> roomTags; - public RoomModel(int roomId, String roomDescription, String roomTitle, Set<String> roomTags) { + public RoomModel(int roomId, int floorId, String roomDescription, String roomTitle, Set<String> roomTags) { this.roomId = roomId; + this.floorId = floorId; this.roomDescription = roomDescription; this.roomTitle = roomTitle; this.roomTags = roomTags; } + public int getFloorId() { + return floorId; + } + + public void setFloorId(int floorId) { + this.floorId = floorId; + } + public Set<String> getRoomTags() { return roomTags; } diff --git a/src/main/java/com/comandante/creeper/room/RoomModelBuilder.java b/src/main/java/com/comandante/creeper/room/RoomModelBuilder.java index 2b82dbdf..60bf1dbc 100644 --- a/src/main/java/com/comandante/creeper/room/RoomModelBuilder.java +++ b/src/main/java/com/comandante/creeper/room/RoomModelBuilder.java @@ -4,6 +4,7 @@ import java.util.Set; public class RoomModelBuilder { private int roomId; + private int floorId; private String roomDescription; private String roomTitle; private Set<String> roomTags; @@ -13,6 +14,11 @@ public class RoomModelBuilder { return this; } + public RoomModelBuilder setFloorId(int floorId) { + this.floorId = floorId; + return this; + } + public RoomModelBuilder setRoomDescription(String roomDescription) { this.roomDescription = roomDescription; return this; @@ -29,6 +35,6 @@ public class RoomModelBuilder { } public RoomModel build() { - return new RoomModel(roomId, roomDescription, roomTitle, roomTags); + return new RoomModel(roomId, floorId, roomDescription, roomTitle, roomTags); } } \ No newline at end of file diff --git a/src/main/java/com/comandante/creeper/room/WorldExporter.java b/src/main/java/com/comandante/creeper/room/WorldExporter.java index 2ff1c0b8..0ea432d7 100644 --- a/src/main/java/com/comandante/creeper/room/WorldExporter.java +++ b/src/main/java/com/comandante/creeper/room/WorldExporter.java @@ -1,14 +1,20 @@ package com.comandante.creeper.room; +import com.comandante.creeper.entity.EntityManager; import com.google.common.base.Function; +import com.google.common.base.Optional; import com.google.common.collect.Iterators; +import com.google.common.collect.Sets; import com.google.common.io.Files; import com.google.gson.GsonBuilder; import java.io.File; +import java.io.FileNotFoundException; import java.io.IOException; +import java.nio.charset.Charset; import java.util.HashSet; import java.util.Iterator; +import java.util.List; import java.util.Set; public class WorldExporter { @@ -18,11 +24,13 @@ public class WorldExporter { private final RoomManager roomManager; private final MapsManager mapsManager; private final FloorManager floorManager; + private final EntityManager entityManager; - public WorldExporter(RoomManager roomManager, MapsManager mapsManager, FloorManager floorManager) { + public WorldExporter(RoomManager roomManager, MapsManager mapsManager, FloorManager floorManager, EntityManager entityManager) { this.roomManager = roomManager; this.mapsManager = mapsManager; this.floorManager = floorManager; + this.entityManager = entityManager; } public void saveWorld() { @@ -38,6 +46,7 @@ public class WorldExporter { floorModel.setId(floorId); floorModel.setRawMatrixCsv(mapMatrix.getCsv()); floorModel.setRoomModels((new HashSet<RoomModel>())); + floorModel.setName(floorManager.getName(floorId)); Iterator<RoomModel> roomModels = Iterators.transform(rooms.iterator(), getRoomModels()); while (roomModels.hasNext()) { RoomModel next = roomModels.next(); @@ -47,7 +56,7 @@ public class WorldExporter { String floorjson = new GsonBuilder().setPrettyPrinting().create().toJson(floorModel, FloorModel.class); try { - Files.write(floorjson.getBytes(), new File(WORLD_DIR + floorManager.getName(floorId) + ".json")); + Files.write(floorjson.getBytes(), new File(WORLD_DIR + floorManager.getName(floorId) + "_floor.json")); } catch (IOException e) { e.printStackTrace(); } @@ -67,4 +76,91 @@ public class WorldExporter { }; } + public Function<RoomModel, BasicRoom> getBasicRoom(final MapMatrix mapMatrix) { + return new Function<RoomModel, BasicRoom>() { + @Override + public BasicRoom apply(RoomModel roomModel) { + BasicRoomBuilder basicRoomBuilder = new BasicRoomBuilder() + .setRoomId(roomModel.getRoomId()) + .setFloorId(roomModel.getFloorId()) + .setRoomDescription(roomModel.getRoomDescription()) + .setRoomTitle(roomModel.getRoomTitle()); + + for (String tag : roomModel.getRoomTags()) { + basicRoomBuilder.addTag(tag); + } + Integer north = mapMatrix.getNorth(roomModel.getRoomId()); + if (north > 0) { + basicRoomBuilder.setNorthId(Optional.of(north)); + } + Integer east = mapMatrix.getEast(roomModel.getRoomId()); + if (east > 0) { + basicRoomBuilder.setEastId(Optional.of(east)); + } + Integer south = mapMatrix.getSouth(roomModel.getRoomId()); + if (south > 0) { + basicRoomBuilder.setSouthId(Optional.of(south)); + } + Integer west = mapMatrix.getWest(roomModel.getRoomId()); + if (west > 0) { + basicRoomBuilder.setWestId(Optional.of(west)); + } + return basicRoomBuilder.createBasicRoom(); + } + }; + } + + public MapMatrix readWorldFromDisk() throws FileNotFoundException { + FloorModel floorModel = new GsonBuilder().create().fromJson(Files.newReader(new File(("world/main_floor.json")), Charset.defaultCharset()), FloorModel.class); + MapMatrix matrixFromCsv = MapMatrix.createMatrixFromCsv(floorModel.getRawMatrixCsv()); + Set<Room> rooms = Sets.newHashSet(); + if (floorModel.getRoomModels().size() == 0) { + Iterator<List<Integer>> rows = matrixFromCsv.getRows(); + while (rows.hasNext()) { + List<Integer> row = rows.next(); + for (Integer roomId: row) { + if (roomId.equals(0)){ + continue; + } + BasicRoomBuilder basicRoomBuilder = new BasicRoomBuilder(); + basicRoomBuilder.setFloorId(floorModel.getId()); + basicRoomBuilder.setRoomId(roomId); + basicRoomBuilder.setRoomTitle("This is a blank title."); + basicRoomBuilder.setRoomDescription("This is a blank Description.\nWords should go here, ideally."); + Integer north = matrixFromCsv.getNorth(roomId); + if (north > 0) { + basicRoomBuilder.setNorthId(Optional.of(north)); + } + Integer east = matrixFromCsv.getEast(roomId); + if (east > 0) { + basicRoomBuilder.setEastId(Optional.of(east)); + } + Integer south = matrixFromCsv.getSouth(roomId); + if (south > 0) { + basicRoomBuilder.setSouthId(Optional.of(south)); + } + Integer west = matrixFromCsv.getWest(roomId); + if (west > 0) { + basicRoomBuilder.setWestId(Optional.of(west)); + } + rooms.add(basicRoomBuilder.createBasicRoom()); + } + } + for (Room r: rooms) { + entityManager.addEntity(r); + } + floorManager.addFloor(floorModel.getId(), floorModel.getName()); + mapsManager.addFloorMatrix(floorModel.getId(), matrixFromCsv); + return matrixFromCsv; + } + Iterator<BasicRoom> transform = Iterators.transform(floorModel.getRoomModels().iterator(), getBasicRoom(matrixFromCsv)); + while (transform.hasNext()) { + BasicRoom next = transform.next(); + entityManager.addEntity(next); + } + floorManager.addFloor(floorModel.getId(), floorModel.getName()); + mapsManager.addFloorMatrix(floorModel.getId(), matrixFromCsv); + return matrixFromCsv; + } + } diff --git a/src/main/java/com/comandante/creeper/server/command/admin/SaveWorldCommand.java b/src/main/java/com/comandante/creeper/server/command/admin/SaveWorldCommand.java index 8f2820f2..ff69a189 100644 --- a/src/main/java/com/comandante/creeper/server/command/admin/SaveWorldCommand.java +++ b/src/main/java/com/comandante/creeper/server/command/admin/SaveWorldCommand.java @@ -25,7 +25,8 @@ public class SaveWorldCommand extends Command { WorldExporter worldExporter = new WorldExporter( getGameManager().getRoomManager(), getGameManager().getMapsManager(), - getGameManager().getFloorManager()); + getGameManager().getFloorManager(), + getGameManager().getEntityManager()); worldExporter.saveWorld(); getGameManager().getChannelUtils().write(getPlayerId(extractCreeperSession(e.getChannel())), "World saved."); -- GitLab