diff --git a/saves/default/world.json b/saves/default/world.json new file mode 100644 index 00000000..db5b3af2 --- /dev/null +++ b/saves/default/world.json @@ -0,0 +1 @@ +{"type":"GAME_WORLD","worldMinPoint":{"x":0.0,"y":0.0,"z":0.0},"worldMaxPoint":{"x":200000.0,"y":0.0,"z":200000.0},"worldSizeDiscrete":2000,"dynamicInterpolationRatio":100,"randomDampener":0.0,"isArena":false} \ No newline at end of file diff --git a/src/main/java/electrosphere/engine/LoadingThread.java b/src/main/java/electrosphere/engine/LoadingThread.java index b6546037..d0452f4d 100644 --- a/src/main/java/electrosphere/engine/LoadingThread.java +++ b/src/main/java/electrosphere/engine/LoadingThread.java @@ -117,11 +117,12 @@ public class LoadingThread extends Thread { //TODO: Globals.serverTerrainManager = new ServerTerrainManager(2000,50,100,randomDampener,0); Globals.serverTerrainManager = new ServerTerrainManager(2000,50,100,0.0f,0); SaveUtils.loadSave(Globals.currentSaveName); + Globals.dataCellManager = new DataCellManager(Globals.serverWorldData); //TODO: set spawnpoint //TODO: Globals.serverWorldData = ServerWorldData.createGameWorld(Globals.serverTerrainManager); //TODO: Globals.dataCellManager = new DataCellManager(Globals.serverWorldData); - Globals.serverWorldData = ServerWorldData.createGameWorld(Globals.serverTerrainManager); - Globals.dataCellManager = new DataCellManager(Globals.serverWorldData); +// Globals.serverWorldData = ServerWorldData.createGameWorld(Globals.serverTerrainManager); +// Globals.dataCellManager = new DataCellManager(Globals.serverWorldData); } LoggerInterface.loggerEngine.INFO("run server: " + Globals.RUN_SERVER + " run client: " + Globals.RUN_CLIENT); diff --git a/src/main/java/electrosphere/game/server/db/DatabaseUtils.java b/src/main/java/electrosphere/game/server/db/DatabaseUtils.java index 8e6e80ec..5ab2f009 100644 --- a/src/main/java/electrosphere/game/server/db/DatabaseUtils.java +++ b/src/main/java/electrosphere/game/server/db/DatabaseUtils.java @@ -13,7 +13,7 @@ import java.util.logging.Logger; public class DatabaseUtils { public static boolean initCentralDBFile(String path){ String sanitizedPath = "." + FileUtils.sanitizeFilePath(path); - if(!FileUtils.checkDirectoryExists(sanitizedPath)){ + if(!FileUtils.checkFileExists(sanitizedPath)){ return false; } String dbFilePath = sanitizedPath + "/central.db"; diff --git a/src/main/java/electrosphere/game/server/saves/SaveUtils.java b/src/main/java/electrosphere/game/server/saves/SaveUtils.java index edc53a5a..7c879378 100644 --- a/src/main/java/electrosphere/game/server/saves/SaveUtils.java +++ b/src/main/java/electrosphere/game/server/saves/SaveUtils.java @@ -1,6 +1,9 @@ package electrosphere.game.server.saves; import electrosphere.game.server.db.DatabaseUtils; +import electrosphere.game.server.terrain.manager.ServerTerrainManager; +import electrosphere.game.server.world.ServerWorldData; +import electrosphere.game.server.world.datacell.DataCellManager; import electrosphere.main.Globals; import electrosphere.util.FileUtils; import java.util.LinkedList; @@ -24,7 +27,7 @@ public class SaveUtils { public static boolean initSave(String saveName){ String dirPath = deriveSaveDirectoryPath(saveName); //check if exists - if(FileUtils.checkDirectoryExists(dirPath)){ + if(FileUtils.checkFileExists(dirPath)){ return false; } //create dir @@ -46,8 +49,7 @@ public class SaveUtils { return rVal; } - - public static boolean loadSave(String saveName){ + public static boolean loadTerrainAndDB(String saveName){ String dirPath = deriveSaveDirectoryPath(saveName); String dbFilePath = FileUtils.sanitizeFilePath(dirPath) + "/central.db"; Globals.dbController.connect(dbFilePath); @@ -55,8 +57,41 @@ public class SaveUtils { return true; } + public static boolean loadSave(String saveName){ + String dirPath = deriveSaveDirectoryPath(saveName); + String dbFilePath = FileUtils.sanitizeFilePath(dirPath) + "/central.db"; + Globals.dbController.connect(dbFilePath); + Globals.serverTerrainManager.load(saveName); + Globals.serverWorldData = FileUtils.loadObjectFromSavePath(saveName, "world.json", ServerWorldData.class); + return true; + } + public static List getSaves(){ return FileUtils.listDirectory("./saves"); } + public static boolean worldHasSave(String saveName){ + String dirPath = deriveSaveDirectoryPath(saveName) + "/world.json"; + System.out.println("Exists? " + dirPath); + return FileUtils.checkFileExists(dirPath); + } + + public static boolean loadTerrainAndCreateWorldData(){ + Globals.serverTerrainManager = new ServerTerrainManager(2000,50,100,0.0f,0); + SaveUtils.loadTerrainAndDB(Globals.currentSaveName); + Globals.serverWorldData = ServerWorldData.createGameWorld(Globals.serverTerrainManager); + Globals.dataCellManager = new DataCellManager(Globals.serverWorldData); + return true; + } + + public static boolean saveWorldDataToSave(String saveName){ + /* + Globals.serverWorldData = ServerWorldData.createGameWorld(Globals.serverTerrainManager); + //TODO: Globals.dataCellManager = new DataCellManager(Globals.serverWorldData); + */ + String dirPath = deriveSaveDirectoryPath(saveName); + FileUtils.serializeObjectToFilePath(dirPath + "/world.json", Globals.serverWorldData); + return true; + } + } diff --git a/src/main/java/electrosphere/menu/MenuTransition.java b/src/main/java/electrosphere/menu/MenuTransition.java index c1bca562..cad73773 100644 --- a/src/main/java/electrosphere/menu/MenuTransition.java +++ b/src/main/java/electrosphere/menu/MenuTransition.java @@ -2,6 +2,7 @@ package electrosphere.menu; import electrosphere.controls.ControlHandler; import electrosphere.engine.LoadingThread; +import electrosphere.game.server.saves.SaveUtils; import electrosphere.main.Globals; import electrosphere.main.Main; import electrosphere.net.NetUtils; @@ -54,10 +55,42 @@ public class MenuTransition { } break; case WORLD_SELECT_MENU: + switch(((TextBox)m.getCurrentOption()).getText()){ + case "CREATE WORLD": + m.dispose(); + Globals.currentMenu = MenuUtils.createWorldCreationMenu(); + break; + default: + String worldName = ((TextBox)m.getCurrentOption()).getText(); + m.dispose(); + //check if has save or not + if(SaveUtils.worldHasSave(worldName.toLowerCase())){ + Globals.loadingThread = new LoadingThread(LoadingThread.LOAD_MAIN_GAME); + Globals.RUN_CLIENT = true; + Globals.RUN_SERVER = true; + Globals.loadingThread.start(); + } else { + Globals.currentSaveName = worldName.toLowerCase(); + SaveUtils.loadTerrainAndCreateWorldData(); + Globals.currentMenu = MenuUtils.createSaveCreationMenu(); + } + break; + } break; case WORLD_CREATE_MENU: break; case SAVE_CREATE_MENU: + switch(((TextBox)m.getCurrentOption()).getText()){ + case "SAVE": + m.dispose(); + SaveUtils.saveWorldDataToSave(Globals.currentSaveName); + Globals.currentMenu = MenuUtils.createWorldSelectMenu(); + break; + case "CANCEL": + m.dispose(); + Globals.currentMenu = MenuUtils.createWorldSelectMenu(); + break; + } break; case CHARACTER_CREATE_MENU: break; diff --git a/src/main/java/electrosphere/menu/MenuUtils.java b/src/main/java/electrosphere/menu/MenuUtils.java index 998a9089..00f07ba5 100644 --- a/src/main/java/electrosphere/menu/MenuUtils.java +++ b/src/main/java/electrosphere/menu/MenuUtils.java @@ -51,17 +51,15 @@ public class MenuUtils { List saveNames = SaveUtils.getSaves(); int verticalPosition = 125; //TODO: add text input to name world - rVal.addOption(WidgetUtils.createVerticallyAlignedMinSizeTextBoxFromCharCount(40, 40, screenTop - verticalPosition, "CREATE WORLD", true)); + rVal.addOption(WidgetUtils.createVerticallyAlignedMinSizeTextBoxFromCharCount(40, 40, screenTop - 125, "CREATE WORLD", true)); return rVal; } public static Menu createSaveCreationMenu(){ - Menu rVal = new Menu(MenuType.WORLD_CREATE_MENU); + Menu rVal = new Menu(MenuType.SAVE_CREATE_MENU); int screenTop = Globals.WINDOW_HEIGHT - 150; - List saveNames = SaveUtils.getSaves(); - int verticalPosition = 125; - //TODO: add text input to name world - rVal.addOption(WidgetUtils.createVerticallyAlignedMinSizeTextBoxFromCharCount(40, 40, screenTop - verticalPosition, "CREATE WORLD", true)); + rVal.addOption(WidgetUtils.createVerticallyAlignedMinSizeTextBoxFromCharCount(40, 40, screenTop - 125, "SAVE", true)); + rVal.addOption(WidgetUtils.createVerticallyAlignedMinSizeTextBoxFromCharCount(40, 40, screenTop - 200, "CANCEL", true)); return rVal; } diff --git a/src/main/java/electrosphere/util/FileUtils.java b/src/main/java/electrosphere/util/FileUtils.java index 54b55fab..02dc8309 100644 --- a/src/main/java/electrosphere/util/FileUtils.java +++ b/src/main/java/electrosphere/util/FileUtils.java @@ -199,7 +199,7 @@ public class FileUtils { * @param directoryName * @return true if directory exists, false otherwise */ - public static boolean checkDirectoryExists(String directoryName){ + public static boolean checkFileExists(String directoryName){ File targetDir = new File(sanitizeFilePath(directoryName)); if(targetDir.exists()){ return true; @@ -208,6 +208,7 @@ public class FileUtils { } } + /** * Trys to create a directory * @param directoryName