From c8ba4c5e5c5d08f15da04db279efac84e68a2e31 Mon Sep 17 00:00:00 2001 From: austin Date: Tue, 3 Dec 2024 14:05:54 -0500 Subject: [PATCH] move world generation menu functions --- docs/src/progress/renderertodo.md | 1 + .../client/ui/menu/MenuGenerators.java | 118 --------------- .../mainmenu/MenuGeneratorsMultiplayer.java | 3 +- .../mainmenu/MenuGeneratorsTitleMenu.java | 2 +- .../ui/menu/mainmenu/MenuWorldSelect.java | 139 ++++++++++++++++++ .../game/server/world/ServerWorldData.java | 5 + .../fluid/manager/ServerFluidManager.java | 6 - .../electrosphere/server/saves/SaveUtils.java | 7 +- 8 files changed, 150 insertions(+), 131 deletions(-) create mode 100644 src/main/java/electrosphere/client/ui/menu/mainmenu/MenuWorldSelect.java diff --git a/docs/src/progress/renderertodo.md b/docs/src/progress/renderertodo.md index f7a910fe..1b72885a 100644 --- a/docs/src/progress/renderertodo.md +++ b/docs/src/progress/renderertodo.md @@ -1228,6 +1228,7 @@ Add native testing step to jenkins pipeline Native code building correctly in jenkins pipeline Refactoring native code Fix gravity tree not deactivating when body is disabled +Refactoring world menu generators into dedicated class diff --git a/src/main/java/electrosphere/client/ui/menu/MenuGenerators.java b/src/main/java/electrosphere/client/ui/menu/MenuGenerators.java index 82860032..11262009 100644 --- a/src/main/java/electrosphere/client/ui/menu/MenuGenerators.java +++ b/src/main/java/electrosphere/client/ui/menu/MenuGenerators.java @@ -1,7 +1,5 @@ package electrosphere.client.ui.menu; -import java.util.List; - import electrosphere.auth.AuthenticationManager; import electrosphere.client.ui.components.InputMacros; import electrosphere.client.ui.menu.mainmenu.MenuGeneratorsKeybind; @@ -9,7 +7,6 @@ import electrosphere.client.ui.menu.mainmenu.MenuGeneratorsTitleMenu; import electrosphere.engine.Globals; import electrosphere.engine.loadingthreads.LoadingThread; import electrosphere.engine.loadingthreads.LoadingThread.LoadingThreadType; -import electrosphere.entity.scene.SceneGenerator; import electrosphere.net.NetUtils; import electrosphere.renderer.ui.elements.Button; import electrosphere.renderer.ui.elements.Div; @@ -17,9 +14,6 @@ import electrosphere.renderer.ui.elements.FormElement; import electrosphere.renderer.ui.elements.Label; import electrosphere.renderer.ui.elements.TextInput; import electrosphere.renderer.ui.elementtypes.Element; -import electrosphere.renderer.ui.elementtypes.ContainerElement.YogaAlignment; -import electrosphere.renderer.ui.elementtypes.ContainerElement.YogaJustification; -import electrosphere.server.saves.SaveUtils; /** * Generator functions for creating menus @@ -35,118 +29,6 @@ public class MenuGenerators { return rVal; } - /** - * Creates the world selection menu content - * @return The menu content - */ - public static Element createWorldSelectMenu(){ - FormElement rVal = new FormElement(); - - //create save button column - Div saveButtonContainer = Div.createCol(); - saveButtonContainer.setMarginRight(50); - List saveNames = SaveUtils.getSaves(); - for(String saveName : saveNames){ - if(!saveName.startsWith(".")){ - - Div spacer = Div.createDiv(); - spacer.addChild(Button.createButton(saveName.toUpperCase(), () -> { - if(SaveUtils.saveHasWorldFile(saveName.toLowerCase())){ - //need to log client in - Globals.clientUsername = "username"; - Globals.clientPassword = AuthenticationManager.getHashedString("password"); - LoadingThread serverThread = new LoadingThread(LoadingThreadType.MAIN_GAME, saveName, Globals.clientUsername, Globals.clientPassword); - Globals.RUN_CLIENT = true; - Globals.RUN_SERVER = true; - Globals.threadManager.start(serverThread); - } else { - SaveUtils.loadSave(saveName.toLowerCase(), false); - WindowUtils.replaceMainMenuContents(MenuGenerators.createSaveCreationMenu()); - } - })); - spacer.setMarginBottom(30); - - //button (select save) - saveButtonContainer.addChild(spacer); - } - } - - Div createButtonContainer = Div.createCol(); - createButtonContainer.setMarginLeft(50); - //button (create) - createButtonContainer.addChild(Button.createButton("Create World", () -> { - WindowUtils.replaceMainMenuContents(MenuGenerators.createWorldCreationMenu()); - })); - - - //layout - Div mainLayout = Div.createRow( - saveButtonContainer, - createButtonContainer - ); - mainLayout.setMarginTop(100); - mainLayout.setJustifyContent(YogaJustification.Center); - rVal.addChild(mainLayout); - - return rVal; - } - - /** - * World creation menu - * @return The world creation menu element - */ - public static Element createWorldCreationMenu(){ - FormElement rVal = new FormElement(); - - //text entry (address) - Div worldNameInputContainer = Div.createRow(); - worldNameInputContainer.setMarginBottom(20); - TextInput worldNameInput = TextInput.createTextInput(); - worldNameInput.setMinWidth(100); - worldNameInput.setMaxWidthPercent(50); - worldNameInput.setText("World name"); - worldNameInputContainer.addChild(worldNameInput); - - - //button (create) - Div createButtonContainer = Div.createCol(); - createButtonContainer.setMarginTop(20); - createButtonContainer.addChild(Button.createButton("Create", () -> { - String saveName = worldNameInput.getText(); - //create save dir - SaveUtils.createOrOverwriteSave(saveName, SceneGenerator.createProceduralSceneFile(saveName)); - WindowUtils.replaceMainMenuContents(MenuGenerators.createWorldSelectMenu()); - })); - - - //layout content - Div mainLayout = Div.createCol( - worldNameInputContainer, - createButtonContainer - ); - mainLayout.setMarginTop(300); - mainLayout.setAlignItems(YogaAlignment.Center); - rVal.addChild(mainLayout); - - return rVal; - } - - public static Element createSaveCreationMenu(){ - FormElement rVal = new FormElement(); - - //button (save) - rVal.addChild(Button.createButton("Save", () -> { - WindowUtils.replaceMainMenuContents(MenuGenerators.createWorldSelectMenu()); - throw new UnsupportedOperationException("Need to update to use new save flow"); - })); - - //button (cancel) - rVal.addChild(Button.createButton("Cancel", () -> { - WindowUtils.replaceMainMenuContents(MenuGenerators.createWorldSelectMenu()); - })); - - return rVal; - } public static Element createCharacterCreationMenu(){ FormElement rVal = new FormElement(); diff --git a/src/main/java/electrosphere/client/ui/menu/mainmenu/MenuGeneratorsMultiplayer.java b/src/main/java/electrosphere/client/ui/menu/mainmenu/MenuGeneratorsMultiplayer.java index 59684328..b1d30e31 100644 --- a/src/main/java/electrosphere/client/ui/menu/mainmenu/MenuGeneratorsMultiplayer.java +++ b/src/main/java/electrosphere/client/ui/menu/mainmenu/MenuGeneratorsMultiplayer.java @@ -1,7 +1,6 @@ package electrosphere.client.ui.menu.mainmenu; import electrosphere.client.ui.components.CharacterCustomizer; -import electrosphere.client.ui.menu.MenuGenerators; import electrosphere.client.ui.menu.WindowUtils; import electrosphere.engine.Globals; import electrosphere.entity.types.creature.CreatureTemplate; @@ -28,7 +27,7 @@ public class MenuGeneratorsMultiplayer { createButton.addChild(createLabel); rVal.addChild(createButton); createButton.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){ - WindowUtils.replaceMainMenuContents(MenuGenerators.createWorldCreationMenu()); + WindowUtils.replaceMainMenuContents(MenuWorldSelect.createWorldCreationMenu()); return false; }}); diff --git a/src/main/java/electrosphere/client/ui/menu/mainmenu/MenuGeneratorsTitleMenu.java b/src/main/java/electrosphere/client/ui/menu/mainmenu/MenuGeneratorsTitleMenu.java index 20566402..5fdc519b 100644 --- a/src/main/java/electrosphere/client/ui/menu/mainmenu/MenuGeneratorsTitleMenu.java +++ b/src/main/java/electrosphere/client/ui/menu/mainmenu/MenuGeneratorsTitleMenu.java @@ -48,7 +48,7 @@ public class MenuGeneratorsTitleMenu { //button (multiplayer) optionPanel.addChild(Button.createButtonCentered("Singleplayer", 1.0f, () -> { - WindowUtils.replaceMainMenuContents(MenuGenerators.createWorldSelectMenu()); + WindowUtils.replaceMainMenuContents(MenuWorldSelect.createWorldSelectMenu()); }).setOnClickAudio(AssetDataStrings.UI_TONE_BUTTON_TITLE)); //button (multiplayer) diff --git a/src/main/java/electrosphere/client/ui/menu/mainmenu/MenuWorldSelect.java b/src/main/java/electrosphere/client/ui/menu/mainmenu/MenuWorldSelect.java new file mode 100644 index 00000000..64c4451b --- /dev/null +++ b/src/main/java/electrosphere/client/ui/menu/mainmenu/MenuWorldSelect.java @@ -0,0 +1,139 @@ +package electrosphere.client.ui.menu.mainmenu; + +import java.util.List; + +import electrosphere.auth.AuthenticationManager; +import electrosphere.client.ui.menu.WindowUtils; +import electrosphere.engine.Globals; +import electrosphere.engine.loadingthreads.LoadingThread; +import electrosphere.engine.loadingthreads.LoadingThread.LoadingThreadType; +import electrosphere.entity.scene.SceneGenerator; +import electrosphere.renderer.ui.elements.Button; +import electrosphere.renderer.ui.elements.Div; +import electrosphere.renderer.ui.elements.FormElement; +import electrosphere.renderer.ui.elements.TextInput; +import electrosphere.renderer.ui.elementtypes.ContainerElement.YogaAlignment; +import electrosphere.renderer.ui.elementtypes.ContainerElement.YogaJustification; +import electrosphere.renderer.ui.elementtypes.Element; +import electrosphere.server.saves.SaveUtils; + +public class MenuWorldSelect { + + /** + * Creates the world selection menu content + * @return The menu content + */ + public static Element createWorldSelectMenu(){ + FormElement rVal = new FormElement(); + + //create save button column + Div saveButtonContainer = Div.createCol(); + saveButtonContainer.setMarginRight(50); + List saveNames = SaveUtils.getSaves(); + for(String saveName : saveNames){ + if(!saveName.startsWith(".")){ + + Div spacer = Div.createDiv(); + spacer.addChild(Button.createButton(saveName.toUpperCase(), () -> { + if(SaveUtils.saveHasWorldFile(saveName.toLowerCase())){ + //need to log client in + Globals.clientUsername = "username"; + Globals.clientPassword = AuthenticationManager.getHashedString("password"); + LoadingThread serverThread = new LoadingThread(LoadingThreadType.MAIN_GAME, saveName, Globals.clientUsername, Globals.clientPassword); + Globals.RUN_CLIENT = true; + Globals.RUN_SERVER = true; + Globals.threadManager.start(serverThread); + } else { + SaveUtils.loadSave(saveName.toLowerCase(), false); + WindowUtils.replaceMainMenuContents(MenuWorldSelect.createSaveCreationMenu()); + } + })); + spacer.setMarginBottom(30); + + //button (select save) + saveButtonContainer.addChild(spacer); + } + } + + Div createButtonContainer = Div.createCol(); + createButtonContainer.setMarginLeft(50); + //button (create) + createButtonContainer.addChild(Button.createButton("Create World", () -> { + WindowUtils.replaceMainMenuContents(MenuWorldSelect.createWorldCreationMenu()); + })); + + + //layout + Div mainLayout = Div.createRow( + saveButtonContainer, + createButtonContainer + ); + mainLayout.setMarginTop(100); + mainLayout.setJustifyContent(YogaJustification.Center); + rVal.addChild(mainLayout); + + return rVal; + } + + /** + * World creation menu + * @return The world creation menu element + */ + public static Element createWorldCreationMenu(){ + FormElement rVal = new FormElement(); + + //text entry (address) + Div worldNameInputContainer = Div.createRow(); + worldNameInputContainer.setMarginBottom(20); + TextInput worldNameInput = TextInput.createTextInput(); + worldNameInput.setMinWidth(100); + worldNameInput.setMaxWidthPercent(50); + worldNameInput.setText("World name"); + worldNameInputContainer.addChild(worldNameInput); + + + //button (create) + Div createButtonContainer = Div.createCol(); + createButtonContainer.setMarginTop(20); + createButtonContainer.addChild(Button.createButton("Create", () -> { + String saveName = worldNameInput.getText(); + //create save dir + SaveUtils.createOrOverwriteSave(saveName, SceneGenerator.createProceduralSceneFile(saveName)); + WindowUtils.replaceMainMenuContents(MenuWorldSelect.createWorldSelectMenu()); + })); + + + //layout content + Div mainLayout = Div.createCol( + worldNameInputContainer, + createButtonContainer + ); + mainLayout.setMarginTop(300); + mainLayout.setAlignItems(YogaAlignment.Center); + rVal.addChild(mainLayout); + + return rVal; + } + + /** + * Save creation menu + * @return The save creation menu element + */ + public static Element createSaveCreationMenu(){ + FormElement rVal = new FormElement(); + + //button (save) + rVal.addChild(Button.createButton("Save", () -> { + WindowUtils.replaceMainMenuContents(MenuWorldSelect.createWorldSelectMenu()); + throw new UnsupportedOperationException("Need to update to use new save flow"); + })); + + //button (cancel) + rVal.addChild(Button.createButton("Cancel", () -> { + WindowUtils.replaceMainMenuContents(MenuWorldSelect.createWorldSelectMenu()); + })); + + return rVal; + } + +} diff --git a/src/main/java/electrosphere/game/server/world/ServerWorldData.java b/src/main/java/electrosphere/game/server/world/ServerWorldData.java index 7a0668e8..023bafe9 100644 --- a/src/main/java/electrosphere/game/server/world/ServerWorldData.java +++ b/src/main/java/electrosphere/game/server/world/ServerWorldData.java @@ -18,6 +18,11 @@ import org.joml.Vector3i; */ public class ServerWorldData { + /** + * The size of the procedural world + */ + public static final int PROCEDURAL_WORLD_SIZE = 2000; + public static enum WorldType { GAME_WORLD, ARENA_WORLD, diff --git a/src/main/java/electrosphere/server/fluid/manager/ServerFluidManager.java b/src/main/java/electrosphere/server/fluid/manager/ServerFluidManager.java index 2b66bff5..37c73a71 100644 --- a/src/main/java/electrosphere/server/fluid/manager/ServerFluidManager.java +++ b/src/main/java/electrosphere/server/fluid/manager/ServerFluidManager.java @@ -131,12 +131,6 @@ public class ServerFluidManager { } - /** - * Generates a fluid model for the manager - */ - public void generate(){ - } - /** * Saves the fluid model backing this manager to a save file * @param saveName The name of the save diff --git a/src/main/java/electrosphere/server/saves/SaveUtils.java b/src/main/java/electrosphere/server/saves/SaveUtils.java index 508e0cf2..c1b14a9b 100644 --- a/src/main/java/electrosphere/server/saves/SaveUtils.java +++ b/src/main/java/electrosphere/server/saves/SaveUtils.java @@ -12,7 +12,7 @@ import electrosphere.server.db.DatabaseUtils; import electrosphere.server.fluid.generation.DefaultFluidGenerator; import electrosphere.server.fluid.manager.ServerFluidManager; import electrosphere.server.terrain.generation.DefaultChunkGenerator; -import electrosphere.server.terrain.generation.OverworldChunkGenerator; +import electrosphere.server.terrain.generation.TestGenerationChunkGenerator; import electrosphere.server.terrain.manager.ServerTerrainManager; import electrosphere.util.FileUtils; @@ -112,15 +112,14 @@ public class SaveUtils { //generate terrain and save to disk // //Server world data - ServerWorldData serverWorldData = ServerWorldData.createGriddedRealmWorldData(2000); + ServerWorldData serverWorldData = ServerWorldData.createGriddedRealmWorldData(ServerWorldData.PROCEDURAL_WORLD_SIZE); FileUtils.serializeObjectToSavePath(saveName, "./world.json", serverWorldData); //terrain manager - ServerTerrainManager serverTerrainManager = new ServerTerrainManager(serverWorldData, 0, new OverworldChunkGenerator()); + ServerTerrainManager serverTerrainManager = new ServerTerrainManager(serverWorldData, 0, new TestGenerationChunkGenerator(serverWorldData, false)); serverTerrainManager.generate(); serverTerrainManager.save(saveName); //fluid manager ServerFluidManager serverFluidManager = new ServerFluidManager(serverWorldData, serverTerrainManager, 0, new DefaultFluidGenerator()); - serverFluidManager.generate(); serverFluidManager.save(saveName); } else { //just save to disk