From 47d60f46ee0f37e86c84b97174e75ecea4df1bcc Mon Sep 17 00:00:00 2001 From: austin Date: Tue, 17 Sep 2024 19:00:28 -0400 Subject: [PATCH] ui work --- docs/src/progress/renderertodo.md | 2 + .../electrosphere/menu/MenuGenerators.java | 221 ++++++------------ .../java/electrosphere/menu/WindowUtils.java | 9 +- .../menu/ingame/MenuGeneratorsInGame.java | 77 ++---- .../menu/ingame/MenuGeneratorsInventory.java | 2 +- .../ingame/MenuGeneratorsLevelEditor.java | 5 +- .../ingame/MenuGeneratorsTerrainEditing.java | 5 +- .../menu/mainmenu/MenuGeneratorsDemo.java | 3 +- .../mainmenu/MenuGeneratorsLevelEditor.java | 2 +- .../mainmenu/MenuGeneratorsMultiplayer.java | 178 +------------- .../mainmenu/MenuGeneratorsTitleMenu.java | 24 +- .../mainmenu/MenuGeneratorsUITesting.java | 9 +- .../menu/tutorial/TutorialMenus.java | 2 +- .../{macros => components}/InputMacros.java | 30 ++- .../renderer/ui/elements/Label.java | 20 +- .../ui/elements/ScrollableContainer.java | 3 - .../renderer/ui/elements/TextInput.java | 17 -- .../renderer/ui/elements/Window.java | 25 +- 18 files changed, 160 insertions(+), 474 deletions(-) rename src/main/java/electrosphere/renderer/ui/{macros => components}/InputMacros.java (84%) diff --git a/docs/src/progress/renderertodo.md b/docs/src/progress/renderertodo.md index 09988719..b78bbc14 100644 --- a/docs/src/progress/renderertodo.md +++ b/docs/src/progress/renderertodo.md @@ -783,6 +783,8 @@ Remove legacy UI handling of positioning -- entirely reliant on yoga now (09/17/2024) Framebuffer position drilling +Redesign inventory menu +Remove deprecated ui constructors # TODO diff --git a/src/main/java/electrosphere/menu/MenuGenerators.java b/src/main/java/electrosphere/menu/MenuGenerators.java index 69542198..0cb87f45 100644 --- a/src/main/java/electrosphere/menu/MenuGenerators.java +++ b/src/main/java/electrosphere/menu/MenuGenerators.java @@ -10,14 +10,13 @@ import electrosphere.entity.scene.SceneGenerator; import electrosphere.menu.mainmenu.MenuGeneratorsKeybind; import electrosphere.menu.mainmenu.MenuGeneratorsTitleMenu; import electrosphere.net.NetUtils; +import electrosphere.renderer.ui.components.InputMacros; import electrosphere.renderer.ui.elements.Button; import electrosphere.renderer.ui.elements.Div; import electrosphere.renderer.ui.elements.FormElement; import electrosphere.renderer.ui.elements.Label; import electrosphere.renderer.ui.elements.TextInput; -import electrosphere.renderer.ui.elementtypes.ClickableElement; import electrosphere.renderer.ui.elementtypes.Element; -import electrosphere.renderer.ui.events.ClickEvent; import electrosphere.server.saves.SaveUtils; /** @@ -33,19 +32,12 @@ public class MenuGenerators { public static Element createWorldSelectMenu(){ FormElement rVal = new FormElement(); - // int screenTop = Globals.WINDOW_HEIGHT - 150; List saveNames = SaveUtils.getSaves(); - int verticalPosition = 125; for(String saveName : saveNames){ if(!saveName.startsWith(".")){ //button (select save) - Button selectButton = new Button(); - Label selectLabel = new Label(1.0f); - selectLabel.setText(saveName.toUpperCase()); - selectButton.addChild(selectLabel); - rVal.addChild(selectButton); - selectButton.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){ + rVal.addChild(Button.createButton(saveName.toUpperCase(), () -> { if(SaveUtils.saveHasWorldFile(saveName.toLowerCase())){ //need to log client in Globals.clientUsername = "username"; @@ -60,50 +52,35 @@ public class MenuGenerators { SaveUtils.loadSave(saveName.toLowerCase(), false); WindowUtils.replaceMainMenuContents(MenuGenerators.createSaveCreationMenu()); } - return false; - }}); + })); - verticalPosition = verticalPosition + 75; } } //button (create) - Button createButton = new Button(); - Label createLabel = new Label(1.0f); - createLabel.setText("Create World"); - createButton.addChild(createLabel); - rVal.addChild(createButton); - createButton.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){ + rVal.addChild(Button.createButton("Create World", () -> { WindowUtils.replaceMainMenuContents(MenuGenerators.createWorldCreationMenu()); - return false; - }}); + })); return rVal; } public static Element createWorldCreationMenu(){ FormElement rVal = new FormElement(); - int screenTop = 150; - //TODO: add text input to name world //text entry (address) - TextInput worldNameInput = new TextInput(100,screenTop + 125,1.0f); + TextInput worldNameInput = TextInput.createTextInput(); + worldNameInput.setMinWidth(100); worldNameInput.setText("World name"); rVal.addChild(worldNameInput); //button (create) - Button createButton = new Button(); - Label createLabel = new Label(1.0f); - createLabel.setText("Create"); - createButton.addChild(createLabel); - rVal.addChild(createButton); - createButton.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){ + rVal.addChild(Button.createButton("Create", () -> { String saveName = worldNameInput.getText(); //create save dir SaveUtils.createOrOverwriteSave(saveName, SceneGenerator.createProceduralSceneFile(saveName)); WindowUtils.replaceMainMenuContents(MenuGenerators.createWorldSelectMenu()); - return false; - }}); + })); return rVal; } @@ -112,28 +89,15 @@ public class MenuGenerators { FormElement rVal = new FormElement(); //button (save) - Button saveButton = new Button(); - Label saveLabel = new Label(1.0f); - saveLabel.setText("Save"); - saveButton.addChild(saveLabel); - rVal.addChild(saveButton); - saveButton.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){ - // SaveUtils.saveWorldData(Globals.currentSave.getName()); + rVal.addChild(Button.createButton("Save", () -> { WindowUtils.replaceMainMenuContents(MenuGenerators.createWorldSelectMenu()); throw new UnsupportedOperationException("Need to update to use new save flow"); - // return false; - }}); + })); //button (cancel) - Button cancelButton = new Button(); - Label cancelLabel = new Label(1.0f); - cancelLabel.setText("Cancel"); - cancelButton.addChild(cancelLabel); - rVal.addChild(cancelButton); - saveButton.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){ + rVal.addChild(Button.createButton("Cancel", () -> { WindowUtils.replaceMainMenuContents(MenuGenerators.createWorldSelectMenu()); - return false; - }}); + })); return rVal; } @@ -144,11 +108,9 @@ public class MenuGenerators { //TODO: add text input to name world //button (create) - Button createButton = new Button(); - Label createLabel = new Label(1.0f); - createLabel.setText("Create World"); - createButton.addChild(createLabel); - rVal.addChild(createButton); + rVal.addChild(Button.createButton("Create World", () -> { + throw new UnsupportedOperationException("Unimplemented"); + })); return rVal; @@ -160,11 +122,9 @@ public class MenuGenerators { //TODO: add text input to name world //button (create) - Button createButton = new Button(); - Label createLabel = new Label(1.0f); - createLabel.setText("Create World"); - createButton.addChild(createLabel); - rVal.addChild(createButton); + rVal.addChild(Button.createButton("Create World", () -> { + throw new UnsupportedOperationException("Unimplemented"); + })); return rVal; } @@ -173,114 +133,87 @@ public class MenuGenerators { FormElement rVal = new FormElement(); //button (host) - Button hostButton = new Button(); - Label hostLabel = new Label(1.0f); - hostLabel.setText("Host"); - hostButton.addChild(hostLabel); - rVal.addChild(hostButton); - hostButton.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){ + rVal.addChild(Button.createButton("Host", () -> { LoadingThread clientThread = new LoadingThread(LoadingThreadType.CHARACTER_SERVER); LoadingThread serverThread = new LoadingThread(LoadingThreadType.MAIN_GAME); Globals.RUN_CLIENT = true; Globals.RUN_SERVER = true; Globals.threadManager.start(serverThread); Globals.threadManager.start(clientThread); - return false; - }}); + })); //button (join) - Button joinButton = new Button(); - Label joinLabel = new Label(1.0f); - joinLabel.setText("Join"); - joinButton.addChild(joinLabel); - rVal.addChild(joinButton); - joinButton.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){ + rVal.addChild(Button.createButton("Join", () -> { WindowUtils.replaceMainMenuContents(MenuGenerators.createIPMenu()); - return false; - }}); + })); //button (back) - Button connectButton = new Button(); - Label connectLabel = new Label(1.0f); - connectLabel.setText("Back"); - connectButton.addChild(connectLabel); - rVal.addChild(connectButton); - connectButton.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){ + rVal.addChild(Button.createButton("Back", () -> { WindowUtils.replaceMainMenuContents(MenuGeneratorsTitleMenu.createTitleMenu()); - return false; - }}); + })); return rVal; } public static Element createIPMenu(){ FormElement rVal = new FormElement(); - int screenTop = 150; - //label (address) - Label addressLabel = new Label(1.0f); - addressLabel.setText("IP Address"); - rVal.addChild(addressLabel); - - //text entry (address) - TextInput addressInput = new TextInput(100,screenTop + 125,1.0f); + // + //Address input + // + String ipAddress = ""; if(Globals.netConfig != null && Globals.netConfig.getAddress() != null){ - addressInput.setText(Globals.netConfig.getAddress()); + ipAddress = Globals.netConfig.getAddress(); } else { - addressInput.setText(NetUtils.getAddress()); + ipAddress = NetUtils.getAddress(); } - rVal.addChild(addressInput); + Div addressControl = InputMacros.createTextInputVertical("IP Address", ipAddress); + TextInput addressInput = (TextInput)addressControl.getChildren().get(1); + rVal.addChild(addressControl); - //label (port) - Label portLabel = new Label(1.0f); - portLabel.setText("Port"); - rVal.addChild(portLabel); - - //text entry (port) - TextInput portInput = new TextInput(100,screenTop + 275,1.0f); + // + //Port input + // + String port = ""; if(Globals.netConfig != null && Globals.netConfig.getPort() != null){ - portInput.setText(Globals.netConfig.getPort()); + port = Globals.netConfig.getPort(); } else { - portInput.setText(NetUtils.getPort() + ""); + port = NetUtils.getPort() + ""; } - rVal.addChild(portInput); + Div portControl = InputMacros.createTextInputVertical("Port", port); + TextInput portInput = (TextInput)portControl.getChildren().get(1); + rVal.addChild(portControl); - //label (address) - Label usernameLabel = new Label(1.0f); - usernameLabel.setText("Username"); - rVal.addChild(usernameLabel); - - //text entry (address) - TextInput usernameInput = new TextInput(100,screenTop + 425,1.0f); - if(Globals.netConfig != null && Globals.netConfig.getUsername() != null){ - usernameInput.setText(Globals.netConfig.getUsername()); + // + //Username input + // + String username = ""; + if(Globals.netConfig != null && Globals.netConfig.getPort() != null){ + username = Globals.netConfig.getUsername(); } else { - usernameInput.setText(""); + username = ""; } - rVal.addChild(usernameInput); + Div usernameControl = InputMacros.createTextInputVertical("Username", username); + TextInput usernameInput = (TextInput)usernameControl.getChildren().get(1); + rVal.addChild(usernameControl); - //label (port) - Label passwordLabel = new Label(1.0f); - passwordLabel.setText("Password"); - rVal.addChild(passwordLabel); - //text entry (port) - TextInput passwordInput = new TextInput(100,screenTop + 575,1.0f); - if(Globals.netConfig != null && Globals.netConfig.getUsername() != null){ - passwordInput.setText(Globals.netConfig.getPassword()); + // + //Password input + // + String password = ""; + if(Globals.netConfig != null && Globals.netConfig.getPort() != null){ + password = Globals.netConfig.getPassword(); } else { - passwordInput.setText(""); + password = ""; } - rVal.addChild(passwordInput); + Div passwordControl = InputMacros.createTextInputVertical("Password", password); + TextInput passwordInput = (TextInput)passwordControl.getChildren().get(1); + rVal.addChild(passwordControl); //button (connect) - Button connectButton = new Button(); - Label connectLabel = new Label(1.0f); - connectLabel.setText("Connect"); - connectButton.addChild(connectLabel); - rVal.addChild(connectButton); - connectButton.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){ + rVal.addChild(Button.createButton("Connect", () -> { NetUtils.setAddress(addressInput.getText()); NetUtils.setPort(Integer.parseInt(portInput.getText())); Globals.clientUsername = usernameInput.getText(); @@ -289,19 +222,12 @@ public class MenuGenerators { Globals.RUN_CLIENT = true; Globals.RUN_SERVER = false; Globals.threadManager.start(clientThread); - return false; - }}); + })); //button (back) - Button backButton = new Button(); - Label backLabel = new Label(1.0f); - backLabel.setText("Back"); - backButton.addChild(backLabel); - rVal.addChild(backButton); - backButton.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){ + rVal.addChild(Button.createButton("Back", () -> { WindowUtils.replaceMainMenuContents(MenuGenerators.createMultiplayerMenu()); - return false; - }}); + })); return rVal; } @@ -310,20 +236,13 @@ public class MenuGenerators { FormElement rVal = new FormElement(); //label (options) - Label optionsLabel = new Label(1.0f); - optionsLabel.setText("Options"); + Label optionsLabel = Label.createLabel("Options"); rVal.addChild(optionsLabel); //button (back) - Button backButton = new Button(); - Label backLabel = new Label(1.0f); - backLabel.setText("Back"); - backButton.addChild(backLabel); - rVal.addChild(backButton); - backButton.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){ + rVal.addChild(Button.createButton("Back", () -> { WindowUtils.replaceMainMenuContents(MenuGeneratorsTitleMenu.createTitleMenu()); - return false; - }}); + })); //button to open rebind controls window Button rebindControlsButton = Button.createButton("Controls", () -> { diff --git a/src/main/java/electrosphere/menu/WindowUtils.java b/src/main/java/electrosphere/menu/WindowUtils.java index a2589a6b..bf30feb9 100644 --- a/src/main/java/electrosphere/menu/WindowUtils.java +++ b/src/main/java/electrosphere/menu/WindowUtils.java @@ -182,9 +182,8 @@ public class WindowUtils { } static void initLoadingWindow(){ - Window loadingWindow = new Window(Globals.renderingEngine.getOpenGLState(), 0, 0, Globals.WINDOW_WIDTH, Globals.WINDOW_HEIGHT,false); - Label loadingLabel = new Label(1.0f); - loadingLabel.setText("LOADING"); + Window loadingWindow = Window.create(Globals.renderingEngine.getOpenGLState(), 0, 0, Globals.WINDOW_WIDTH, Globals.WINDOW_HEIGHT, false); + Label loadingLabel = Label.createLabel("LOADING"); loadingWindow.addChild(loadingLabel); Globals.signalSystem.post(SignalType.YOGA_APPLY,loadingWindow); Globals.elementService.registerWindow(WindowStrings.WINDOW_LOADING, loadingWindow); @@ -192,7 +191,7 @@ public class WindowUtils { } public static void initMainMenuWindow(){ - Window mainMenuWindow = new Window(Globals.renderingEngine.getOpenGLState(), 0, 0, Globals.WINDOW_WIDTH, Globals.WINDOW_HEIGHT,false); + Window mainMenuWindow = Window.create(Globals.renderingEngine.getOpenGLState(), 0, 0, Globals.WINDOW_WIDTH, Globals.WINDOW_HEIGHT, false); Globals.elementService.registerWindow(WindowStrings.WINDOW_MENU_MAIN, mainMenuWindow); WindowUtils.replaceMainMenuContents(MenuGeneratorsTitleMenu.createTitleMenu()); } @@ -202,7 +201,7 @@ public class WindowUtils { } static void initItemDragContainerWindow(){ - Window itemDragContainerWindow = new Window(Globals.renderingEngine.getOpenGLState(), 0,0,Globals.WINDOW_WIDTH,Globals.WINDOW_HEIGHT,false); + Window itemDragContainerWindow = Window.create(Globals.renderingEngine.getOpenGLState(), 0, 0, Globals.WINDOW_WIDTH, Globals.WINDOW_HEIGHT, false); Globals.elementService.registerWindow(WindowStrings.WINDOW_ITEM_DRAG_CONTAINER, itemDragContainerWindow); } diff --git a/src/main/java/electrosphere/menu/ingame/MenuGeneratorsInGame.java b/src/main/java/electrosphere/menu/ingame/MenuGeneratorsInGame.java index b3ca05e6..e62d158a 100644 --- a/src/main/java/electrosphere/menu/ingame/MenuGeneratorsInGame.java +++ b/src/main/java/electrosphere/menu/ingame/MenuGeneratorsInGame.java @@ -47,7 +47,7 @@ public class MenuGeneratorsInGame { // int screenTop = Globals.WINDOW_HEIGHT - 150; int width = 500; int height = 500; - Window rVal = new Window(Globals.renderingEngine.getOpenGLState(),0,0,width,height,true); + Window rVal = Window.create(Globals.renderingEngine.getOpenGLState(), 0, 0, width, height, true); // int screenLeft = (Globals.WINDOW_WIDTH - width)/2; Div div = Div.createDiv(); rVal.addChild(div); @@ -59,6 +59,7 @@ public class MenuGeneratorsInGame { } else { Globals.controlHandler.hintUpdateControlState(ControlsState.IN_GAME_FREE_CAMERA); } + Globals.renderingEngine.getPostProcessingPipeline().setApplyBlur(false); return false; }}); @@ -71,6 +72,7 @@ public class MenuGeneratorsInGame { } else { Globals.controlHandler.hintUpdateControlState(ControlsState.IN_GAME_FREE_CAMERA); } + Globals.renderingEngine.getPostProcessingPipeline().setApplyBlur(false); })); //Return to main menu @@ -109,14 +111,8 @@ public class MenuGeneratorsInGame { // int screenTop = Globals.WINDOW_HEIGHT - 150; int width = 500; int height = 500; - float fontSize = 1.0f; - Window rVal = new Window(Globals.renderingEngine.getOpenGLState(),0,0,width,height,true); - // int screenLeft = (Globals.WINDOW_WIDTH - width)/2; - // Div div = new Div(); - // div.setPositionX(0); - // div.setPositionY(0); - // div.setWidth(500); - // div.setHeight(500); + Window rVal = Window.create(Globals.renderingEngine.getOpenGLState(), 0, 0, width, height, true); + VirtualScrollable scrollable = new VirtualScrollable(width, height); rVal.addChild(scrollable); // scrollable.addChild(div); @@ -125,17 +121,9 @@ public class MenuGeneratorsInGame { return false; }}); - //black texture background - // ImagePanel imagePanel = new ImagePanel(0,0,width,height + 1000,Globals.blackTexture); - // imagePanel.setWidth(width); - // imagePanel.setHeight(height); - // imagePanel.setTexture(Globals.assetManager.fetchTexture(Globals.blackTexture)); - // scrollable.addChild(imagePanel); - //label 1 (back) Button backButton = new Button(); - Label backLabel = new Label(fontSize); - backLabel.setText("Back"); + Label backLabel = Label.createLabel("Back"); backButton.addChild(backLabel); scrollable.addChild(backButton); backButton.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){ @@ -145,14 +133,13 @@ public class MenuGeneratorsInGame { //text entry (port) - TextInput modelDebugInput = new TextInput(100,150,fontSize); + TextInput modelDebugInput = TextInput.createTextInput(); scrollable.addChild(modelDebugInput); modelDebugInput.setText("Model path goes here"); //label 3 (load model and debug) Button debugModelButton = new Button(); - Label debugModelLabel = new Label(fontSize); - debugModelLabel.setText("Print Model Debug Info"); + Label debugModelLabel = Label.createLabel("Print Model Debug Info"); debugModelButton.addChild(debugModelLabel); scrollable.addChild(debugModelButton); debugModelButton.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){ @@ -172,8 +159,7 @@ public class MenuGeneratorsInGame { //label 4 (reload all shaders) Button reloadShaderButton = new Button(); - Label reloadShaderLabel = new Label(fontSize); - reloadShaderLabel.setText("Reload all shaders"); + Label reloadShaderLabel = Label.createLabel("Reload all shaders"); reloadShaderButton.addChild(reloadShaderLabel); scrollable.addChild(reloadShaderButton); reloadShaderButton.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){ @@ -184,8 +170,7 @@ public class MenuGeneratorsInGame { //reload all models Button reloadModelButton = new Button(); - Label reloadModelLabel = new Label(fontSize); - reloadModelLabel.setText("Reload all models"); + Label reloadModelLabel = Label.createLabel("Reload all models"); reloadModelButton.addChild(reloadModelLabel); scrollable.addChild(reloadModelButton); reloadModelButton.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){ @@ -196,8 +181,7 @@ public class MenuGeneratorsInGame { //disable drawing player character Button toggleDrawPlayerButton = new Button(); - Label toggleDrawPlayerLabel = new Label(fontSize); - toggleDrawPlayerLabel.setText("Toggle draw character"); + Label toggleDrawPlayerLabel = Label.createLabel("Toggle draw character"); toggleDrawPlayerButton.addChild(toggleDrawPlayerLabel); scrollable.addChild(toggleDrawPlayerButton); toggleDrawPlayerButton.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){ @@ -217,8 +201,7 @@ public class MenuGeneratorsInGame { //pull up character editor Button characterSliderMenuButton = new Button(); - Label characterSliderMenuLabel = new Label(fontSize); - characterSliderMenuLabel.setText("Character slider menu"); + Label characterSliderMenuLabel = Label.createLabel("Character slider menu"); characterSliderMenuButton.addChild(characterSliderMenuLabel); scrollable.addChild(characterSliderMenuButton); characterSliderMenuButton.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){ @@ -228,8 +211,7 @@ public class MenuGeneratorsInGame { //label (switch framebuffer) Button switchFramebufferButton = new Button(); - Label switchFramebufferLabel = new Label(fontSize); - switchFramebufferLabel.setText("Switch Active Framebuffer"); + Label switchFramebufferLabel = Label.createLabel("Switch Active Framebuffer"); switchFramebufferButton.addChild(switchFramebufferLabel); scrollable.addChild(switchFramebufferButton); switchFramebufferButton.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){ @@ -240,8 +222,7 @@ public class MenuGeneratorsInGame { //label (toggle draw client collision spheres) Button toggleClientCollisionSpheresButton = new Button(); - Label toggleClientCollisionSpheresLabel = new Label(fontSize); - toggleClientCollisionSpheresLabel.setText("Toggle draw client collision spheres"); + Label toggleClientCollisionSpheresLabel = Label.createLabel("Toggle draw client collision spheres"); toggleClientCollisionSpheresButton.addChild(toggleClientCollisionSpheresLabel); scrollable.addChild(toggleClientCollisionSpheresButton); toggleClientCollisionSpheresButton.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){ @@ -252,8 +233,7 @@ public class MenuGeneratorsInGame { //label (toggle draw server collision spheres) Button toggleServerCollisionSpheresButton = new Button(); - Label toggleServerCollisionSpheresLabel = new Label(fontSize); - toggleServerCollisionSpheresLabel.setText("Toggle draw server collision spheres"); + Label toggleServerCollisionSpheresLabel = Label.createLabel("Toggle draw server collision spheres"); toggleServerCollisionSpheresButton.addChild(toggleServerCollisionSpheresLabel); scrollable.addChild(toggleServerCollisionSpheresButton); toggleServerCollisionSpheresButton.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){ @@ -264,8 +244,7 @@ public class MenuGeneratorsInGame { //label (toggle draw physics objects) Button togglePhysicsObjectsButton = new Button(); - Label togglePhysicsObjectsLabel = new Label(fontSize); - togglePhysicsObjectsLabel.setText("Toggle draw physics objects"); + Label togglePhysicsObjectsLabel = Label.createLabel("Toggle draw physics objects"); togglePhysicsObjectsButton.addChild(togglePhysicsObjectsLabel); scrollable.addChild(togglePhysicsObjectsButton); togglePhysicsObjectsButton.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){ @@ -276,8 +255,7 @@ public class MenuGeneratorsInGame { //label (toggle draw movement vectors) Button toggleMovementVectorsButton = new Button(); - Label toggleMovementVectorsLabel = new Label(fontSize); - toggleMovementVectorsLabel.setText("Toggle draw movement vectors"); + Label toggleMovementVectorsLabel = Label.createLabel("Toggle draw movement vectors"); toggleMovementVectorsButton.addChild(toggleMovementVectorsLabel); scrollable.addChild(toggleMovementVectorsButton); toggleMovementVectorsButton.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){ @@ -288,8 +266,7 @@ public class MenuGeneratorsInGame { //label (toggle draw navmesh) Button toggleNavmeshButton = new Button(); - Label toggleNavmeshLabel = new Label(fontSize); - toggleNavmeshLabel.setText("Toggle draw navmesh"); + Label toggleNavmeshLabel = Label.createLabel("Toggle draw navmesh"); toggleNavmeshButton.addChild(toggleNavmeshLabel); scrollable.addChild(toggleNavmeshButton); toggleNavmeshButton.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){ @@ -306,17 +283,9 @@ public class MenuGeneratorsInGame { public static Window createInGameCharacterSliderMenu(){ int width = 500; int height = 500; - float fontSize = 0.4f; - Window rVal = new Window(Globals.renderingEngine.getOpenGLState(),0,0,width,height,true); - // int screenLeft = (Globals.WINDOW_WIDTH - width)/2; - // Div div = new Div(); - // div.setPositionX(0); - // div.setPositionY(0); - // div.setWidth(500); - // div.setHeight(500); - ScrollableContainer scrollable = new ScrollableContainer(Globals.renderingEngine.getOpenGLState(), 0, 0, width, height); + Window rVal = Window.create(Globals.renderingEngine.getOpenGLState(), 0, 0, width, height, true); + ScrollableContainer scrollable = ScrollableContainer.createScrollable(); rVal.addChild(scrollable); - // scrollable.addChild(div); rVal.setOnNavigationCallback(new NavigationEventCallback() {public boolean execute(NavigationEvent event){ WindowUtils.replaceWindow(WindowStrings.WINDOW_MENU_INGAME_MAIN, createInGameDebugMainMenu()); return false; @@ -324,15 +293,11 @@ public class MenuGeneratorsInGame { //black texture background ImagePanel imagePanel = ImagePanel.createImagePanelAbsolute(0,0,width,height + 1000,Globals.blackTexture); - // imagePanel.setWidth(width); - // imagePanel.setHeight(height); - // imagePanel.setTexture(Globals.assetManager.fetchTexture(Globals.blackTexture)); scrollable.addChild(imagePanel); //label 1 (back) Button backButton = new Button(); - Label backLabel = new Label(fontSize); - backLabel.setText("Back"); + Label backLabel = Label.createLabel("Back"); backButton.addChild(backLabel); scrollable.addChild(backButton); backButton.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){ diff --git a/src/main/java/electrosphere/menu/ingame/MenuGeneratorsInventory.java b/src/main/java/electrosphere/menu/ingame/MenuGeneratorsInventory.java index 67540b01..e92f78f9 100644 --- a/src/main/java/electrosphere/menu/ingame/MenuGeneratorsInventory.java +++ b/src/main/java/electrosphere/menu/ingame/MenuGeneratorsInventory.java @@ -16,7 +16,7 @@ public class MenuGeneratorsInventory { public static Element worldItemDropCaptureWindow(){ - Window rVal = new Window(Globals.renderingEngine.getOpenGLState(),0,0,Globals.WINDOW_WIDTH,Globals.WINDOW_HEIGHT,true); + Window rVal = Window.create(Globals.renderingEngine.getOpenGLState(), 0, 0, Globals.WINDOW_WIDTH, Globals.WINDOW_HEIGHT, false); Div div = Div.createDiv(); div.setOnDragRelease(new DragEventCallback() {public boolean execute(DragEvent event){ LoggerInterface.loggerUI.INFO("World item drop capture window received drag release"); diff --git a/src/main/java/electrosphere/menu/ingame/MenuGeneratorsLevelEditor.java b/src/main/java/electrosphere/menu/ingame/MenuGeneratorsLevelEditor.java index 160dd0ad..7dace098 100644 --- a/src/main/java/electrosphere/menu/ingame/MenuGeneratorsLevelEditor.java +++ b/src/main/java/electrosphere/menu/ingame/MenuGeneratorsLevelEditor.java @@ -65,7 +65,7 @@ public class MenuGeneratorsLevelEditor { */ public static Window createLevelEditorSidePanel(){ //setup window - mainSidePanel = new Window(Globals.renderingEngine.getOpenGLState(),0,0,SIDE_PANEL_WIDTH,Globals.WINDOW_HEIGHT,true); + mainSidePanel = Window.create(Globals.renderingEngine.getOpenGLState(), 0, 0, SIDE_PANEL_WIDTH, Globals.WINDOW_HEIGHT, true); mainSidePanel.setParentAlignContent(YogaAlignment.End); mainSidePanel.setParentJustifyContent(YogaJustification.End); mainSidePanel.setParentAlignItem(YogaAlignment.End); @@ -344,8 +344,7 @@ public class MenuGeneratorsLevelEditor { div.addChild(deleteButton); - Label entityName = new Label(1.0f); - entityName.setText("(" + entity.getId() + ") " + getEntityString(entity)); + Label entityName = Label.createLabel("(" + entity.getId() + ") " + getEntityString(entity)); div.addChild(entityName); diff --git a/src/main/java/electrosphere/menu/ingame/MenuGeneratorsTerrainEditing.java b/src/main/java/electrosphere/menu/ingame/MenuGeneratorsTerrainEditing.java index a82b4535..0ced16b4 100644 --- a/src/main/java/electrosphere/menu/ingame/MenuGeneratorsTerrainEditing.java +++ b/src/main/java/electrosphere/menu/ingame/MenuGeneratorsTerrainEditing.java @@ -57,7 +57,7 @@ public class MenuGeneratorsTerrainEditing { */ public static Window createVoxelTypeSelectionPanel(){ //setup window - terrainEditingSidePanelWindow = new Window(Globals.renderingEngine.getOpenGLState(),0,0,WINDOW_WIDTH,WINDOW_HEIGHT,true); + terrainEditingSidePanelWindow = Window.create(Globals.renderingEngine.getOpenGLState(), 0, 0, WINDOW_WIDTH, WINDOW_HEIGHT, true); terrainEditingSidePanelWindow.setParentAlignContent(YogaAlignment.Center); terrainEditingSidePanelWindow.setParentJustifyContent(YogaJustification.Center); terrainEditingSidePanelWindow.setParentAlignItem(YogaAlignment.Center); @@ -147,8 +147,7 @@ public class MenuGeneratorsTerrainEditing { newButton.setMarginRight(MARGIN_EACH_SIDE); newButton.setMarginTop(MARGIN_EACH_SIDE); //label - Label voxelLabel = new Label(1.0f); - voxelLabel.setText(type.getName()); + Label voxelLabel = Label.createLabel(type.getName()); //icon/model ImagePanel texturePanel = ImagePanel.createImagePanel(type.getTexture()); if(type.getTexture() != null){ diff --git a/src/main/java/electrosphere/menu/mainmenu/MenuGeneratorsDemo.java b/src/main/java/electrosphere/menu/mainmenu/MenuGeneratorsDemo.java index f07ae41f..24601dea 100644 --- a/src/main/java/electrosphere/menu/mainmenu/MenuGeneratorsDemo.java +++ b/src/main/java/electrosphere/menu/mainmenu/MenuGeneratorsDemo.java @@ -24,8 +24,7 @@ public class MenuGeneratorsDemo { rVal.setAlignContent(YogaAlignment.Start); //label (title) - Label titleLabel = new Label(1.0f); - titleLabel.setText("ORPG"); + Label titleLabel = Label.createLabel("ORPG"); rVal.addChild(titleLabel); return rVal; diff --git a/src/main/java/electrosphere/menu/mainmenu/MenuGeneratorsLevelEditor.java b/src/main/java/electrosphere/menu/mainmenu/MenuGeneratorsLevelEditor.java index 21a22107..1ff3731f 100644 --- a/src/main/java/electrosphere/menu/mainmenu/MenuGeneratorsLevelEditor.java +++ b/src/main/java/electrosphere/menu/mainmenu/MenuGeneratorsLevelEditor.java @@ -9,6 +9,7 @@ import electrosphere.entity.scene.SceneFile; import electrosphere.game.data.voxel.VoxelType; import electrosphere.menu.WindowUtils; import electrosphere.menu.ingame.MenuGeneratorsTerrainEditing; +import electrosphere.renderer.ui.components.InputMacros; import electrosphere.renderer.ui.elements.Button; import electrosphere.renderer.ui.elements.Div; import electrosphere.renderer.ui.elements.FormElement; @@ -17,7 +18,6 @@ import electrosphere.renderer.ui.elementtypes.Element; import electrosphere.renderer.ui.elementtypes.ContainerElement.YogaAlignment; import electrosphere.renderer.ui.elementtypes.ContainerElement.YogaJustification; import electrosphere.renderer.ui.events.ValueChangeEvent; -import electrosphere.renderer.ui.macros.InputMacros; import electrosphere.server.datacell.GriddedDataCellManager; import electrosphere.server.saves.SaveUtils; diff --git a/src/main/java/electrosphere/menu/mainmenu/MenuGeneratorsMultiplayer.java b/src/main/java/electrosphere/menu/mainmenu/MenuGeneratorsMultiplayer.java index c2da3367..65cffde5 100644 --- a/src/main/java/electrosphere/menu/mainmenu/MenuGeneratorsMultiplayer.java +++ b/src/main/java/electrosphere/menu/mainmenu/MenuGeneratorsMultiplayer.java @@ -1,38 +1,18 @@ package electrosphere.menu.mainmenu; -import java.util.LinkedList; -import java.util.List; - -import org.joml.Vector3f; - -import electrosphere.client.entity.camera.CameraEntityUtils; import electrosphere.engine.Globals; -import electrosphere.entity.types.creature.CreatureTemplate; -import electrosphere.game.data.creature.type.CreatureData; -import electrosphere.game.data.creature.type.visualattribute.AttributeVariant; -import electrosphere.game.data.creature.type.visualattribute.VisualAttribute; import electrosphere.menu.MenuGenerators; import electrosphere.menu.WindowUtils; -import electrosphere.net.parser.net.message.CharacterMessage; -import electrosphere.renderer.actor.Actor; -import electrosphere.renderer.actor.ActorStaticMorph; -import electrosphere.renderer.actor.ActorUtils; -import electrosphere.renderer.anim.Animation; -import electrosphere.renderer.ui.elements.ActorPanel; +import electrosphere.renderer.ui.components.CharacterCustomizer; import electrosphere.renderer.ui.elements.Button; -import electrosphere.renderer.ui.elements.Div; import electrosphere.renderer.ui.elements.FormElement; import electrosphere.renderer.ui.elements.Label; -import electrosphere.renderer.ui.elements.ScrollableContainer; -import electrosphere.renderer.ui.elements.Slider; import electrosphere.renderer.ui.elements.StringCarousel; import electrosphere.renderer.ui.elementtypes.ClickableElement; -import electrosphere.renderer.ui.elementtypes.ContainerElement.YogaFlexDirection; import electrosphere.renderer.ui.elementtypes.Element; import electrosphere.renderer.ui.elementtypes.ValueElement.ValueChangeEventCallback; import electrosphere.renderer.ui.events.ClickEvent; import electrosphere.renderer.ui.events.ValueChangeEvent; -import electrosphere.util.Utilities; public class MenuGeneratorsMultiplayer { @@ -41,8 +21,7 @@ public class MenuGeneratorsMultiplayer { //button (create) Button createButton = new Button(); - Label createLabel = new Label(1.0f); - createLabel.setText("Create Character"); + Label createLabel = Label.createLabel("Create Character"); createButton.addChild(createLabel); rVal.addChild(createButton); createButton.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){ @@ -69,164 +48,15 @@ public class MenuGeneratorsMultiplayer { //button (create) Button createButton = new Button(); - Label createLabel = new Label(1.0f); - createLabel.setText("Select Race"); + Label createLabel = Label.createLabel("Select Race"); createButton.addChild(createLabel); rVal.addChild(createButton); createButton.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){ - WindowUtils.replaceMainMenuContents(MenuGeneratorsMultiplayer.createMultiplayerCharacterCreationTweakWindow(selectedRace)); + WindowUtils.replaceMainMenuContents(CharacterCustomizer.createCharacterCustomizerPanel(selectedRace)); return false; }}); return rVal; } - public static Element createMultiplayerCharacterCreationTweakWindow(String race){ - // int screenTop = Globals.WINDOW_HEIGHT - 150; - int verticalPosition = 125; - int horizontalPosition = 300; - - //figure out race data - CreatureData selectedRaceType = Globals.gameConfigCurrent.getCreatureTypeLoader().getType(race); - - //spawn camera so renderer doesn't crash (once render pipeline is modularized this shouldn't be necessary) - Globals.playerCamera = CameraEntityUtils.spawnBasicCameraEntity(new Vector3f(0,0,0), new Vector3f(0,0.3f,1).normalize()); - Globals.viewMatrix = CameraEntityUtils.getCameraViewMatrix(Globals.playerCamera); - // CameraEntityUtils.setCameraEye(Globals.playerCamera, new Vector3f(-1,3f,0).normalize()); - // CameraEntityUtils.setCameraCenter(Globals.playerCamera, new Vector3f(0,0,0)); - - //create actor panel - Actor characterActor = ActorUtils.createActorFromModelPath(selectedRaceType.getModelPath()); - ActorPanel actorPanel = new ActorPanel(Globals.renderingEngine.getOpenGLState(), 1200, 100, 500, 500, characterActor); - actorPanel.setAnimation(Animation.ANIMATION_IDLE_1); - actorPanel.setPosition(new Vector3f(0,-0.5f,-0.6f)); - // actorPanel.setRotation(new Quaternionf().rotateLocalY(0)); - actorPanel.setScale(new Vector3f(1.0f)); - - //have to build static morph while looping through attributes - ActorStaticMorph staticMorph = new ActorStaticMorph(); - - //create creature template - CreatureTemplate template = CreatureTemplate.create(race); - - List controlsToAdd = new LinkedList(); - //create edit controls here - for(VisualAttribute attribute : selectedRaceType.getVisualAttributes()){ - if(attribute.getType().equals(VisualAttribute.TYPE_BONE)){ - //add label for slider - Label sliderName = new Label(0.6f); - sliderName.setText(attribute.getAttributeId()); - controlsToAdd.add(sliderName); - //add a slider - Slider boneSlider = new Slider(horizontalPosition, verticalPosition + 10, 500, 20, new Vector3f(0.1f,0.1f,0.1f), new Vector3f(1,1,1)); - float min = attribute.getMinValue(); - float max = attribute.getMaxValue(); - float defaultValue = min + (max - min)/2.0f; - boneSlider.setMinimum(min); - boneSlider.setMaximum(max); - boneSlider.setValue(defaultValue); - controlsToAdd.add(boneSlider); - //actually add attributes to static morph - if(attribute.getPrimaryBone() != null && staticMorph.getBoneTransforms(attribute.getPrimaryBone()) == null){ - staticMorph.initBoneTransforms(attribute.getPrimaryBone()); - } - if(attribute.getMirrorBone() != null && staticMorph.getBoneTransforms(attribute.getMirrorBone()) == null){ - staticMorph.initBoneTransforms(attribute.getMirrorBone()); - } - //add attribute to creature template - template.putAttributeValue(attribute.getAttributeId(), defaultValue); - //set callback for when we change the slider value to update the static morph - boneSlider.setOnValueChangeCallback(new ValueChangeEventCallback() {public void execute(ValueChangeEvent event) { - if(characterActor.getStaticMorph() != null){ - ActorStaticMorph staticMorph = characterActor.getStaticMorph(); - staticMorph.updateValue(attribute.getSubtype(), attribute.getPrimaryBone(), event.getAsFloat()); - if(attribute.getMirrorBone() != null){ - staticMorph.updateValue(attribute.getSubtype(), attribute.getMirrorBone(), event.getAsFloat()); - } - template.getAttributeValue(attribute.getAttributeId()).setValue(event.getAsFloat()); - } - }}); - } else if(attribute.getType().equals(VisualAttribute.TYPE_REMESH)){ - //add label for carousel - Label sliderName = new Label(0.6f); - sliderName.setText(attribute.getAttributeId()); - controlsToAdd.add(sliderName); - //for adding the value to the creature template - boolean hasAddedValue = false; - //add a carousel - StringCarousel variantCarousel = new StringCarousel(horizontalPosition, verticalPosition, 1.0f); - for(AttributeVariant variant : attribute.getVariants()){ - variantCarousel.addOption(variant.getId()); - //if we haven't already added a value, add a value to the creature template - if(!hasAddedValue){ - hasAddedValue = true; - //add attribute to template - template.putAttributeValue(attribute.getAttributeId(), variant.getId()); - } - } - //callback for updating remesh - variantCarousel.setOnValueChangeCallback(new ValueChangeEventCallback(){public void execute(ValueChangeEvent event) { - //TODO: implement updating visuals - template.getAttributeValue(attribute.getAttributeId()).setVariantId(event.getAsString()); - AttributeVariant variant = null; - for(AttributeVariant variantCurrent : attribute.getVariants()){ - if(variantCurrent.getId().equals(event.getAsString())){ - variant = variantCurrent; - break; - } - } - if(variant != null){ - Globals.assetManager.addModelPathToQueue(variant.getModel()); - for(String mesh : variant.getMeshes()){ - characterActor.getMeshMask().queueMesh(variant.getModel(), mesh); - } - } - }}); - controlsToAdd.add(variantCarousel); - } - verticalPosition = verticalPosition + 100; - } - //finally set static morph - characterActor.setActorStaticMorph(staticMorph); - - //add button to actually create the character - Button createCharacterButton = new Button(); - Label createCharacterLabel = new Label(1.0f); - createCharacterLabel.setText("Create"); - createCharacterButton.addChild(createCharacterLabel); - controlsToAdd.add(createCharacterButton); - createCharacterButton.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){ - Globals.clientConnection.queueOutgoingMessage(CharacterMessage.constructRequestCreateCharacterMessage(Utilities.stringify(template))); - return false; - }}); - - int width = 1800; - int height = verticalPosition + 300; - - Div rVal = Div.createDiv(); - rVal.setFlexDirection(YogaFlexDirection.Row); - - ScrollableContainer scrollable = new ScrollableContainer(Globals.renderingEngine.getOpenGLState(), 0, 0, width, height); - for(Element newControl : controlsToAdd){ - scrollable.addChild(newControl); - } - - - - rVal.addChild(scrollable); - rVal.addChild(actorPanel); - // rVal.addChild(scrollable); - - // Label testLabel = new Label(100,215,1.0f); - // testLabel.setText("Aaaaaaa"); - // rVal.addChild(testLabel); - - // //black texture background - // ImagePanel imagePanel = new ImagePanel(0,0,width,height + 1000,Globals.blackTexture); - // scrollable.addChild(imagePanel); - - return rVal; - } - - } diff --git a/src/main/java/electrosphere/menu/mainmenu/MenuGeneratorsTitleMenu.java b/src/main/java/electrosphere/menu/mainmenu/MenuGeneratorsTitleMenu.java index dc4e1fb5..fef1b6c7 100644 --- a/src/main/java/electrosphere/menu/mainmenu/MenuGeneratorsTitleMenu.java +++ b/src/main/java/electrosphere/menu/mainmenu/MenuGeneratorsTitleMenu.java @@ -33,14 +33,12 @@ public class MenuGeneratorsTitleMenu { rVal.setFlexGrow(1.0f); //label (title) - Label titleLabel = new Label(1.0f); - titleLabel.setText("ORPG"); + Label titleLabel = Label.createLabel("ORPG"); rVal.addChild(titleLabel); //button (multiplayer) Button singleplayerButton = new Button(); - Label singleplayerLabel = new Label(1.0f); - singleplayerLabel.setText("Singleplayer"); + Label singleplayerLabel = Label.createLabel("Singleplayer"); singleplayerButton.addChild(singleplayerLabel); rVal.addChild(singleplayerButton); singleplayerButton.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){ @@ -50,8 +48,7 @@ public class MenuGeneratorsTitleMenu { //button (multiplayer) Button multiplayerButton = new Button(); - Label multiplayerLabel = new Label(1.0f); - multiplayerLabel.setText("Multiplayer"); + Label multiplayerLabel = Label.createLabel("Multiplayer"); multiplayerButton.addChild(multiplayerLabel); rVal.addChild(multiplayerButton); multiplayerButton.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){ @@ -61,8 +58,7 @@ public class MenuGeneratorsTitleMenu { //button (static level) Button staticLevelButton = new Button(); - Label staticLevelLabel = new Label(1.0f); - staticLevelLabel.setText("Level Editor"); + Label staticLevelLabel = Label.createLabel("Level Editor"); staticLevelButton.addChild(staticLevelLabel); rVal.addChild(staticLevelButton); staticLevelButton.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){ @@ -72,8 +68,7 @@ public class MenuGeneratorsTitleMenu { //button (options) Button optionsButton = new Button(); - Label optionsLabel = new Label(1.0f); - optionsLabel.setText("Options"); + Label optionsLabel = Label.createLabel("Options"); optionsButton.addChild(optionsLabel); rVal.addChild(optionsButton); optionsButton.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){ @@ -83,8 +78,7 @@ public class MenuGeneratorsTitleMenu { //button (sp debug) Button uiDebugSPQuickstartButton = new Button(); - Label uiDebugSPQuickstartLabel = new Label(1.0f); - uiDebugSPQuickstartLabel.setText("Debug SP Quickstart"); + Label uiDebugSPQuickstartLabel = Label.createLabel("Debug SP Quickstart"); uiDebugSPQuickstartButton.addChild(uiDebugSPQuickstartLabel); rVal.addChild(uiDebugSPQuickstartButton); uiDebugSPQuickstartButton.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){ @@ -97,8 +91,7 @@ public class MenuGeneratorsTitleMenu { //button (ui testing) Button uiTestingButton = new Button(); - Label uiTestingLabel = new Label(1.0f); - uiTestingLabel.setText("UI Testing"); + Label uiTestingLabel = Label.createLabel("UI Testing"); uiTestingButton.addChild(uiTestingLabel); rVal.addChild(uiTestingButton); uiTestingButton.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){ @@ -108,8 +101,7 @@ public class MenuGeneratorsTitleMenu { //button (Viewport Test) Button viewportTestingButton = new Button(); - Label viewportTestingLabel = new Label(1.0f); - viewportTestingLabel.setText("Viewport Test"); + Label viewportTestingLabel = Label.createLabel("Viewport Test"); viewportTestingButton.addChild(viewportTestingLabel); rVal.addChild(viewportTestingButton); viewportTestingButton.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){ diff --git a/src/main/java/electrosphere/menu/mainmenu/MenuGeneratorsUITesting.java b/src/main/java/electrosphere/menu/mainmenu/MenuGeneratorsUITesting.java index dbf39fd6..c3829c9f 100644 --- a/src/main/java/electrosphere/menu/mainmenu/MenuGeneratorsUITesting.java +++ b/src/main/java/electrosphere/menu/mainmenu/MenuGeneratorsUITesting.java @@ -19,18 +19,17 @@ import electrosphere.menu.WindowUtils; import electrosphere.renderer.actor.ActorUtils; import electrosphere.renderer.ui.components.CharacterCustomizer; import electrosphere.renderer.ui.components.EquipmentInventoryPanel; +import electrosphere.renderer.ui.components.InputMacros; import electrosphere.renderer.ui.components.NaturalInventoryPanel; import electrosphere.renderer.ui.elements.ActorPanel; import electrosphere.renderer.ui.elements.Button; import electrosphere.renderer.ui.elements.FormElement; -import electrosphere.renderer.ui.elements.Label; import electrosphere.renderer.ui.elements.Slider; import electrosphere.renderer.ui.elements.StringCarousel; import electrosphere.renderer.ui.elements.VirtualScrollable; import electrosphere.renderer.ui.elementtypes.ContainerElement; import electrosphere.renderer.ui.elementtypes.Element; import electrosphere.renderer.ui.events.ValueChangeEvent; -import electrosphere.renderer.ui.macros.InputMacros; /** * Menu generators for creating test visualizations for ui elements @@ -98,11 +97,7 @@ public class MenuGeneratorsUITesting { VirtualScrollable virtualScrollable = new VirtualScrollable(300, 75); //add a ton of children for(int i = 0; i < 10; i++){ - Button testButton = new Button(); - Label testLabel = new Label(1.0f); - testLabel.setText("Test button " + i); - testButton.addChild(testLabel); - virtualScrollable.addChild(testButton); + virtualScrollable.addChild(Button.createButton("Test button " + i, () -> {})); } // slider test diff --git a/src/main/java/electrosphere/menu/tutorial/TutorialMenus.java b/src/main/java/electrosphere/menu/tutorial/TutorialMenus.java index dbde2f1b..48f6cecc 100644 --- a/src/main/java/electrosphere/menu/tutorial/TutorialMenus.java +++ b/src/main/java/electrosphere/menu/tutorial/TutorialMenus.java @@ -45,7 +45,7 @@ public class TutorialMenus { windowEl = (Window)Globals.elementService.getWindow(WindowStrings.TUTORIAL_POPUP); } else { //create the window - windowEl = new Window(Globals.renderingEngine.getOpenGLState(),0,0,TUTORIAL_POPUP_WIDTH,TUTORIAL_POPUP_HEIGHT,true); + windowEl = Window.create(Globals.renderingEngine.getOpenGLState(), 0, 0, TUTORIAL_POPUP_WIDTH, TUTORIAL_POPUP_HEIGHT, true); //parent container windowEl.setParentAlignContent(YogaAlignment.Center); windowEl.setParentAlignItem(YogaAlignment.Center); diff --git a/src/main/java/electrosphere/renderer/ui/macros/InputMacros.java b/src/main/java/electrosphere/renderer/ui/components/InputMacros.java similarity index 84% rename from src/main/java/electrosphere/renderer/ui/macros/InputMacros.java rename to src/main/java/electrosphere/renderer/ui/components/InputMacros.java index d2787d03..ce9f52d6 100644 --- a/src/main/java/electrosphere/renderer/ui/macros/InputMacros.java +++ b/src/main/java/electrosphere/renderer/ui/components/InputMacros.java @@ -1,4 +1,4 @@ -package electrosphere.renderer.ui.macros; +package electrosphere.renderer.ui.components; import java.util.function.Consumer; @@ -28,7 +28,6 @@ public class InputMacros { * @param placeholder The placeholder (can be null if no placeholder desired) * @return The div encapsulating all the individual elements */ - @Deprecated public static Div createTextInput(String label, String placeholder){ Div rVal = Div.createDiv(); rVal.setFlexDirection(YogaFlexDirection.Row); @@ -48,6 +47,30 @@ public class InputMacros { return rVal; } + /** + * Creates a text input that has a label and optional placeholder + * @param label The label for the text input + * @param placeholder The placeholder (can be null if no placeholder desired) + * @return The div encapsulating all the individual elements + */ + public static Div createTextInputVertical(String label, String placeholder){ + Div rVal = Div.createCol(); + + //the label + Label labelEl = Label.createLabel(label); + labelEl.setMarginRight(LABEL_MARGIN); + rVal.addChild(labelEl); + + //the actual input + TextInput inputControl = TextInput.createTextInput(); + if(placeholder != null){ + inputControl.setText(placeholder); + } + rVal.addChild(inputControl); + + return rVal; + } + /** * Creates a text input that has a label and optional placeholder * @param label The label for the text input @@ -55,7 +78,6 @@ public class InputMacros { * @param callback A callback fired when the text input changes value * @return The div encapsulating all the individual elements */ - @Deprecated public static Div createTextInput(String label, String placeholder, Consumer callback){ Div rVal = Div.createDiv(); rVal.setFlexDirection(YogaFlexDirection.Row); @@ -84,7 +106,6 @@ public class InputMacros { * @param defaultValue The default value for the slider (between 0.0 and 1.0) * @return The slider element */ - @Deprecated public static Div createSliderInput(String label, Consumer onChange, float defaultValue){ Div rVal = Div.createDiv(); rVal.setFlexDirection(YogaFlexDirection.Row); @@ -109,7 +130,6 @@ public class InputMacros { * @param onChange The on change callback * @return The div containing a labeled toggle */ - @Deprecated public static Div createToggle(String label, boolean defaultValue, Consumer onChange){ Div rVal = Div.createDiv(); rVal.setFlexDirection(YogaFlexDirection.Row); diff --git a/src/main/java/electrosphere/renderer/ui/elements/Label.java b/src/main/java/electrosphere/renderer/ui/elements/Label.java index 10c4c01d..9ecb4da1 100644 --- a/src/main/java/electrosphere/renderer/ui/elements/Label.java +++ b/src/main/java/electrosphere/renderer/ui/elements/Label.java @@ -47,8 +47,7 @@ public class Label extends StandardContainerElement implements DrawableElement { * Simplified constructor * @param fontSize the size of the font (default is 1.0f) */ - @Deprecated - public Label(float fontSize){ + private Label(float fontSize){ super(); this.font = Globals.fontManager.getFont("default"); setHeight((int)(font.getFontHeight() * fontSize)); @@ -56,23 +55,6 @@ public class Label extends StandardContainerElement implements DrawableElement { Yoga.YGNodeStyleSetFlexDirection(this.yogaNode, Yoga.YGFlexDirectionRow); } - /** - * Creates a label with absolute positioning - * @param x the x position - * @param y the y position - * @param fontSize the font size (default is 1.0f) - */ - @Deprecated - public Label(int x, int y, float fontSize){ - super(); - this.setPositionX(x); - this.setPositionY(y); - this.font = Globals.fontManager.getFont("default"); - setHeight((int)(font.getFontHeight() * fontSize)); - this.fontSize = fontSize; - Yoga.YGNodeStyleSetFlexDirection(this.yogaNode, Yoga.YGFlexDirectionRow); - } - void generateLetters(){ //free children for(Element child : childList){ diff --git a/src/main/java/electrosphere/renderer/ui/elements/ScrollableContainer.java b/src/main/java/electrosphere/renderer/ui/elements/ScrollableContainer.java index b6ef750a..c06c26d9 100644 --- a/src/main/java/electrosphere/renderer/ui/elements/ScrollableContainer.java +++ b/src/main/java/electrosphere/renderer/ui/elements/ScrollableContainer.java @@ -56,9 +56,6 @@ public class ScrollableContainer extends BufferedStandardDrawableContainerElemen */ private ScrollableContainer(){ super(); - - setWidth(DEFAULT_WIDTH); - setHeight(DEFAULT_HEIGHT); } /** diff --git a/src/main/java/electrosphere/renderer/ui/elements/TextInput.java b/src/main/java/electrosphere/renderer/ui/elements/TextInput.java index 0e766aa6..1a6b5240 100644 --- a/src/main/java/electrosphere/renderer/ui/elements/TextInput.java +++ b/src/main/java/electrosphere/renderer/ui/elements/TextInput.java @@ -80,23 +80,6 @@ public class TextInput extends StandardContainerElement implements DrawableEleme Yoga.YGNodeStyleSetMinHeight(this.yogaNode, font.imageHeight * fontSize); Yoga.YGNodeStyleSetMinWidth(this.yogaNode, 1); } - - /** - * Constructor - * @param x - * @param y - * @param fontSize - */ - public TextInput(int x, int y, float fontSize){ - super(); - this.font = Globals.fontManager.getFont("default"); - this.fontSize = fontSize; - this.color = new Vector3f(1,1,1); - setHeight((int)(font.getFontHeight() * fontSize)); - Yoga.YGNodeStyleSetFlexDirection(this.yogaNode, Yoga.YGFlexDirectionRow); - Yoga.YGNodeStyleSetMinHeight(this.yogaNode, font.imageHeight * fontSize); - Yoga.YGNodeStyleSetMinWidth(this.yogaNode, 1); - } void generateLetters(){ for(Element el : getChildren()){ diff --git a/src/main/java/electrosphere/renderer/ui/elements/Window.java b/src/main/java/electrosphere/renderer/ui/elements/Window.java index fdb86026..0243a37f 100644 --- a/src/main/java/electrosphere/renderer/ui/elements/Window.java +++ b/src/main/java/electrosphere/renderer/ui/elements/Window.java @@ -48,6 +48,15 @@ public class Window implements DrawableElement, ContainerElement, NavigableEleme static final Vector3f windowDrawDebugColor = new Vector3f(1.0f,0.0f,0.0f); + /** + * Default width of popups + */ + static final int DEFAULT_POPUP_WIDTH = 1000; + /** + * Default height of popups + */ + static final int DEFAULT_POPUP_HEIGHT = 1000; + //controls whether to show window decorations (ie the frame) boolean showDecorations = true; @@ -92,14 +101,10 @@ public class Window implements DrawableElement, ContainerElement, NavigableEleme /** * Private constructor * @param openGLState - * @param positionX - * @param positionY - * @param width - * @param height */ - private Window(OpenGLState openGLState, int positionX, int positionY, int width, int height){ + private Window(OpenGLState openGLState){ try { - widgetBuffer = FramebufferUtils.generateTextureFramebuffer(openGLState, width, height); + widgetBuffer = FramebufferUtils.generateTextureFramebuffer(openGLState, DEFAULT_POPUP_WIDTH, DEFAULT_POPUP_HEIGHT); } catch(Exception e){ LoggerInterface.loggerRenderer.ERROR(e); } @@ -114,8 +119,8 @@ public class Window implements DrawableElement, ContainerElement, NavigableEleme setParentAlignItem(YogaAlignment.Start); setParentJustifyContent(YogaJustification.Start); this.setFlexDirection(YogaFlexDirection.Column); - this.setMinWidth(width); - this.setMinHeight(height); + this.setMinWidth(DEFAULT_POPUP_WIDTH); + this.setMinHeight(DEFAULT_POPUP_HEIGHT); } /** @@ -143,7 +148,7 @@ public class Window implements DrawableElement, ContainerElement, NavigableEleme * @return The window element */ public static Window createExpandable(OpenGLState openGLState, int posX, int posY, int width, int height){ - Window rVal = new Window(openGLState, posX, posY, width, height); + Window rVal = new Window(openGLState); return rVal; } @@ -157,7 +162,7 @@ public class Window implements DrawableElement, ContainerElement, NavigableEleme * @return The window element */ public static Window createExpandableCenterAligned(OpenGLState openGLState, int width, int height){ - Window rVal = new Window(openGLState, 0, 0, width, height); + Window rVal = new Window(openGLState); rVal.setParentAlignItem(YogaAlignment.Center); rVal.setParentJustifyContent(YogaJustification.Center); return rVal;