From 18cf677bd3547020411b655020af8c86c37a78b7 Mon Sep 17 00:00:00 2001 From: austin Date: Fri, 11 Apr 2025 17:35:43 -0400 Subject: [PATCH] ui work --- .../survival/survivalprogression.md | 33 ++++- .../survival/survivalresearch.md | 10 ++ docs/src/progress/renderertodo.md | 3 + .../client/ui/components/InputMacros.java | 25 ---- .../mainmenu/MenuGeneratorsLevelEditor.java | 40 +++++- .../mainmenu/MenuGeneratorsTitleMenu.java | 97 +++++++++----- .../renderer/ui/elements/Button.java | 16 --- .../renderer/ui/elements/Label.java | 45 +++++-- .../renderer/ui/elements/Panel.java | 5 + .../renderer/ui/elements/TextInput.java | 123 ++++++++++++------ 10 files changed, 269 insertions(+), 128 deletions(-) create mode 100644 docs/src/highlevel-design/survival/survivalresearch.md diff --git a/docs/src/highlevel-design/survival/survivalprogression.md b/docs/src/highlevel-design/survival/survivalprogression.md index d38af5d8..84d0de6b 100644 --- a/docs/src/highlevel-design/survival/survivalprogression.md +++ b/docs/src/highlevel-design/survival/survivalprogression.md @@ -1,5 +1,8 @@ @page survivalprogression Survival Progression +[TOC] + - @subpage survivalresearch + Thoughts on how to structure the progression of the survival gamemode @@ -11,13 +14,39 @@ Craft stick + rock into stone pickaxe ## Stone Age -Mine for metals +Mine for resources - Copper - Tin + - Clay +Clay used to make pottery + - Storage Vessels + - Jugs + - Jars + - Cooking Pots + +Chop trees for lumber + - Basic walls + - Crafting station(s) + +Stone products + - Stone tools + - Forge # Copper Age -Copper allows creating nails +Copper materials + - Nails + - Rods + - Tool parts + +Tools + - Scissors + - Saw + - + +Crafting Stations + - Spinning wheel + - Loom diff --git a/docs/src/highlevel-design/survival/survivalresearch.md b/docs/src/highlevel-design/survival/survivalresearch.md new file mode 100644 index 00000000..bca54df8 --- /dev/null +++ b/docs/src/highlevel-design/survival/survivalresearch.md @@ -0,0 +1,10 @@ +@page survivalresearch Survival Research + + +Research topics that take time. Can be compiled into books that transmit the topics faster. Ideas for categories: +Tools possible with a given material +Food techniques +Processing techniques for a given material +Building materials for a given raw material + + diff --git a/docs/src/progress/renderertodo.md b/docs/src/progress/renderertodo.md index 5059e5a7..4936b95b 100644 --- a/docs/src/progress/renderertodo.md +++ b/docs/src/progress/renderertodo.md @@ -1459,6 +1459,9 @@ Rename editor enum to prevent type conflict (04/10/2025) UI work +(04/11/2025) +Fixing text input spacing (padding was taking up all of height) + diff --git a/src/main/java/electrosphere/client/ui/components/InputMacros.java b/src/main/java/electrosphere/client/ui/components/InputMacros.java index b917f60c..1b3b6ba4 100644 --- a/src/main/java/electrosphere/client/ui/components/InputMacros.java +++ b/src/main/java/electrosphere/client/ui/components/InputMacros.java @@ -36,31 +36,6 @@ 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 createTextInput(String label, String placeholder){ - Div rVal = Div.createDiv(); - rVal.setFlexDirection(YogaFlexDirection.Row); - - //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 diff --git a/src/main/java/electrosphere/client/ui/menu/mainmenu/MenuGeneratorsLevelEditor.java b/src/main/java/electrosphere/client/ui/menu/mainmenu/MenuGeneratorsLevelEditor.java index 21c97546..1f388287 100644 --- a/src/main/java/electrosphere/client/ui/menu/mainmenu/MenuGeneratorsLevelEditor.java +++ b/src/main/java/electrosphere/client/ui/menu/mainmenu/MenuGeneratorsLevelEditor.java @@ -17,6 +17,7 @@ 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.Panel; import electrosphere.renderer.ui.elementtypes.Element; import electrosphere.renderer.ui.elementtypes.ContainerElement.YogaAlignment; import electrosphere.renderer.ui.elementtypes.ContainerElement.YogaJustification; @@ -40,6 +41,26 @@ public class MenuGeneratorsLevelEditor { */ static final int MAX_SELECTABLE_SIZE = 128; + /** + * Margin between each panel + */ + static final int PANEL_MARGIN = 15; + + /** + * Padding of each panel + */ + static final int PANEL_PADDING = 50; + + /** + * Width of a panel + */ + static final int PANEL_WIDTH = 500; + + /** + * Height of a panel + */ + static final int PANEL_HEIGHT = 150; + /** * Creates the top level menu for the level editor * @return The actual element containing the menu @@ -128,8 +149,25 @@ public class MenuGeneratorsLevelEditor { launchButton, editButton ); + row.setJustifyContent(YogaJustification.Between); + row.setFlexGrow(1.0f); row.setMaxHeight(30); - existingLevelColumn.addChild(row); + + //create panel to hold the row + Panel panel = Panel.createPanel(); + panel.setWidth(PANEL_WIDTH); + panel.setHeight(PANEL_HEIGHT); + panel.setMarginBottom(PANEL_MARGIN); + panel.setMarginLeft(PANEL_MARGIN); + panel.setMarginRight(PANEL_MARGIN); + panel.setMarginTop(PANEL_MARGIN); + panel.setPaddingBottom(PANEL_PADDING); + panel.setPaddingLeft(PANEL_PADDING); + panel.setPaddingRight(PANEL_PADDING); + panel.setPaddingTop(PANEL_PADDING); + panel.addChild(row); + + existingLevelColumn.addChild(panel); } return rVal; 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 eb800049..21be9d7a 100644 --- a/src/main/java/electrosphere/client/ui/menu/mainmenu/MenuGeneratorsTitleMenu.java +++ b/src/main/java/electrosphere/client/ui/menu/mainmenu/MenuGeneratorsTitleMenu.java @@ -21,6 +21,11 @@ import electrosphere.renderer.ui.events.NavigationEvent; */ public class MenuGeneratorsTitleMenu { + /** + * spacing between each button + */ + static final int BUTTON_SPACING = 25; + /** * Creates the main title menu * @return The menu element @@ -54,50 +59,82 @@ public class MenuGeneratorsTitleMenu { optionPanel.addChild(titleLabel); //button (multiplayer) - optionPanel.addChild(Button.createButtonCentered("Singleplayer", 1.0f, () -> { - WindowUtils.replaceMainMenuContents(MenuWorldSelect.createWorldSelectMenu()); - }).setOnClickAudio(AssetDataStrings.UI_TONE_BUTTON_TITLE)); + { + Button button = Button.createButtonCentered("Singleplayer", 1.0f, () -> { + WindowUtils.replaceMainMenuContents(MenuWorldSelect.createWorldSelectMenu()); + }).setOnClickAudio(AssetDataStrings.UI_TONE_BUTTON_TITLE); + button.setMarginTop(BUTTON_SPACING); + optionPanel.addChild(button); + } //button (multiplayer) - optionPanel.addChild(Button.createButtonCentered("Multiplayer", 1.0f, () -> { - WindowUtils.replaceMainMenuContents(MenuGeneratorsMultiplayer.createMultiplayerMenu()); - }).setOnClickAudio(AssetDataStrings.UI_TONE_BUTTON_TITLE)); + { + Button button = Button.createButtonCentered("Multiplayer", 1.0f, () -> { + WindowUtils.replaceMainMenuContents(MenuGeneratorsMultiplayer.createMultiplayerMenu()); + }).setOnClickAudio(AssetDataStrings.UI_TONE_BUTTON_TITLE); + button.setMarginTop(BUTTON_SPACING); + optionPanel.addChild(button); + } //button (static level) - optionPanel.addChild(Button.createButtonCentered("Level Editor", 1.0f, () -> { - WindowUtils.replaceMainMenuContents(MenuGeneratorsLevelEditor.createLevelEditorTopMenu()); - }).setOnClickAudio(AssetDataStrings.UI_TONE_BUTTON_TITLE)); + { + Button button = Button.createButtonCentered("Level Editor", 1.0f, () -> { + WindowUtils.replaceMainMenuContents(MenuGeneratorsLevelEditor.createLevelEditorTopMenu()); + }).setOnClickAudio(AssetDataStrings.UI_TONE_BUTTON_TITLE); + button.setMarginTop(BUTTON_SPACING); + optionPanel.addChild(button); + } //button (options) - optionPanel.addChild(Button.createButtonCentered("Options", 1.0f, () -> { - WindowUtils.replaceMainMenuContents(MenuGeneratorsTitleOptions.createOptionsMainMenu()); - }).setOnClickAudio(AssetDataStrings.UI_TONE_BUTTON_TITLE)); + { + Button button = Button.createButtonCentered("Options", 1.0f, () -> { + WindowUtils.replaceMainMenuContents(MenuGeneratorsTitleOptions.createOptionsMainMenu()); + }).setOnClickAudio(AssetDataStrings.UI_TONE_BUTTON_TITLE); + button.setMarginTop(BUTTON_SPACING); + optionPanel.addChild(button); + } //button (sp debug) - optionPanel.addChild(Button.createButtonCentered("Debug SP Quickstart", 1.0f, () -> { - LoadingThread loadingThread = new LoadingThread(LoadingThreadType.DEBUG_RANDOM_SP_WORLD); - Globals.RUN_CLIENT = true; - Globals.RUN_SERVER = true; - Globals.threadManager.start(loadingThread); - }).setOnClickAudio(AssetDataStrings.UI_TONE_BUTTON_TITLE)); + { + Button button = Button.createButtonCentered("Debug SP Quickstart", 1.0f, () -> { + LoadingThread loadingThread = new LoadingThread(LoadingThreadType.DEBUG_RANDOM_SP_WORLD); + Globals.RUN_CLIENT = true; + Globals.RUN_SERVER = true; + Globals.threadManager.start(loadingThread); + }).setOnClickAudio(AssetDataStrings.UI_TONE_BUTTON_TITLE); + button.setMarginTop(BUTTON_SPACING); + optionPanel.addChild(button); + } //button (sp debug) - optionPanel.addChild(Button.createButtonCentered("Load Test Generation Realm", 1.0f, () -> { - LoadingThread loadingThread = new LoadingThread(LoadingThreadType.CHUNK_GENERATION_REALM); - Globals.RUN_CLIENT = true; - Globals.RUN_SERVER = true; - Globals.threadManager.start(loadingThread); - }).setOnClickAudio(AssetDataStrings.UI_TONE_BUTTON_TITLE)); + { + Button button = Button.createButtonCentered("Load Test Generation Realm", 1.0f, () -> { + LoadingThread loadingThread = new LoadingThread(LoadingThreadType.CHUNK_GENERATION_REALM); + Globals.RUN_CLIENT = true; + Globals.RUN_SERVER = true; + Globals.threadManager.start(loadingThread); + }).setOnClickAudio(AssetDataStrings.UI_TONE_BUTTON_TITLE); + button.setMarginTop(BUTTON_SPACING); + optionPanel.addChild(button); + } //button (ui testing) - optionPanel.addChild(Button.createButtonCentered("UI Testing", 1.0f, () -> { - WindowUtils.replaceMainMenuContents(MenuGeneratorsUITesting.createUITestMenu()); - }).setOnClickAudio(AssetDataStrings.UI_TONE_BUTTON_TITLE)); + { + Button button = Button.createButtonCentered("UI Testing", 1.0f, () -> { + WindowUtils.replaceMainMenuContents(MenuGeneratorsUITesting.createUITestMenu()); + }).setOnClickAudio(AssetDataStrings.UI_TONE_BUTTON_TITLE); + button.setMarginTop(BUTTON_SPACING); + optionPanel.addChild(button); + } //button (Viewport Test) - optionPanel.addChild(Button.createButtonCentered("Viewport Test", 1.0f, () -> { - Globals.threadManager.start(new LoadingThread(LoadingThreadType.LOAD_VIEWPORT)); - }).setOnClickAudio(AssetDataStrings.UI_TONE_BUTTON_TITLE)); + { + Button button = Button.createButtonCentered("Viewport Test", 1.0f, () -> { + Globals.threadManager.start(new LoadingThread(LoadingThreadType.LOAD_VIEWPORT)); + }).setOnClickAudio(AssetDataStrings.UI_TONE_BUTTON_TITLE); + button.setMarginTop(BUTTON_SPACING); + optionPanel.addChild(button); + } rVal.addChild(optionPanel); diff --git a/src/main/java/electrosphere/renderer/ui/elements/Button.java b/src/main/java/electrosphere/renderer/ui/elements/Button.java index eceb9a39..69c3f61f 100644 --- a/src/main/java/electrosphere/renderer/ui/elements/Button.java +++ b/src/main/java/electrosphere/renderer/ui/elements/Button.java @@ -7,7 +7,6 @@ import electrosphere.engine.assetmanager.AssetDataStrings; import electrosphere.renderer.OpenGLState; import electrosphere.renderer.RenderPipelineState; import electrosphere.renderer.framebuffer.Framebuffer; -import electrosphere.renderer.model.Material; import electrosphere.renderer.ui.elementtypes.ClickableElement; import electrosphere.renderer.ui.elementtypes.DrawableElement; import electrosphere.renderer.ui.elementtypes.Element; @@ -70,11 +69,6 @@ public class Button extends StandardContainerElement implements DrawableElement, */ Vector3f frameBackgroundColor = new Vector3f(COLOR_FRAME_UNFOCUSED_DEFAULT); - Vector3f boxPosition = new Vector3f(); - Vector3f boxDimensions = new Vector3f(); - Vector3f texPosition = new Vector3f(0,0,0); - Vector3f texScale = new Vector3f(1,1,0); - Material customMat = new Material(); boolean visible = false; boolean focused = false; @@ -273,16 +267,6 @@ public class Button extends StandardContainerElement implements DrawableElement, int framebufferPosY ) { - // - //Draw decorations - - float ndcWidth = (float)getWidth()/framebuffer.getWidth(); - float ndcHeight = (float)getHeight()/framebuffer.getHeight(); - float ndcX = (float)this.absoluteToFramebuffer(getAbsoluteX(),framebufferPosX)/framebuffer.getWidth(); - float ndcY = (float)this.absoluteToFramebuffer(getAbsoluteY(),framebufferPosY)/framebuffer.getHeight(); - boxPosition = new Vector3f(ndcX,ndcY,0); - boxDimensions = new Vector3f(ndcWidth,ndcHeight,0); - //this call binds the screen as the "texture" we're rendering to //have to call before actually rendering framebuffer.bind(openGLState); diff --git a/src/main/java/electrosphere/renderer/ui/elements/Label.java b/src/main/java/electrosphere/renderer/ui/elements/Label.java index 266490e8..1b35b8a1 100644 --- a/src/main/java/electrosphere/renderer/ui/elements/Label.java +++ b/src/main/java/electrosphere/renderer/ui/elements/Label.java @@ -23,14 +23,20 @@ public class Label extends StandardContainerElement implements DrawableElement { */ public static final float DEFAULT_FONT_SIZE = 1.0f; - String text = ""; - int textPixelWidth = 0; + /** + * The text of the label + */ + private String text = ""; - float fontSize = DEFAULT_FONT_SIZE; - - static final Vector3f windowDrawDebugColor = new Vector3f(1.0f,1.0f,1.0f); + /** + * The font size of the label + */ + private float fontSize = DEFAULT_FONT_SIZE; - Font font; + /** + * The font to use with the label + */ + private Font font; /** * Creates a label element @@ -62,12 +68,15 @@ public class Label extends StandardContainerElement implements DrawableElement { private Label(float fontSize){ super(); this.font = Globals.fontManager.getFont("default"); - setHeight((int)(font.getFontHeight() * fontSize)); + this.setHeight((int)(font.getFontHeight() * fontSize)); this.fontSize = fontSize; Yoga.YGNodeStyleSetFlexDirection(this.yogaNode, Yoga.YGFlexDirectionRow); } - void generateLetters(){ + /** + * Generates the letter elements of the label + */ + private void generateLetters(){ //free children for(Element child : childList){ Globals.signalSystem.post(SignalType.YOGA_DESTROY, child); @@ -95,22 +104,29 @@ public class Label extends StandardContainerElement implements DrawableElement { this.generateLetters(); } + /** + * Sets the text of the label + * @param text The text + */ public void setText(String text){ this.text = text; - textPixelWidth = 0; - for(int i = 0; i < text.length(); i++){ - Vector3f bitMapDimension = this.font.getDimensionOfCharacterDiscrete(text.charAt(i)); - textPixelWidth = textPixelWidth + (int)bitMapDimension.x; - } - generateLetters(); + this.generateLetters(); } + /** + * Sets the color of the label + * @param color The color + */ public void setColor(Vector3f color){ for(Element character : childList){ ((BitmapCharacter)character).setColor(color); } } + /** + * Gets the text of the label + * @return The text + */ public String getText(){ return text; } @@ -134,6 +150,7 @@ public class Label extends StandardContainerElement implements DrawableElement { } } + @Override public boolean handleEvent(Event event){ return true; } diff --git a/src/main/java/electrosphere/renderer/ui/elements/Panel.java b/src/main/java/electrosphere/renderer/ui/elements/Panel.java index 2dbb84cb..548ffc99 100644 --- a/src/main/java/electrosphere/renderer/ui/elements/Panel.java +++ b/src/main/java/electrosphere/renderer/ui/elements/Panel.java @@ -57,6 +57,10 @@ public class Panel extends StandardContainerElement implements DrawableElement { Yoga.YGNodeStyleSetFlexDirection(this.yogaNode, Yoga.YGFlexDirectionRow); } + /** + * Sets the color of the panel + * @param color The color + */ public void setColor(Vector3f color){ for(Element character : childList){ ((BitmapCharacter)character).setColor(color); @@ -89,6 +93,7 @@ public class Panel extends StandardContainerElement implements DrawableElement { } } + @Override public boolean handleEvent(Event event){ return true; } diff --git a/src/main/java/electrosphere/renderer/ui/elements/TextInput.java b/src/main/java/electrosphere/renderer/ui/elements/TextInput.java index 27376426..b6813e51 100644 --- a/src/main/java/electrosphere/renderer/ui/elements/TextInput.java +++ b/src/main/java/electrosphere/renderer/ui/elements/TextInput.java @@ -6,7 +6,6 @@ import electrosphere.engine.signal.Signal.SignalType; import electrosphere.renderer.OpenGLState; import electrosphere.renderer.RenderPipelineState; import electrosphere.renderer.framebuffer.Framebuffer; -import electrosphere.renderer.model.Material; import electrosphere.renderer.ui.elementtypes.ClickableElement; import electrosphere.renderer.ui.elementtypes.DrawableElement; import electrosphere.renderer.ui.elementtypes.Element; @@ -22,7 +21,6 @@ import electrosphere.renderer.ui.font.Font; import electrosphere.renderer.ui.frame.UIFrameUtils; import org.joml.Vector3f; -import org.lwjgl.util.yoga.Yoga; import java.util.regex.Pattern; @@ -36,41 +34,75 @@ public class TextInput extends StandardContainerElement implements DrawableEleme */ static final int DEFAULT_PADDING = Button.DEFAULT_PADDING; + /** + * The color of the background element of the input + */ Vector3f backgroundColor = new Vector3f(0.2f,0.2f,0.2f); - Vector3f boxPosition = new Vector3f(); - Vector3f boxDimensions = new Vector3f(); - Vector3f texPosition = new Vector3f(0,0,0); - Vector3f texScale = new Vector3f(1,1,0); - Material customMat = new Material(); - - public boolean visible = false; + /** + * Stores visibility status + */ + private boolean visible = false; - boolean focused = false; - FocusEventCallback onFocusCallback; - FocusEventCallback onLoseFocusCallback; - KeyboardEventCallback onKeyPressCallback; - ClickEventCallback onClickCallback; - ValueChangeEventCallback onValueChangeCallback; - Vector3f color; + /** + * Stores focused status + */ + private boolean focused = false; - String text = ""; - int textPixelWidth = 0; - - float fontSize = Label.DEFAULT_FONT_SIZE; - + /** + * Optional callback for gaining focus + */ + private FocusEventCallback onFocusCallback; - Font font; + /** + * Optional callback for losing focus + */ + private FocusEventCallback onLoseFocusCallback; + + /** + * Optional callback for key presses + */ + private KeyboardEventCallback onKeyPressCallback; + + /** + * Optional callback for mouse clicks + */ + private ClickEventCallback onClickCallback; + + /** + * Optional callback for value changes + */ + private ValueChangeEventCallback onValueChangeCallback; + + /** + * The color of the text input + */ + private Vector3f color; + + /** + * The content of the text input + */ + private String text = ""; + + /** + * The size of the font for the text input + */ + private float fontSize = Label.DEFAULT_FONT_SIZE; + + /** + * The font to use with the text input + */ + private Font font; /** * Audio path played when typing into the input */ - String audioPathOnType = AssetDataStrings.UI_TONE_CURSOR_SECONDARY; + private String audioPathOnType = AssetDataStrings.UI_TONE_CURSOR_SECONDARY; /** * Audio path played when typing into the input */ - String audioPathOnTypeError = AssetDataStrings.UI_TONE_ERROR_SECONDARY; + private String audioPathOnTypeError = AssetDataStrings.UI_TONE_ERROR_SECONDARY; /** * Creates a text input element using the default font size @@ -90,9 +122,13 @@ public class TextInput extends StandardContainerElement implements DrawableEleme this.font = Globals.fontManager.getFont("default"); this.fontSize = fontSize; this.color = new Vector3f(1,1,1); - this.setHeight((int)(font.getFontHeight() * fontSize)); - Yoga.YGNodeStyleSetFlexDirection(this.yogaNode, Yoga.YGFlexDirectionRow); - Yoga.YGNodeStyleSetMinWidth(this.yogaNode, 1); + this.setHeight((int)(font.getFontHeight() * fontSize) + DEFAULT_PADDING * 2); + this.setFlexDirection(YogaFlexDirection.Row); + this.setMinWidth(1); + this.setPaddingBottom(DEFAULT_PADDING); + this.setPaddingLeft(DEFAULT_PADDING); + this.setPaddingRight(DEFAULT_PADDING); + this.setPaddingTop(DEFAULT_PADDING); } /** @@ -103,28 +139,28 @@ public class TextInput extends StandardContainerElement implements DrawableEleme Globals.signalSystem.post(SignalType.YOGA_DESTROY, el); } this.clearChildren(); - int accumulatingWidth = 0; for(int i = 0; i < text.length(); i++){ char toDraw = text.charAt(i); Vector3f bitMapDimension = this.font.getDimensionOfCharacterDiscrete(toDraw); - BitmapCharacter newLetter = new BitmapCharacter(this.font,(int)(bitMapDimension.x * fontSize), this.getHeight(), fontSize, toDraw); - accumulatingWidth += bitMapDimension.x * fontSize; + BitmapCharacter newLetter = new BitmapCharacter(this.font,(int)(bitMapDimension.x * fontSize), this.getHeight() - DEFAULT_PADDING * 2, fontSize, toDraw); newLetter.setColor(color); this.addChild(newLetter); } - Yoga.YGNodeStyleSetWidth(yogaNode, accumulatingWidth); } + /** + * Sets the content of the text input + * @param text The content + */ public void setText(String text){ this.text = text; - this.textPixelWidth = 0; - for(int i = 0; i < text.length(); i++){ - Vector3f bitMapDimension = this.font.getDimensionOfCharacterDiscrete(text.charAt(i)); - this.textPixelWidth = this.textPixelWidth + (int)bitMapDimension.x; - } this.generateLetters(); } + /** + * Sets the color of the text input + * @param color The color + */ public void setColor(Vector3f color){ this.color.set(color); for(Element character : childList){ @@ -132,6 +168,10 @@ public class TextInput extends StandardContainerElement implements DrawableEleme } } + /** + * Gets the current contents of the text input + * @return The contents + */ public String getText(){ return text; } @@ -152,14 +192,14 @@ public class TextInput extends StandardContainerElement implements DrawableEleme //render background of window if(this.isFocused()){ UIFrameUtils.drawFrame( - AssetDataStrings.UI_FRAME_TEXTURE_DEFAULT_1, backgroundColor, 48, 12, - this.getAbsoluteX(), this.getAbsoluteY(), this.getWidth(), this.getHeight(), + AssetDataStrings.UI_FRAME_TEXTURE_DEFAULT_3, backgroundColor, 48, 12, + this.getAbsoluteX(), this.getAbsoluteY(), this.getWidth(), this.getHeight(), framebuffer, framebufferPosX, framebufferPosY ); } else { UIFrameUtils.drawFrame( - AssetDataStrings.UI_FRAME_TEXTURE_DEFAULT_2, backgroundColor, 48, 12, - this.getAbsoluteX(), this.getAbsoluteY(), this.getWidth(), this.getHeight(), + AssetDataStrings.UI_FRAME_TEXTURE_DEFAULT_3, backgroundColor, 48, 12, + this.getAbsoluteX(), this.getAbsoluteY(), this.getWidth(), this.getHeight(), framebuffer, framebufferPosX, framebufferPosY ); } @@ -172,14 +212,17 @@ public class TextInput extends StandardContainerElement implements DrawableEleme } } + @Override public boolean getVisible() { return visible; } + @Override public void setVisible(boolean draw) { this.visible = draw; } + @Override public boolean handleEvent(Event event){ boolean propagate = true; if(event instanceof FocusEvent){