From 49e1d4501b34521d984a9f6e0a2371cdf0a0bd72 Mon Sep 17 00:00:00 2001 From: austin Date: Sat, 19 Mar 2022 23:58:06 -0400 Subject: [PATCH] TextInput element fixed, more assets --- assets/Models/falloak1.fbx | Bin 34556 -> 36348 bytes assets/Models/shrine2.fbx | Bin 0 -> 44796 bytes assets/Shaders/grass1/grass1.gs | 18 +- assets/Shaders/water1/water.fs | 108 ++++- assets/Textures/Fonts/myFont2Map.json | 13 +- assets/Textures/Fonts/myfont2.png | Bin 26717 -> 27265 bytes assets/Textures/default_texture_map.json | 6 +- .../controls/ControlHandler.java | 18 +- .../electrosphere/engine/LoadingThread.java | 25 +- .../electrosphere/menu/MenuGenerators.java | 42 +- .../java/electrosphere/net/server/Server.java | 4 + .../renderer/RenderingEngine.java | 12 + .../electrosphere/renderer/ShaderProgram.java | 5 +- .../renderer/ui/KeyEventElement.java | 13 + .../renderer/ui/elements/Label.java | 23 +- .../renderer/ui/elements/TextInput.java | 376 ++++++++++-------- 16 files changed, 442 insertions(+), 221 deletions(-) create mode 100644 assets/Models/shrine2.fbx create mode 100644 src/main/java/electrosphere/renderer/ui/KeyEventElement.java diff --git a/assets/Models/falloak1.fbx b/assets/Models/falloak1.fbx index 7e622a75573c50ebc33d38b6abc0abd07c4c920e..c30e1a9d3fa7771adbc5fe55f484bc8d565d3bd9 100644 GIT binary patch delta 23579 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 b*grt;*$FAni%}Ty#~PTc9EUIu9!LHU?#%N3 delta 22925 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

LuhW;Splg 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%0D32qGcpXHx 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 0.5){ + float foamVal = voronoi(vec3(modelCoord.x * 8,modelCoord.z * 8,timeS)).x; + // foamVal = foamVal * foamVal * min(1 - volume * 10,0); + foamVal = foamVal * foamVal; + red = red + foamVal;// * foamFallout; + blue = blue + foamVal;// * foamFallout; + green = green + foamVal;// * foamFallout; + alpha = alpha + foamVal;// * foamFallout; + // // float foamVal = openSimplex2_ImproveXY(vec3(modelCoord.x * 5.0,modelCoord.z * 5.0,timeS)).x; + // // if(foamVal > 0.4 && foamVal < 0.7){ + // // foamVal = 1.0 - foamVal * foamVal; + // // red = foamVal + red; + // // green = foamVal + green; + // // blue = foamVal + blue; + // // alpha = foamVal + alpha; + // // } + } // alpha = 0.5; @@ -250,4 +284,68 @@ vec4 openSimplex2_ImproveXY(vec3 X) { return vec4(result.xyz * orthonormalMap, result.w); } -//////////////////////////////// End noise code //////////////////////////////// \ No newline at end of file +const mat2 myt = mat2(.12121212,.13131313,-.13131313,.12121212); +const vec2 mys = vec2(1e4, 1e6); +vec2 rhash(vec2 uv) { + uv *= myt; + uv *= mys; + return fract(fract(uv/mys)*uv); +} + +vec3 hash( vec3 p ){ + return fract(sin(vec3( dot(p,vec3(1.0,57.0,113.0)), + dot(p,vec3(57.0,113.0,1.0)), + dot(p,vec3(113.0,1.0,57.0))))*43758.5453); + +} + +float voronoi(vec2 point){ + vec2 p = floor( point ); + vec2 f = fract( point ); + float res = 0.0; + for( int j=-1; j<=1; j++ ) { + for( int i=-1; i<=1; i++ ) { + vec2 b = vec2( i, j ); + vec2 r = vec2( b ) - f + rhash( p + b); + res += 1./pow(dot(r,r),8.); + } + } + return pow(1./res, 0.0625); +} + +vec3 voronoi(vec3 x) { + vec3 p = floor( x ); + vec3 f = fract( x ); + + float id = 0.0; + vec2 res = vec2( 100.0 ); + for( int k=-1; k<=1; k++ ) { + for( int j=-1; j<=1; j++ ) { + for( int i=-1; i<=1; i++ ) { + vec3 b = vec3( float(i), float(j), float(k) ); + vec3 r = vec3( b ) - f + hash( p + b ); + float d = dot( r, r ); + + if( d < res.x ) { + id = dot( p+b, vec3(1.0,57.0,113.0 ) ); + res = vec2( d, res.x ); + } + else if( d < res.y ) { + res.y = d; + } + } + } + } + + return vec3( sqrt( res ), abs(id) ); +} + +//////////////////////////////// End noise code //////////////////////////////// + + +float linearCenterAroundPoint(float input, float centerpoint, float falloff){ + return max(((-abs(input - centerpoint)) + centerpoint)*falloff,0); +} + + + diff --git a/assets/Textures/Fonts/myFont2Map.json b/assets/Textures/Fonts/myFont2Map.json index d41782e3..834aa62b 100644 --- a/assets/Textures/Fonts/myFont2Map.json +++ b/assets/Textures/Fonts/myFont2Map.json @@ -441,14 +441,14 @@ "symbol": ".", "startX": 2605, "startY": 1, - "width": 40, + "width": 24, "height": 58 }, { "symbol": "!", - "startX": 2647, + "startX": 2632, "startY": 1, - "width": 40, + "width": 24, "height": 58 }, { @@ -478,6 +478,13 @@ "startY": 1, "width": 40, "height": 58 + }, + { + "symbol": "/", + "startX": 2844, + "startY": 1, + "width": 40, + "height": 58 } ] } \ No newline at end of file diff --git a/assets/Textures/Fonts/myfont2.png b/assets/Textures/Fonts/myfont2.png index 4af3caf8d32382062091b679feeaf4522274ea71..50dc40ee3c1b5c48af4405eb8f1734aa26357808 100644 GIT binary patch literal 27265 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 literal 26717 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 diff --git a/assets/Textures/default_texture_map.json b/assets/Textures/default_texture_map.json index 506c85af..d1fd3eac 100644 --- a/assets/Textures/default_texture_map.json +++ b/assets/Textures/default_texture_map.json @@ -183,7 +183,11 @@ ] }, "Models/falloak1.fbx" : { - "Cube" : [ + "Tree" : [ + "/Textures/falloak1.png", + "/Textures/falloak1.png" + ], + "Cube.003" : [ "/Textures/falloak1.png", "/Textures/falloak1.png" ] diff --git a/src/main/java/electrosphere/controls/ControlHandler.java b/src/main/java/electrosphere/controls/ControlHandler.java index 9d7895b9..0073d48d 100644 --- a/src/main/java/electrosphere/controls/ControlHandler.java +++ b/src/main/java/electrosphere/controls/ControlHandler.java @@ -18,6 +18,7 @@ import electrosphere.entity.types.camera.CameraEntityUtils; import electrosphere.entity.types.collision.CollisionObjUtils; import electrosphere.entity.types.item.ItemUtils; import electrosphere.game.client.targeting.crosshair.Crosshair; +import electrosphere.logger.LoggerInterface; import electrosphere.main.Globals; import electrosphere.main.Main; import electrosphere.menu.WindowStrings; @@ -118,6 +119,7 @@ public class ControlHandler { public static final String DATA_STRING_INPUT_CODE_MENU_TYPE_X = "menuTypeX"; public static final String DATA_STRING_INPUT_CODE_MENU_TYPE_Y = "menuTypeY"; public static final String DATA_STRING_INPUT_CODE_MENU_TYPE_Z = "menuTypeZ"; + public static final String INPUT_CODE_MENU_TYPE_FORWARD_SLASH = "menuTypeForwardSlash"; public static final String INPUT_CODE_INVENTORY_CLOSE = "inventoryClose"; public static final String INPUT_CODE_INVENTORY_ITEM_MANIPULATE = "inventoryItemManipulate"; @@ -242,6 +244,7 @@ public class ControlHandler { handler.addControl(DATA_STRING_INPUT_CODE_MENU_TYPE_X, new Control(ControlType.KEY,GLFW_KEY_X)); handler.addControl(DATA_STRING_INPUT_CODE_MENU_TYPE_Y, new Control(ControlType.KEY,GLFW_KEY_Y)); handler.addControl(DATA_STRING_INPUT_CODE_MENU_TYPE_Z, new Control(ControlType.KEY,GLFW_KEY_Z)); + handler.addControl(INPUT_CODE_MENU_TYPE_FORWARD_SLASH, new Control(ControlType.KEY,GLFW_KEY_SLASH)); /* Inventory controls @@ -906,12 +909,13 @@ public class ControlHandler { DATA_STRING_INPUT_CODE_MENU_TYPE_X, DATA_STRING_INPUT_CODE_MENU_TYPE_Y, DATA_STRING_INPUT_CODE_MENU_TYPE_Z, + INPUT_CODE_MENU_TYPE_FORWARD_SLASH, }; for(String currentKey : typeKeybinds){ typingControlList.add(controls.get(currentKey)); controls.get(currentKey).setOnPress(new ControlMethod(){public void execute(){ Globals.elementManager.fireEvent( - new KeyboardEvent(currentKey), + new KeyboardEvent(convertKeycodeToName(controls.get(currentKey).keyValue)), Globals.elementManager.getFocusedElement().getPositionX(), Globals.elementManager.getFocusedElement().getPositionY() ); @@ -1096,6 +1100,12 @@ public class ControlHandler { public static String convertKeycodeToName(int code){ String rVal = ""; switch(code){ + case 46: + rVal = "."; + break; + case 47: + rVal = "/"; + break; case 48: rVal = "0"; break; @@ -1204,9 +1214,15 @@ public class ControlHandler { case 90: rVal = "Z"; break; + case 259: + rVal = "bs"; //backspace + break; case 256: rVal = "Escape"; break; + default: + LoggerInterface.loggerEngine.WARNING("Unable to convert keycode " + code + " in control handler."); + break; } return rVal; } diff --git a/src/main/java/electrosphere/engine/LoadingThread.java b/src/main/java/electrosphere/engine/LoadingThread.java index 79b56bcd..f8d5ae1f 100644 --- a/src/main/java/electrosphere/engine/LoadingThread.java +++ b/src/main/java/electrosphere/engine/LoadingThread.java @@ -120,6 +120,7 @@ public class LoadingThread extends Thread { case LOAD_MAIN_GAME: WindowUtils.recursiveSetVisible(Globals.elementManager.getWindow(WindowStrings.WINDOW_MENU_MAIN), false); + WindowUtils.replaceMainMenuContents(MenuGenerators.createEmptyMainMenu()); loadingWindow.setVisible(true); //disable menu input @@ -223,6 +224,7 @@ public class LoadingThread extends Thread { case LOAD_ARENA: WindowUtils.recursiveSetVisible(Globals.elementManager.getWindow(WindowStrings.WINDOW_MENU_MAIN), false); + WindowUtils.replaceMainMenuContents(MenuGenerators.createEmptyMainMenu()); loadingWindow.setVisible(true); //disable menu input @@ -643,7 +645,7 @@ public class LoadingThread extends Thread { // Entity tree = EntityUtils.spawnDrawableEntity(treePath); // EntityUtils.getPosition(tree).set(rand.nextFloat() * 105 + 1, 0, rand.nextFloat() * 105 + 1); // EntityUtils.getRotation(tree).rotateLocalX(-(float)Math.PI/2.0f).rotateZ(rand.nextFloat()); -//// EntityUtils.getEntityRotation(tree).rotateAxis((float)-Math.PI/2.0f, new Vector3f(1,0,0)); +// // EntityUtils.getEntityRotation(tree).rotateAxis((float)-Math.PI/2.0f, new Vector3f(1,0,0)); // } // Random rand = new Random(); @@ -716,15 +718,15 @@ public class LoadingThread extends Thread { // EntityUtils.getPosition(grass).set(3,0,1); //queue grass shader - Globals.assetManager.addShaderToQueue("Shaders/grass1/grass1.vs", "Shaders/grass1/grass1.gs", "Shaders/grass1/grass1.fs"); - for(int x = 0; x < 10; x++){ - for(int y = 0; y < 10; y++){ - Entity grass = EntityUtils.spawnDrawableEntity("Models/grass1.fbx"); - //shader mask - EntityUtils.getActor(grass).maskShader("Cube", "Shaders/grass1/grass1.vs", "Shaders/grass1/grass1.gs", "Shaders/grass1/grass1.fs"); - EntityUtils.getPosition(grass).set(3 + x / 5.0f,0.0,1 + y / 5.0f); - } - } + // Globals.assetManager.addShaderToQueue("Shaders/grass1/grass1.vs", "Shaders/grass1/grass1.gs", "Shaders/grass1/grass1.fs"); + // for(int x = 0; x < 10; x++){ + // for(int y = 0; y < 10; y++){ + // Entity grass = EntityUtils.spawnDrawableEntity("Models/grass1.fbx"); + // //shader mask + // EntityUtils.getActor(grass).maskShader("Cube", "Shaders/grass1/grass1.vs", "Shaders/grass1/grass1.gs", "Shaders/grass1/grass1.fs"); + // EntityUtils.getPosition(grass).set(3 + x / 5.0f,0.0,1 + y / 5.0f); + // } + // } //water cube @@ -732,6 +734,9 @@ public class LoadingThread extends Thread { EntityUtils.getActor(water).maskShader("Cube", "Shaders/water1/water.vs", "Shaders/water1/water.fs"); Globals.assetManager.addShaderToQueue("Shaders/water1/water.vs", "Shaders/water1/water.fs"); EntityUtils.getPosition(water).set(5,0.51,5); + EntityUtils.getRotation(water).rotationX((float)Math.PI/4.0f); + // EntityUtils.getPosition(water).set(5,-0.1,5); + EntityUtils.getScale(water).set(1,1,1); //texture mask EntityUtils.getActor(water).addTextureMask(RenderUtils.generateVolumetricTextureMask("Cube")); //set draw volumetric diff --git a/src/main/java/electrosphere/menu/MenuGenerators.java b/src/main/java/electrosphere/menu/MenuGenerators.java index a8ce4994..ba80622e 100644 --- a/src/main/java/electrosphere/menu/MenuGenerators.java +++ b/src/main/java/electrosphere/menu/MenuGenerators.java @@ -119,6 +119,11 @@ public class MenuGenerators { return rVal; } + + public static Element createEmptyMainMenu(){ + Div rVal = new Div(); + return rVal; + } public static Element createWorldSelectMenu(){ FormElement rVal = new FormElement(); @@ -309,7 +314,7 @@ public class MenuGenerators { rVal.addChild(addressLabel); //text entry (address) - TextInput addressInput = new TextInput(100,screenTop + 125,40*15, 40); + TextInput addressInput = new TextInput(100,screenTop + 125,1.0f); addressInput.setText(NetUtils.getAddress()); rVal.addChild(addressInput); @@ -319,7 +324,7 @@ public class MenuGenerators { rVal.addChild(portLabel); //text entry (port) - TextInput portInput = new TextInput(100,screenTop + 275,40*5, 40); + TextInput portInput = new TextInput(100,screenTop + 275,1.0f); rVal.addChild(portInput); //button (connect) @@ -540,15 +545,9 @@ public class MenuGenerators { //text entry (port) - TextInput modelDebugInput = new TextInput(100,150, 40*5, 40); + TextInput modelDebugInput = new TextInput(100,150,fontSize); scrollable.addChild(modelDebugInput); modelDebugInput.setText("Model path goes here"); - modelDebugInput.setOnFocus(new FocusEventCallback() {public boolean execute(FocusEvent event) { - return false; - }}); - modelDebugInput.setOnLoseFocus(new FocusEventCallback() {public boolean execute(FocusEvent event) { - return false; - }}); //label 3 (load model and debug) Button debugModelButton = new Button(); @@ -583,9 +582,30 @@ public class MenuGenerators { return false; }}); - for(int i = 0; i < 9; i++){ + //disable drawing player character + Button toggleDrawPlayerButton = new Button(); + Label toggleDrawPlayerLabel = new Label(100,450,fontSize); + toggleDrawPlayerLabel.setText("Toggle draw character"); + toggleDrawPlayerButton.addChild(toggleDrawPlayerLabel); + scrollable.addChild(toggleDrawPlayerButton); + toggleDrawPlayerButton.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){ + // Main.running = false; + if(Globals.playerCharacter != null){ + if(Globals.playerCharacter.getDataKeys().contains(EntityDataStrings.DATA_STRING_DRAW)){ + boolean draw = (boolean)Globals.playerCharacter.getData(EntityDataStrings.DATA_STRING_DRAW); + Globals.playerCharacter.putData(EntityDataStrings.DATA_STRING_DRAW, !draw); + } + if(Globals.playerCharacter.getDataKeys().contains(EntityDataStrings.DRAW_CAST_SHADOW)){ + boolean drawShadow = (boolean)Globals.playerCharacter.getData(EntityDataStrings.DRAW_CAST_SHADOW); + Globals.playerCharacter.putData(EntityDataStrings.DRAW_CAST_SHADOW, !drawShadow); + } + } + return false; + }}); + + for(int i = 0; i < 7; i++){ Button someButton = new Button(); - Label someLabel = new Label(100,450 + i * 100,fontSize); + Label someLabel = new Label(100,550 + i * 100,fontSize); someLabel.setText("aaaaaa" + i); someButton.addChild(someLabel); scrollable.addChild(someButton); diff --git a/src/main/java/electrosphere/net/server/Server.java b/src/main/java/electrosphere/net/server/Server.java index d234a473..508132e1 100644 --- a/src/main/java/electrosphere/net/server/Server.java +++ b/src/main/java/electrosphere/net/server/Server.java @@ -4,6 +4,7 @@ import electrosphere.main.Main; import electrosphere.net.NetUtils; import electrosphere.net.parser.net.message.NetworkMessage; import java.io.IOException; +import java.net.BindException; import java.net.InetSocketAddress; import java.net.ServerSocket; import java.net.Socket; @@ -41,6 +42,9 @@ public class Server implements Runnable{ initServer(); try { serverSocket = new ServerSocket(port); + } catch(BindException ex){ + System.err.println("Failed to bind server socket!"); + ex.printStackTrace(); } catch (IOException ex) { System.err.println("Failed to start server socket!"); ex.printStackTrace(); diff --git a/src/main/java/electrosphere/renderer/RenderingEngine.java b/src/main/java/electrosphere/renderer/RenderingEngine.java index c2443b3f..c29eef6e 100644 --- a/src/main/java/electrosphere/renderer/RenderingEngine.java +++ b/src/main/java/electrosphere/renderer/RenderingEngine.java @@ -148,6 +148,9 @@ public class RenderingEngine { static Framebuffer transparencyBuffer; static ShaderProgram oitCompositeProgram; + /* + Perspective volumetrics + */ static Matrix4f nearVolumeProjectionMatrix = new Matrix4f(); static Matrix4f midVolumeProjectionMatrix = new Matrix4f(); static Matrix4f farVolumeProjectionMatrix = new Matrix4f(); @@ -158,6 +161,15 @@ public class RenderingEngine { static Texture volumeDepthFrontfaceTexture; static float volumeDepthLinearCoef = 0.1f; static float volumeDepthQuadCoef = 0.01f; + + /* + Vertical volumetrics + TODO: implement + */ + // static Texture volumeVerticalBackfaceTexture; + // static Framebuffer volumeVerticalBackfaceBuffer; + // static Texture volumeVerticalFrontfaceTexture; + // static Framebuffer volumeVerticalFrontfaceBuffer; // public static boolean renderHitboxes = false; // public static boolean renderPhysics = false; diff --git a/src/main/java/electrosphere/renderer/ShaderProgram.java b/src/main/java/electrosphere/renderer/ShaderProgram.java index 3dedf887..3c447ac4 100644 --- a/src/main/java/electrosphere/renderer/ShaderProgram.java +++ b/src/main/java/electrosphere/renderer/ShaderProgram.java @@ -1,6 +1,7 @@ package electrosphere.renderer; import electrosphere.logger.LoggerInterface; +import electrosphere.main.Globals; import electrosphere.main.Main; import electrosphere.util.FileUtils; import java.io.BufferedReader; @@ -337,7 +338,9 @@ public class ShaderProgram { //Tests for the success of the shader program creation success = glGetProgrami(rVal.shaderProgram, GL_LINK_STATUS); if (success != GL_TRUE) { - throw new RuntimeException(glGetProgramInfoLog(rVal.shaderProgram)); + LoggerInterface.loggerRenderer.ERROR(glGetProgramInfoLog(rVal.shaderProgram), new RuntimeException(glGetProgramInfoLog(rVal.shaderProgram))); + return Globals.defaultMeshShader; + // throw new RuntimeException(glGetProgramInfoLog(rVal.shaderProgram)); } //Deletes the individual shader objects to free up memory diff --git a/src/main/java/electrosphere/renderer/ui/KeyEventElement.java b/src/main/java/electrosphere/renderer/ui/KeyEventElement.java new file mode 100644 index 00000000..97b3b2fc --- /dev/null +++ b/src/main/java/electrosphere/renderer/ui/KeyEventElement.java @@ -0,0 +1,13 @@ +package electrosphere.renderer.ui; + +import electrosphere.renderer.ui.events.KeyboardEvent; + +public interface KeyEventElement extends Element { + + public void setOnPress(KeyboardEventCallback event); + + public interface KeyboardEventCallback { + public boolean execute(KeyboardEvent event); + } + +} diff --git a/src/main/java/electrosphere/renderer/ui/elements/Label.java b/src/main/java/electrosphere/renderer/ui/elements/Label.java index c28b52c7..73fa7735 100644 --- a/src/main/java/electrosphere/renderer/ui/elements/Label.java +++ b/src/main/java/electrosphere/renderer/ui/elements/Label.java @@ -17,6 +17,18 @@ import org.joml.Vector3f; */ public class Label implements DrawableElement { + public int width = 1; + public int height = 1; + + public int positionX = 0; + public int positionY = 0; + + public int parentWidth = 1; + public int parentHeight = 1; + + public boolean visible = false; + + String text = ""; int textPixelWidth = 0; @@ -71,17 +83,6 @@ public class Label implements DrawableElement { } } - public int width = 1; - public int height = 1; - - public int positionX = 0; - public int positionY = 0; - - public int parentWidth = 1; - public int parentHeight = 1; - - public boolean visible = false; - public int getWidth() { int minX = -1; int maxX = -1; diff --git a/src/main/java/electrosphere/renderer/ui/elements/TextInput.java b/src/main/java/electrosphere/renderer/ui/elements/TextInput.java index 38d981d1..24d012bf 100644 --- a/src/main/java/electrosphere/renderer/ui/elements/TextInput.java +++ b/src/main/java/electrosphere/renderer/ui/elements/TextInput.java @@ -8,184 +8,29 @@ import electrosphere.renderer.framebuffer.Framebuffer; import electrosphere.renderer.framebuffer.FramebufferUtils; import electrosphere.renderer.texture.Texture; import electrosphere.renderer.ui.DrawableElement; +import electrosphere.renderer.ui.Element; import electrosphere.renderer.ui.FocusableElement; +import electrosphere.renderer.ui.KeyEventElement; import electrosphere.renderer.ui.events.Event; import electrosphere.renderer.ui.events.FocusEvent; +import electrosphere.renderer.ui.events.KeyboardEvent; import electrosphere.renderer.ui.font.FontUtils; +import electrosphere.renderer.ui.font.bitmapchar.BitmapCharacter; + import org.joml.Vector3f; import static org.lwjgl.opengl.GL30.GL_FRAMEBUFFER; import static org.lwjgl.opengl.GL30.glBindFramebuffer; +import java.util.LinkedList; +import java.util.List; +import java.util.regex.Pattern; + /** * * @author amaterasu */ -public class TextInput implements DrawableElement, FocusableElement { +public class TextInput implements DrawableElement, FocusableElement, KeyEventElement { - Framebuffer widgetBuffer; - Material customMat = new Material(); - - Vector3f boxPosition = new Vector3f(0,0,0); - Vector3f boxDimensions = new Vector3f(1,1,0); - Vector3f texPosition = new Vector3f(0,0,0); - Vector3f texScale = new Vector3f(1,1,0); - - String text = ""; - - int fontWidth = 10; - int fontHeight = 20; - - int linePaddingHorizonal = 2; - int linePaddingVertical = 5; - - boolean focused = false; - FocusEventCallback onFocusCallback = null; - FocusEventCallback onLoseFocusCallback = null; - - Vector3f color = new Vector3f(0,0,0); - - public TextInput(int positionX, int positionY, int width, int height){ - //TODO: figure out why this has to be 1920x1080 -// widgetBuffer = FramebufferUtils.generateTextureFramebuffer(500, 500); - widgetBuffer = FramebufferUtils.generateScreensizeTextureFramebuffer(); - customMat.setTexturePointer(widgetBuffer.getTexturePointer()); -// customMat.setTexturePointer(Globals.assetManager.fetchTexture("Textures/Testing1.png").getTexturePointer()); -// customMat.setTexturePointer(Globals.assetManager.fetchTexture("Textures/default_diffuse.png").getTexturePointer()); - setPositionX(positionX); - setPositionY(positionY); - setWidth(width); - setHeight(height); - } - - @Override - public void setPositionY(int positionY) { - float ndcY = (float)positionY/(float)Globals.WINDOW_HEIGHT; - boxPosition.y = ndcY; - this.positionY = positionY; - } - - @Override - public void setPositionX(int positionX) { - float ndcX = (float)positionX/(float)Globals.WINDOW_WIDTH; - boxPosition.x = ndcX; - this.positionX = positionX; - } - - @Override - public void setHeight(int height) { - float ndcHeight = (float)height/(float)parentHeight; - boxDimensions.y = ndcHeight; - Framebuffer newBuffer = FramebufferUtils.generateTextureFramebuffer(width, height); - Framebuffer oldBuffer = widgetBuffer; - widgetBuffer = newBuffer; - customMat.setTexturePointer(widgetBuffer.getTexturePointer()); - oldBuffer.free(); -// customMat.setTexturePointer(Globals.assetManager.fetchTexture("Textures/Testing1.png").getTexturePointer()); - this.height = height; - } - - @Override - public void setWidth(int width) { - float ndcWidth = (float)width/(float)parentWidth; - boxDimensions.x = ndcWidth; - Framebuffer newBuffer = FramebufferUtils.generateTextureFramebuffer(width, height); - Framebuffer oldBuffer = widgetBuffer; - widgetBuffer = newBuffer; - customMat.setTexturePointer(widgetBuffer.getTexturePointer()); - oldBuffer.free(); -// widgetBuffer = FramebufferUtils.generateTextureFramebuffer(width, height); -// customMat.setTexturePointer(Globals.assetManager.fetchTexture("Textures/Testing1.png").getTexturePointer()); - this.width = width; - } - - @Override - public void setParentWidth(int parentWidth){ - this.parentWidth = parentWidth; - } - - @Override - public void setParentHeight(int parentHeight){ - this.parentHeight = parentHeight; - } - - public void setFontWidth(int width){ - fontWidth = width; - } - - public void setFontHeight(int height){ - fontHeight = height; - } - - public int getFontWidth(){ - return fontWidth; - } - - public int getFontHeight(){ - return fontHeight; - } - - public String getText(){ - return text; - } - - public void setText(String text){ - this.text = text; - } - - @Override - public void draw(int parentFramebufferPointer, int parentWidth, int parentHeight) { - widgetBuffer.bind(); - Globals.renderingEngine.setViewportSize(width, height); - - //monowidth for the moment - float charWidth = (float)fontWidth/(float)width; - float charHeight = (float)fontHeight/(float)height; - float charSpacing = (float)linePaddingHorizonal/(float)width; - float lineSpacing = (float)linePaddingVertical/(float)height; - - Model charModel = Globals.assetManager.fetchModel(AssetDataStrings.ASSET_STRING_BITMAP_FONT); - int verticalPosition = 0; - int horizontalPosition = 0; - int charPos = 0; - while(charPos < text.length()){ - char currentChar = text.charAt(charPos); - if(currentChar == '\n'){ - verticalPosition++; - horizontalPosition = 0; - } else { - - Vector3f characterPosition = new Vector3f(horizontalPosition * (charWidth + charSpacing),-verticalPosition * (charHeight + lineSpacing),0); - Vector3f characterDimensions = new Vector3f(charWidth,charHeight,0); - Vector3f bitMapPosition = FontUtils.getPositionOfCharacter(currentChar); - Vector3f bitMapDimension = FontUtils.getDimensionOfCharacter(currentChar); - - if(charModel != null && currentChar != ' '){ - charModel.pushUniformToMesh(AssetDataStrings.ASSET_STRING_BITMAP_FONT_MESH_NAME, "mPosition", characterPosition); - charModel.pushUniformToMesh(AssetDataStrings.ASSET_STRING_BITMAP_FONT_MESH_NAME, "mDimension", characterDimensions); - charModel.pushUniformToMesh(AssetDataStrings.ASSET_STRING_BITMAP_FONT_MESH_NAME, "tPosition", bitMapPosition); - charModel.pushUniformToMesh(AssetDataStrings.ASSET_STRING_BITMAP_FONT_MESH_NAME, "tDimension", bitMapDimension); - charModel.pushUniformToMesh(AssetDataStrings.ASSET_STRING_BITMAP_FONT_MESH_NAME, "color", color); - charModel.drawUI(); - } - horizontalPosition++; - } - charPos++; - } - - - //draw the previous texture to a quad - Globals.renderingEngine.bindFramebuffer(parentFramebufferPointer); - Globals.renderingEngine.setViewportSize(parentWidth, parentHeight); - - Model planeModel = Globals.assetManager.fetchModel(Globals.planeModelID); - planeModel.pushUniformToMesh("plane", "mPosition", boxPosition); - planeModel.pushUniformToMesh("plane", "mDimension", boxDimensions); - planeModel.pushUniformToMesh("plane", "tPosition", new Vector3f(0,0,0)); - planeModel.pushUniformToMesh("plane", "tDimension", new Vector3f(1,1,0)); - planeModel.meshes.get(0).setMaterial(customMat); - planeModel.drawUI(); - } - public int width = 1; public int height = 1; @@ -197,38 +42,215 @@ public class TextInput implements DrawableElement, FocusableElement { public boolean visible = false; + boolean focused = false; + FocusEventCallback onFocusCallback; + FocusEventCallback onLoseFocusCallback; + KeyboardEventCallback onKeyPressCallback; + + String text = ""; + int textPixelWidth = 0; + + float fontSize = 1.0f; + + List childrenElements = new LinkedList(); + + public TextInput(int x, int y, float fontSize){ + this.positionX = x; + this.positionY = y; + this.width = 0; + this.height = (int)(FontUtils.getFontHeight() * fontSize); + this.fontSize = fontSize; + } + + void generateLetters(){ + childrenElements.clear(); + int rollingOffset = 0; + for(int i = 0; i < text.length(); i++){ + char toDraw = text.charAt(i); + Vector3f bitMapDimension = FontUtils.getDimensionOfCharacterDiscrete(toDraw); + BitmapCharacter newLetter = new BitmapCharacter((int)(rollingOffset * fontSize) + positionX, positionY, (int)(bitMapDimension.x * fontSize), this.height, toDraw); + rollingOffset += (int)bitMapDimension.x; + childrenElements.add(newLetter); + } + } + + public void setText(String text){ + this.text = text; + textPixelWidth = 0; + for(int i = 0; i < text.length(); i++){ + Vector3f bitMapDimension = FontUtils.getDimensionOfCharacterDiscrete(text.charAt(i)); + textPixelWidth = textPixelWidth + (int)bitMapDimension.x; + } + generateLetters(); + } + + public void setColor(Vector3f color){ + for(BitmapCharacter character : childrenElements){ + character.setColor(color); + } + } + + public String getText(){ + return text; + } + + @Override + public void draw(int parentFramebufferPointer, int parentWidth, int parentHeight) { + for(DrawableElement child : childrenElements){ + child.draw(parentFramebufferPointer, parentWidth, parentHeight); + } + } + public int getWidth() { - return width; + int minX = -1; + int maxX = -1; + for(BitmapCharacter child : childrenElements){ + if(minX == -1){ + minX = child.getPositionX(); + } else if(child.getPositionX() < minX){ + minX = child.getPositionX(); + } + if(maxX == -1){ + maxX = child.getPositionX() + child.getWidth(); + } else if(child.getPositionX() + child.getWidth() > maxX){ + maxX = child.getPositionX() + child.getWidth(); + } + } + if(minX == -1){ + minX = 0; + } + if(maxX == -1){ + maxX = 0; + } + return maxX - minX; } public int getHeight() { - return height; + int minY = -1; + int maxY = -1; + for(BitmapCharacter child : childrenElements){ + if(minY == -1){ + minY = child.getPositionY(); + } else if(child.getPositionY() < minY){ + minY = child.getPositionY(); + } + if(maxY == -1){ + maxY = child.getPositionY() + child.getHeight(); + } else if(child.getPositionY() + child.getHeight() > maxY){ + maxY = child.getPositionY() + child.getHeight(); + } + } + if(minY == -1){ + minY = 0; + } + if(maxY == -1){ + maxY = 0; + } + return maxY - minY; } public int getPositionX() { - return positionX; + int minX = -1; + for(BitmapCharacter child : childrenElements){ + if(minX == -1){ + minX = child.getPositionX(); + } else if(child.getPositionX() < minX){ + minX = child.getPositionX(); + } + } + if(minX == -1){ + minX = 0; + } + return minX; } public int getPositionY() { - return positionY; + int minY = -1; + for(BitmapCharacter child : childrenElements){ + if(minY == -1){ + minY = child.getPositionY(); + } else if(child.getPositionY() < minY){ + minY = child.getPositionY(); + } + } + if(minY == -1){ + minY = 0; + } + return minY; } public boolean getVisible() { return visible; } + public void setWidth(int width) { + this.width = width; + } + + public void setHeight(int height) { + this.height = height; + } + + public void setPositionX(int posX) { + int deltaX = posX - this.positionX; + this.positionX = posX; + for(Element child : childrenElements){ + child.setPositionX(child.getPositionX() + deltaX); + } + } + + public void setPositionY(int posY) { + int deltaY = posY - this.positionY; + this.positionY = posY; + for(Element child : childrenElements){ + child.setPositionY(child.getPositionY() + deltaY); + } + } + public void setVisible(boolean draw) { this.visible = draw; } + + public void setParentWidth(int width){ + parentWidth = width; + } + + public void setParentHeight(int height){ + this.parentHeight = height; + } public boolean handleEvent(Event event){ boolean propagate = true; if(event instanceof FocusEvent){ - this.focused = ((FocusEvent)event).isFocused(); - if(this.focused && onFocusCallback != null){ - propagate = onFocusCallback.execute((FocusEvent)event); - } else if(!this.focused && onLoseFocusCallback != null){ - propagate = onLoseFocusCallback.execute((FocusEvent)event); + FocusEvent focusEvent = (FocusEvent)event; + if(focusEvent.isFocused()){ + if(this.onFocusCallback != null){ + this.onFocusCallback.execute(focusEvent); + } else { + this.setColor(new Vector3f(1,0,0)); + propagate = false; + } + } else { + if(this.onLoseFocusCallback != null){ + this.onLoseFocusCallback.execute(focusEvent); + } else { + this.setColor(new Vector3f(1,1,1)); + propagate = false; + } + } + } else if(event instanceof KeyboardEvent){ + KeyboardEvent keyEvent = (KeyboardEvent)event; + if(onKeyPressCallback != null){ + onKeyPressCallback.execute(keyEvent); + } else { + if(keyEvent.getKey().matches(Pattern.quote("bs"))){ + if(this.text.length() > 0){ + this.setText(this.text.substring(0, this.text.length() - 1)); + } + } else { + this.setText(this.text + keyEvent.getKey()); + } + propagate = false; } } return propagate; @@ -251,5 +273,11 @@ public class TextInput implements DrawableElement, FocusableElement { // TODO Auto-generated method stub onLoseFocusCallback = callback; } + + @Override + public void setOnPress(KeyboardEventCallback callback) { + // TODO Auto-generated method stub + onKeyPressCallback = callback; + } }