From fe8466c2f8cb2792f066e7358f60e9dc71dc3df5 Mon Sep 17 00:00:00 2001 From: austin Date: Wed, 20 Nov 2024 13:23:55 -0500 Subject: [PATCH] edge polygon gen fix + logo --- assets/Textures/engine/stormenginelogo1.png | Bin 0 -> 9626 bytes buildNumber.properties | 4 +- docs/src/progress/renderertodo.md | 4 + .../mainmenu/MenuGeneratorsTitleMenu.java | 115 ++++++----- .../java/electrosphere/engine/Globals.java | 1 + .../engine/assetmanager/AssetDataStrings.java | 1 + .../meshgen/TransvoxelModelGeneration.java | 179 ++++++++++-------- .../renderer/ui/elements/ImagePanel.java | 2 +- .../renderer/ui/elements/StandardElement.java | 10 + .../renderer/ui/elements/Window.java | 10 + .../renderer/ui/elementtypes/Element.java | 2 + 11 files changed, 198 insertions(+), 130 deletions(-) create mode 100644 assets/Textures/engine/stormenginelogo1.png diff --git a/assets/Textures/engine/stormenginelogo1.png b/assets/Textures/engine/stormenginelogo1.png new file mode 100644 index 0000000000000000000000000000000000000000..8d111f47806110add1a42875f974b3abb5a7980d GIT binary patch literal 9626 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

KO4brlV!iEML)#Xy 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 literal 0 HcmV?d00001 diff --git a/buildNumber.properties b/buildNumber.properties index 8394a28b..41399377 100644 --- a/buildNumber.properties +++ b/buildNumber.properties @@ -1,3 +1,3 @@ #maven.buildNumber.plugin properties file -#Sat Nov 16 20:18:53 EST 2024 -buildNumber=390 +#Wed Nov 20 13:22:48 EST 2024 +buildNumber=392 diff --git a/docs/src/progress/renderertodo.md b/docs/src/progress/renderertodo.md index 4e2e88b9..2f825f71 100644 --- a/docs/src/progress/renderertodo.md +++ b/docs/src/progress/renderertodo.md @@ -1086,6 +1086,10 @@ Optimize data passing from voxel rasterizer to model generation Vector pooling in transvoxel rasterizer Fix invalid normals from transvoxel rasterizer +(11/20/2024) +Design storm engine icon +Fix edge-polygon generation for invalid cases +Add engine logo to title menu # TODO 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 8fbbb0e0..959ed6c7 100644 --- a/src/main/java/electrosphere/client/ui/menu/mainmenu/MenuGeneratorsTitleMenu.java +++ b/src/main/java/electrosphere/client/ui/menu/mainmenu/MenuGeneratorsTitleMenu.java @@ -8,8 +8,10 @@ import electrosphere.engine.loadingthreads.LoadingThread; import electrosphere.engine.loadingthreads.LoadingThread.LoadingThreadType; import electrosphere.renderer.ui.elements.Button; import electrosphere.renderer.ui.elements.Div; +import electrosphere.renderer.ui.elements.ImagePanel; import electrosphere.renderer.ui.elements.Label; import electrosphere.renderer.ui.elementtypes.ContainerElement.YogaAlignment; +import electrosphere.renderer.ui.elementtypes.ContainerElement.YogaFlexDirection; import electrosphere.renderer.ui.elementtypes.ContainerElement.YogaJustification; import electrosphere.renderer.ui.elementtypes.Element; @@ -25,61 +27,88 @@ public class MenuGeneratorsTitleMenu { public static Element createTitleMenu(){ Div rVal = Div.createDiv(); //top-bottom - rVal.setJustifyContent(YogaJustification.Center); + rVal.setJustifyContent(YogaJustification.Between); //left-right rVal.setAlignItems(YogaAlignment.Center); - rVal.setAlignContent(YogaAlignment.Center); rVal.setFlexGrow(1.0f); + rVal.setFlexDirection(YogaFlexDirection.Column); - //label (title) - Label titleLabel = Label.createLabel("ORPG"); - rVal.addChild(titleLabel); - //button (multiplayer) - rVal.addChild(Button.createButtonCentered("Singleplayer", () -> { - WindowUtils.replaceMainMenuContents(MenuGenerators.createWorldSelectMenu()); - }).setOnClickAudio(AssetDataStrings.UI_TONE_BUTTON_TITLE)); + //main option panel + { + Div optionPanel = Div.createCol(); + optionPanel.setAlignItems(YogaAlignment.Center); + optionPanel.setJustifyContent(YogaJustification.Center); + optionPanel.setFlexGrow(1.0f); - //button (multiplayer) - rVal.addChild(Button.createButtonCentered("Multiplayer", () -> { - WindowUtils.replaceMainMenuContents(MenuGenerators.createMultiplayerMenu()); - }).setOnClickAudio(AssetDataStrings.UI_TONE_BUTTON_TITLE)); - //button (static level) - rVal.addChild(Button.createButtonCentered("Level Editor", () -> { - WindowUtils.replaceMainMenuContents(MenuGeneratorsLevelEditor.createLevelEditorTopMenu()); - }).setOnClickAudio(AssetDataStrings.UI_TONE_BUTTON_TITLE)); + //label (title) + Label titleLabel = Label.createLabel("ORPG"); + optionPanel.addChild(titleLabel); - //button (options) - rVal.addChild(Button.createButtonCentered("Options", () -> { - WindowUtils.replaceMainMenuContents(MenuGenerators.createOptionsMainMenu()); - }).setOnClickAudio(AssetDataStrings.UI_TONE_BUTTON_TITLE)); + //button (multiplayer) + optionPanel.addChild(Button.createButtonCentered("Singleplayer", () -> { + WindowUtils.replaceMainMenuContents(MenuGenerators.createWorldSelectMenu()); + }).setOnClickAudio(AssetDataStrings.UI_TONE_BUTTON_TITLE)); - //button (sp debug) - rVal.addChild(Button.createButtonCentered("Debug SP Quickstart", () -> { - 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 (multiplayer) + optionPanel.addChild(Button.createButtonCentered("Multiplayer", () -> { + WindowUtils.replaceMainMenuContents(MenuGenerators.createMultiplayerMenu()); + }).setOnClickAudio(AssetDataStrings.UI_TONE_BUTTON_TITLE)); - //button (sp debug) - rVal.addChild(Button.createButtonCentered("Load Test Generation Realm", () -> { - 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 (static level) + optionPanel.addChild(Button.createButtonCentered("Level Editor", () -> { + WindowUtils.replaceMainMenuContents(MenuGeneratorsLevelEditor.createLevelEditorTopMenu()); + }).setOnClickAudio(AssetDataStrings.UI_TONE_BUTTON_TITLE)); - //button (ui testing) - rVal.addChild(Button.createButtonCentered("UI Testing", () -> { - WindowUtils.replaceMainMenuContents(MenuGeneratorsUITesting.createUITestMenu()); - }).setOnClickAudio(AssetDataStrings.UI_TONE_BUTTON_TITLE)); + //button (options) + optionPanel.addChild(Button.createButtonCentered("Options", () -> { + WindowUtils.replaceMainMenuContents(MenuGenerators.createOptionsMainMenu()); + }).setOnClickAudio(AssetDataStrings.UI_TONE_BUTTON_TITLE)); - //button (Viewport Test) - rVal.addChild(Button.createButtonCentered("Viewport Test", () -> { - Globals.threadManager.start(new LoadingThread(LoadingThreadType.LOAD_VIEWPORT)); - }).setOnClickAudio(AssetDataStrings.UI_TONE_BUTTON_TITLE)); + //button (sp debug) + optionPanel.addChild(Button.createButtonCentered("Debug SP Quickstart", () -> { + 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 (sp debug) + optionPanel.addChild(Button.createButtonCentered("Load Test Generation Realm", () -> { + 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 (ui testing) + optionPanel.addChild(Button.createButtonCentered("UI Testing", () -> { + WindowUtils.replaceMainMenuContents(MenuGeneratorsUITesting.createUITestMenu()); + }).setOnClickAudio(AssetDataStrings.UI_TONE_BUTTON_TITLE)); + + //button (Viewport Test) + optionPanel.addChild(Button.createButtonCentered("Viewport Test", () -> { + Globals.threadManager.start(new LoadingThread(LoadingThreadType.LOAD_VIEWPORT)); + }).setOnClickAudio(AssetDataStrings.UI_TONE_BUTTON_TITLE)); + + + rVal.addChild(optionPanel); + } + + //footer + { + Div footer = Div.createRow(); + footer.setJustifyContent(YogaJustification.End); + footer.setWidthPercent(100.0f); + + ImagePanel engineLogoPanel = ImagePanel.createImagePanel(AssetDataStrings.UI_ENGINE_LOGO_1); + engineLogoPanel.setMinWidth(50); + engineLogoPanel.setMinHeight(50); + footer.addChild(engineLogoPanel); + + rVal.addChild(footer); + } return rVal; } diff --git a/src/main/java/electrosphere/engine/Globals.java b/src/main/java/electrosphere/engine/Globals.java index 19869c83..548e01d8 100644 --- a/src/main/java/electrosphere/engine/Globals.java +++ b/src/main/java/electrosphere/engine/Globals.java @@ -602,6 +602,7 @@ public class Globals { "Textures/ui/uiFrame1.png", "Textures/ui/uiFrame2.png", "Textures/ui/uiOutline1.png", + AssetDataStrings.UI_ENGINE_LOGO_1, "Textures/ui/circle.png", "Textures/ui/square.png", "Textures/color/transparent_green.png", diff --git a/src/main/java/electrosphere/engine/assetmanager/AssetDataStrings.java b/src/main/java/electrosphere/engine/assetmanager/AssetDataStrings.java index 1a734122..934311f5 100644 --- a/src/main/java/electrosphere/engine/assetmanager/AssetDataStrings.java +++ b/src/main/java/electrosphere/engine/assetmanager/AssetDataStrings.java @@ -21,6 +21,7 @@ public class AssetDataStrings { /** * UI textures */ + public static final String UI_ENGINE_LOGO_1 = "Textures/engine/stormenginelogo1.png"; public static final String UI_FRAME_TEXTURE_DEFAULT_1 = "Textures/ui/uiFrame1.png"; public static final String UI_FRAME_TEXTURE_DEFAULT_2 = "Textures/ui/uiFrame2.png"; diff --git a/src/main/java/electrosphere/renderer/meshgen/TransvoxelModelGeneration.java b/src/main/java/electrosphere/renderer/meshgen/TransvoxelModelGeneration.java index f65b6cd7..2de55180 100644 --- a/src/main/java/electrosphere/renderer/meshgen/TransvoxelModelGeneration.java +++ b/src/main/java/electrosphere/renderer/meshgen/TransvoxelModelGeneration.java @@ -767,6 +767,11 @@ public class TransvoxelModelGeneration { float firstSample = TransvoxelModelGeneration.getTransvoxelSampleValue(transitionCell.simpleFaceValues,transitionCell.complexFaceValues,firstCornerSampleIndex); float secondSample = TransvoxelModelGeneration.getTransvoxelSampleValue(transitionCell.simpleFaceValues,transitionCell.complexFaceValues,secondCornerSampleIndex); + //skip if it's 0-0 or 0-negative number + if(firstSample <= 0 && secondSample <= 0){ + continue; + } + // //Sample check -- we should never be interpolating between two samples of 0 value if(firstSample < 0 && secondSample < 0){ @@ -834,6 +839,12 @@ public class TransvoxelModelGeneration { Vector3f vert1 = vertList[triangleData.vertexIndex[i+1]]; Vector3f vert2 = vertList[triangleData.vertexIndex[i+2]]; + //the verts can be zero if the samples are 0 and a negative number + //in this case, we don't want to generate triangles + if(vert0 == null || vert1 == null || vert2 == null){ + continue; + } + LoggerInterface.loggerRenderer.DEBUG(vert0 + ""); LoggerInterface.loggerRenderer.DEBUG(vert1 + ""); LoggerInterface.loggerRenderer.DEBUG(vert2 + ""); @@ -1794,92 +1805,92 @@ public class TransvoxelModelGeneration { //xn-zn edge - if(chunkData.xNegativeEdgeIso != null && chunkData.zNegativeEdgeIso != null){ - int x = 0; - int z = 0; - int edgeLength = chunkWidth - (chunkData.yNegativeEdgeIso != null ? 1 : 0) - (chunkData.yPositiveEdgeIso != null ? 1 : 0); - int startIndex = 0 + (chunkData.yNegativeEdgeIso != null ? 1 : 0); - for(int i = startIndex; i < edgeLength - 1; i++){ - int y = i; - // - //Generate the x-side transition cell - // - currentTransitionCell.setValues( - //complex face vertex coordinates - new Vector3f(x,y,z), new Vector3f(x,y+TRANSITION_CELL_WIDTH,z), new Vector3f(x,y+1,z), - new Vector3f(x,y,z+TRANSITION_CELL_WIDTH), new Vector3f(x,y+TRANSITION_CELL_WIDTH,z+TRANSITION_CELL_WIDTH), new Vector3f(x,y+1,z+TRANSITION_CELL_WIDTH), - new Vector3f(x,y,z+1), new Vector3f(x,y+TRANSITION_CELL_WIDTH,z+1), new Vector3f(x,y+1,z+1), - //simple face vertex coordinates - new Vector3f(x+TRANSITION_CELL_WIDTH,y,z+TRANSITION_CELL_WIDTH), new Vector3f(x+TRANSITION_CELL_WIDTH,y+1,z+TRANSITION_CELL_WIDTH), - new Vector3f(x+TRANSITION_CELL_WIDTH,y,z+1), new Vector3f(x+TRANSITION_CELL_WIDTH,y+1,z+1), - //complex face iso values - chunkData.xNegativeEdgeIso[(y+0)*2+0][(z+0)*2+0], chunkData.xNegativeEdgeIso[(y+0)*2+1][(z+0)*2+0], chunkData.xNegativeEdgeIso[(y+1)*2+0][(z+0)*2+0], - chunkData.xNegativeEdgeIso[(y+0)*2+0][(z+0)*2+1], chunkData.xNegativeEdgeIso[(y+0)*2+1][(z+0)*2+1], chunkData.xNegativeEdgeIso[(y+1)*2+0][(z+0)*2+1], - chunkData.xNegativeEdgeIso[(y+0)*2+0][(z+1)*2+0], chunkData.xNegativeEdgeIso[(y+0)*2+1][(z+1)*2+0], chunkData.xNegativeEdgeIso[(y+1)*2+0][(z+1)*2+0], - //simple face iso values - chunkData.xNegativeEdgeIso[(y+0)*2+0][(z+0)*2+0], chunkData.xNegativeEdgeIso[(y+1)*2+0][(z+0)*2+0], - chunkData.xNegativeEdgeIso[(y+0)*2+0][(z+1)*2+0], chunkData.xNegativeEdgeIso[(y+1)*2+0][(z+1)*2+0], - //complex face texture atlas values - chunkData.xNegativeEdgeAtlas[(y+0)*2+0][(z+0)*2+0], chunkData.xNegativeEdgeAtlas[(y+0)*2+1][(z+0)*2+0], chunkData.xNegativeEdgeAtlas[(y+1)*2+0][(z+0)*2+0], - chunkData.xNegativeEdgeAtlas[(y+0)*2+0][(z+0)*2+1], chunkData.xNegativeEdgeAtlas[(y+0)*2+1][(z+0)*2+1], chunkData.xNegativeEdgeAtlas[(y+1)*2+0][(z+0)*2+1], - chunkData.xNegativeEdgeAtlas[(y+0)*2+0][(z+1)*2+0], chunkData.xNegativeEdgeAtlas[(y+0)*2+1][(z+1)*2+0], chunkData.xNegativeEdgeAtlas[(y+1)*2+0][(z+1)*2+0], - //simple face texture atlas values - chunkData.xNegativeEdgeAtlas[(y+0)*2+0][(z+0)*2+0], chunkData.xNegativeEdgeAtlas[(y+1)*2+0][(z+0)*2+0], - chunkData.xNegativeEdgeAtlas[(y+0)*2+0][(z+1)*2+0], chunkData.xNegativeEdgeAtlas[(y+1)*2+0][(z+1)*2+0] - ); - TransvoxelModelGeneration.polygonizeTransition(currentTransitionCell, TerrainChunkModelGeneration.MIN_ISO_VALUE, triangles, samplerTriangles, vertMap, verts, normals, trianglesSharingVert, false); + // if(chunkData.xNegativeEdgeIso != null && chunkData.zNegativeEdgeIso != null){ + // int x = 0; + // int z = 0; + // int edgeLength = chunkWidth - (chunkData.yNegativeEdgeIso != null ? 1 : 0) - (chunkData.yPositiveEdgeIso != null ? 1 : 0); + // int startIndex = 0 + (chunkData.yNegativeEdgeIso != null ? 1 : 0); + // for(int i = startIndex; i < edgeLength - 1; i++){ + // int y = i; + // // + // //Generate the x-side transition cell + // // + // currentTransitionCell.setValues( + // //complex face vertex coordinates + // new Vector3f(x,y,z), new Vector3f(x,y+TRANSITION_CELL_WIDTH,z), new Vector3f(x,y+1,z), + // new Vector3f(x,y,z+TRANSITION_CELL_WIDTH), new Vector3f(x,y+TRANSITION_CELL_WIDTH,z+TRANSITION_CELL_WIDTH), new Vector3f(x,y+1,z+TRANSITION_CELL_WIDTH), + // new Vector3f(x,y,z+1), new Vector3f(x,y+TRANSITION_CELL_WIDTH,z+1), new Vector3f(x,y+1,z+1), + // //simple face vertex coordinates + // new Vector3f(x+TRANSITION_CELL_WIDTH,y,z+TRANSITION_CELL_WIDTH), new Vector3f(x+TRANSITION_CELL_WIDTH,y+1,z+TRANSITION_CELL_WIDTH), + // new Vector3f(x+TRANSITION_CELL_WIDTH,y,z+1), new Vector3f(x+TRANSITION_CELL_WIDTH,y+1,z+1), + // //complex face iso values + // chunkData.xNegativeEdgeIso[(y+0)*2+0][(z+0)*2+0], chunkData.xNegativeEdgeIso[(y+0)*2+1][(z+0)*2+0], chunkData.xNegativeEdgeIso[(y+1)*2+0][(z+0)*2+0], + // chunkData.xNegativeEdgeIso[(y+0)*2+0][(z+0)*2+1], chunkData.xNegativeEdgeIso[(y+0)*2+1][(z+0)*2+1], chunkData.xNegativeEdgeIso[(y+1)*2+0][(z+0)*2+1], + // chunkData.xNegativeEdgeIso[(y+0)*2+0][(z+1)*2+0], chunkData.xNegativeEdgeIso[(y+0)*2+1][(z+1)*2+0], chunkData.xNegativeEdgeIso[(y+1)*2+0][(z+1)*2+0], + // //simple face iso values + // chunkData.xNegativeEdgeIso[(y+0)*2+0][(z+0)*2+0], chunkData.xNegativeEdgeIso[(y+1)*2+0][(z+0)*2+0], + // chunkData.xNegativeEdgeIso[(y+0)*2+0][(z+1)*2+0], chunkData.xNegativeEdgeIso[(y+1)*2+0][(z+1)*2+0], + // //complex face texture atlas values + // chunkData.xNegativeEdgeAtlas[(y+0)*2+0][(z+0)*2+0], chunkData.xNegativeEdgeAtlas[(y+0)*2+1][(z+0)*2+0], chunkData.xNegativeEdgeAtlas[(y+1)*2+0][(z+0)*2+0], + // chunkData.xNegativeEdgeAtlas[(y+0)*2+0][(z+0)*2+1], chunkData.xNegativeEdgeAtlas[(y+0)*2+1][(z+0)*2+1], chunkData.xNegativeEdgeAtlas[(y+1)*2+0][(z+0)*2+1], + // chunkData.xNegativeEdgeAtlas[(y+0)*2+0][(z+1)*2+0], chunkData.xNegativeEdgeAtlas[(y+0)*2+1][(z+1)*2+0], chunkData.xNegativeEdgeAtlas[(y+1)*2+0][(z+1)*2+0], + // //simple face texture atlas values + // chunkData.xNegativeEdgeAtlas[(y+0)*2+0][(z+0)*2+0], chunkData.xNegativeEdgeAtlas[(y+1)*2+0][(z+0)*2+0], + // chunkData.xNegativeEdgeAtlas[(y+0)*2+0][(z+1)*2+0], chunkData.xNegativeEdgeAtlas[(y+1)*2+0][(z+1)*2+0] + // ); + // TransvoxelModelGeneration.polygonizeTransition(currentTransitionCell, TerrainChunkModelGeneration.MIN_ISO_VALUE, triangles, samplerTriangles, vertMap, verts, normals, trianglesSharingVert, false); - // - //Generate the z-side transition cell - // - currentTransitionCell.setValues( - //complex face vertex coordinates - new Vector3f(x+0, y,z), new Vector3f(x+0, y+TRANSITION_CELL_WIDTH,z), new Vector3f(x+0, y+1,z), - new Vector3f(x+TRANSITION_CELL_WIDTH,y,z), new Vector3f(x+TRANSITION_CELL_WIDTH,y+TRANSITION_CELL_WIDTH,z), new Vector3f(x+TRANSITION_CELL_WIDTH,y+1,z), - new Vector3f(x+1, y,z), new Vector3f(x+1, y+TRANSITION_CELL_WIDTH,z), new Vector3f(x+1, y+1,z), - //simple face vertex coordinates - new Vector3f(x+TRANSITION_CELL_WIDTH,y,z+TRANSITION_CELL_WIDTH), new Vector3f(x+TRANSITION_CELL_WIDTH,y+1,z+TRANSITION_CELL_WIDTH), - new Vector3f(x+1,y,z+TRANSITION_CELL_WIDTH), new Vector3f(x+1,y+1,z+TRANSITION_CELL_WIDTH), - //complex face iso values - chunkData.zNegativeEdgeIso[(x+0)*2+0][(y+0)*2+0], chunkData.zNegativeEdgeIso[(x+0)*2+0][(y+0)*2+1], chunkData.zNegativeEdgeIso[(x+0)*2+0][(y+1)*2+0], - chunkData.zNegativeEdgeIso[(x+0)*2+1][(y+0)*2+0], chunkData.zNegativeEdgeIso[(x+0)*2+1][(y+0)*2+1], chunkData.zNegativeEdgeIso[(x+0)*2+1][(y+1)*2+0], - chunkData.zNegativeEdgeIso[(x+1)*2+0][(y+0)*2+0], chunkData.zNegativeEdgeIso[(x+1)*2+0][(y+0)*2+1], chunkData.zNegativeEdgeIso[(x+1)*2+0][(y+1)*2+0], - //simple face iso values - chunkData.zNegativeEdgeIso[(x+0)*2+0][(y+0)*2+0], chunkData.zNegativeEdgeIso[(x+0)*2+0][(y+1)*2+0], - chunkData.zNegativeEdgeIso[(x+1)*2+0][(y+0)*2+0], chunkData.zNegativeEdgeIso[(x+1)*2+0][(y+1)*2+0], - //complex face texture atlas values - chunkData.zNegativeEdgeAtlas[(x+0)*2+0][(y+0)*2+0], chunkData.zNegativeEdgeAtlas[(x+0)*2+0][(y+0)*2+1], chunkData.zNegativeEdgeAtlas[(x+0)*2+0][(y+1)*2+0], - chunkData.zNegativeEdgeAtlas[(x+0)*2+1][(y+0)*2+0], chunkData.zNegativeEdgeAtlas[(x+0)*2+1][(y+0)*2+1], chunkData.zNegativeEdgeAtlas[(x+0)*2+1][(y+1)*2+0], - chunkData.zNegativeEdgeAtlas[(x+1)*2+0][(y+0)*2+0], chunkData.zNegativeEdgeAtlas[(x+1)*2+0][(y+0)*2+1], chunkData.zNegativeEdgeAtlas[(x+1)*2+0][(y+1)*2+0], - //simple face texture atlas values - chunkData.zNegativeEdgeAtlas[(x+0)*2+0][(y+0)*2+0], chunkData.zNegativeEdgeAtlas[(x+0)*2+0][(y+1)*2+0], - chunkData.zNegativeEdgeAtlas[(x+1)*2+0][(y+0)*2+0], chunkData.zNegativeEdgeAtlas[(x+1)*2+0][(y+1)*2+0] - ); - TransvoxelModelGeneration.polygonizeTransition(currentTransitionCell, TerrainChunkModelGeneration.MIN_ISO_VALUE, triangles, samplerTriangles, vertMap, verts, normals, trianglesSharingVert, true); + // // + // //Generate the z-side transition cell + // // + // currentTransitionCell.setValues( + // //complex face vertex coordinates + // new Vector3f(x+0, y,z), new Vector3f(x+0, y+TRANSITION_CELL_WIDTH,z), new Vector3f(x+0, y+1,z), + // new Vector3f(x+TRANSITION_CELL_WIDTH,y,z), new Vector3f(x+TRANSITION_CELL_WIDTH,y+TRANSITION_CELL_WIDTH,z), new Vector3f(x+TRANSITION_CELL_WIDTH,y+1,z), + // new Vector3f(x+1, y,z), new Vector3f(x+1, y+TRANSITION_CELL_WIDTH,z), new Vector3f(x+1, y+1,z), + // //simple face vertex coordinates + // new Vector3f(x+TRANSITION_CELL_WIDTH,y,z+TRANSITION_CELL_WIDTH), new Vector3f(x+TRANSITION_CELL_WIDTH,y+1,z+TRANSITION_CELL_WIDTH), + // new Vector3f(x+1,y,z+TRANSITION_CELL_WIDTH), new Vector3f(x+1,y+1,z+TRANSITION_CELL_WIDTH), + // //complex face iso values + // chunkData.zNegativeEdgeIso[(x+0)*2+0][(y+0)*2+0], chunkData.zNegativeEdgeIso[(x+0)*2+0][(y+0)*2+1], chunkData.zNegativeEdgeIso[(x+0)*2+0][(y+1)*2+0], + // chunkData.zNegativeEdgeIso[(x+0)*2+1][(y+0)*2+0], chunkData.zNegativeEdgeIso[(x+0)*2+1][(y+0)*2+1], chunkData.zNegativeEdgeIso[(x+0)*2+1][(y+1)*2+0], + // chunkData.zNegativeEdgeIso[(x+1)*2+0][(y+0)*2+0], chunkData.zNegativeEdgeIso[(x+1)*2+0][(y+0)*2+1], chunkData.zNegativeEdgeIso[(x+1)*2+0][(y+1)*2+0], + // //simple face iso values + // chunkData.zNegativeEdgeIso[(x+0)*2+0][(y+0)*2+0], chunkData.zNegativeEdgeIso[(x+0)*2+0][(y+1)*2+0], + // chunkData.zNegativeEdgeIso[(x+1)*2+0][(y+0)*2+0], chunkData.zNegativeEdgeIso[(x+1)*2+0][(y+1)*2+0], + // //complex face texture atlas values + // chunkData.zNegativeEdgeAtlas[(x+0)*2+0][(y+0)*2+0], chunkData.zNegativeEdgeAtlas[(x+0)*2+0][(y+0)*2+1], chunkData.zNegativeEdgeAtlas[(x+0)*2+0][(y+1)*2+0], + // chunkData.zNegativeEdgeAtlas[(x+0)*2+1][(y+0)*2+0], chunkData.zNegativeEdgeAtlas[(x+0)*2+1][(y+0)*2+1], chunkData.zNegativeEdgeAtlas[(x+0)*2+1][(y+1)*2+0], + // chunkData.zNegativeEdgeAtlas[(x+1)*2+0][(y+0)*2+0], chunkData.zNegativeEdgeAtlas[(x+1)*2+0][(y+0)*2+1], chunkData.zNegativeEdgeAtlas[(x+1)*2+0][(y+1)*2+0], + // //simple face texture atlas values + // chunkData.zNegativeEdgeAtlas[(x+0)*2+0][(y+0)*2+0], chunkData.zNegativeEdgeAtlas[(x+0)*2+0][(y+1)*2+0], + // chunkData.zNegativeEdgeAtlas[(x+1)*2+0][(y+0)*2+0], chunkData.zNegativeEdgeAtlas[(x+1)*2+0][(y+1)*2+0] + // ); + // TransvoxelModelGeneration.polygonizeTransition(currentTransitionCell, TerrainChunkModelGeneration.MIN_ISO_VALUE, triangles, samplerTriangles, vertMap, verts, normals, trianglesSharingVert, true); - // - //Generate the normal cell with half width - // - vecPool[0].set(x+TRANSITION_CELL_WIDTH,y+0,z+TRANSITION_CELL_WIDTH); - vecPool[1].set(x+TRANSITION_CELL_WIDTH,y+0,z+1); - vecPool[2].set(x+1,y+0,z+1); - vecPool[3].set(x+1,y+0,z+TRANSITION_CELL_WIDTH); - vecPool[4].set(x+TRANSITION_CELL_WIDTH,y+1,z+TRANSITION_CELL_WIDTH); - vecPool[5].set(x+TRANSITION_CELL_WIDTH,y+1,z+1); - vecPool[6].set(x+1,y+1,z+1); - vecPool[7].set(x+1,y+1,z+TRANSITION_CELL_WIDTH); - currentCell.setValues( - // new Vector3f(x+TRANSITION_CELL_WIDTH,y+0,z+TRANSITION_CELL_WIDTH), new Vector3f(x+TRANSITION_CELL_WIDTH,y+0,z+1), new Vector3f(x+1,y+0,z+1), new Vector3f(x+1,y+0,z+TRANSITION_CELL_WIDTH), - // new Vector3f(x+TRANSITION_CELL_WIDTH,y+1,z+TRANSITION_CELL_WIDTH), new Vector3f(x+TRANSITION_CELL_WIDTH,y+1,z+1), new Vector3f(x+1,y+1,z+1), new Vector3f(x+1,y+1,z+TRANSITION_CELL_WIDTH), - chunkData.xNegativeEdgeIso[(y+0)*2+0][(z+0)*2+0], chunkData.xNegativeEdgeIso[(y+0)*2+0][(z+1)*2+0], chunkData.terrainGrid[x+1][y+0][z+1], chunkData.terrainGrid[x+1][y+0][z+0], - chunkData.xNegativeEdgeIso[(y+1)*2+0][(z+0)*2+0], chunkData.xNegativeEdgeIso[(y+1)*2+0][(z+1)*2+0], chunkData.terrainGrid[x+1][y+1][z+1], chunkData.terrainGrid[x+1][y+1][z+0], - chunkData.xNegativeEdgeAtlas[(y+0)*2+0][(z+0)*2+0], chunkData.xNegativeEdgeAtlas[(y+0)*2+0][(z+1)*2+0], chunkData.textureGrid[x+1][y+0][z+1], chunkData.textureGrid[x+1][y+0][z+0], - chunkData.xNegativeEdgeAtlas[(y+1)*2+0][(z+0)*2+0], chunkData.xNegativeEdgeAtlas[(y+1)*2+0][(z+1)*2+0], chunkData.textureGrid[x+1][y+1][z+1], chunkData.textureGrid[x+1][y+1][z+0] - ); - //polygonize the current gridcell - TransvoxelModelGeneration.polygonize(currentCell, TerrainChunkModelGeneration.MIN_ISO_VALUE, triangles, samplerTriangles, vertMap, verts, normals, trianglesSharingVert, true); - } - } + // // + // //Generate the normal cell with half width + // // + // vecPool[0].set(x+TRANSITION_CELL_WIDTH,y+0,z+TRANSITION_CELL_WIDTH); + // vecPool[1].set(x+TRANSITION_CELL_WIDTH,y+0,z+1); + // vecPool[2].set(x+1,y+0,z+1); + // vecPool[3].set(x+1,y+0,z+TRANSITION_CELL_WIDTH); + // vecPool[4].set(x+TRANSITION_CELL_WIDTH,y+1,z+TRANSITION_CELL_WIDTH); + // vecPool[5].set(x+TRANSITION_CELL_WIDTH,y+1,z+1); + // vecPool[6].set(x+1,y+1,z+1); + // vecPool[7].set(x+1,y+1,z+TRANSITION_CELL_WIDTH); + // currentCell.setValues( + // // new Vector3f(x+TRANSITION_CELL_WIDTH,y+0,z+TRANSITION_CELL_WIDTH), new Vector3f(x+TRANSITION_CELL_WIDTH,y+0,z+1), new Vector3f(x+1,y+0,z+1), new Vector3f(x+1,y+0,z+TRANSITION_CELL_WIDTH), + // // new Vector3f(x+TRANSITION_CELL_WIDTH,y+1,z+TRANSITION_CELL_WIDTH), new Vector3f(x+TRANSITION_CELL_WIDTH,y+1,z+1), new Vector3f(x+1,y+1,z+1), new Vector3f(x+1,y+1,z+TRANSITION_CELL_WIDTH), + // chunkData.xNegativeEdgeIso[(y+0)*2+0][(z+0)*2+0], chunkData.xNegativeEdgeIso[(y+0)*2+0][(z+1)*2+0], chunkData.terrainGrid[x+1][y+0][z+1], chunkData.terrainGrid[x+1][y+0][z+0], + // chunkData.xNegativeEdgeIso[(y+1)*2+0][(z+0)*2+0], chunkData.xNegativeEdgeIso[(y+1)*2+0][(z+1)*2+0], chunkData.terrainGrid[x+1][y+1][z+1], chunkData.terrainGrid[x+1][y+1][z+0], + // chunkData.xNegativeEdgeAtlas[(y+0)*2+0][(z+0)*2+0], chunkData.xNegativeEdgeAtlas[(y+0)*2+0][(z+1)*2+0], chunkData.textureGrid[x+1][y+0][z+1], chunkData.textureGrid[x+1][y+0][z+0], + // chunkData.xNegativeEdgeAtlas[(y+1)*2+0][(z+0)*2+0], chunkData.xNegativeEdgeAtlas[(y+1)*2+0][(z+1)*2+0], chunkData.textureGrid[x+1][y+1][z+1], chunkData.textureGrid[x+1][y+1][z+0] + // ); + // //polygonize the current gridcell + // TransvoxelModelGeneration.polygonize(currentCell, TerrainChunkModelGeneration.MIN_ISO_VALUE, triangles, samplerTriangles, vertMap, verts, normals, trianglesSharingVert, true); + // } + // } if (verts.size() != normals.size()){ diff --git a/src/main/java/electrosphere/renderer/ui/elements/ImagePanel.java b/src/main/java/electrosphere/renderer/ui/elements/ImagePanel.java index db27febd..ca620dec 100644 --- a/src/main/java/electrosphere/renderer/ui/elements/ImagePanel.java +++ b/src/main/java/electrosphere/renderer/ui/elements/ImagePanel.java @@ -76,7 +76,7 @@ public class ImagePanel extends StandardElement implements DrawableElement, Drag if(texture != null){ customMat.setTexturePointer(texture.getTexturePointer()); hasLoadedTexture = true; - } else { + } else if(Globals.assetManager.fetchTexture(Globals.blackTexture) != null) { customMat.setTexturePointer(Globals.assetManager.fetchTexture(Globals.blackTexture).getTexturePointer()); } } diff --git a/src/main/java/electrosphere/renderer/ui/elements/StandardElement.java b/src/main/java/electrosphere/renderer/ui/elements/StandardElement.java index 64f51360..6b4a4018 100644 --- a/src/main/java/electrosphere/renderer/ui/elements/StandardElement.java +++ b/src/main/java/electrosphere/renderer/ui/elements/StandardElement.java @@ -81,11 +81,21 @@ public class StandardElement implements Element { Yoga.YGNodeStyleSetWidth(this.yogaNode, width); } + @Override + public void setWidthPercent(float width) { + Yoga.YGNodeStyleSetWidthPercent(yogaNode, width); + } + @Override public void setHeight(int height) { Yoga.YGNodeStyleSetHeight(this.yogaNode, height); } + @Override + public void setHeightPercent(float height) { + Yoga.YGNodeStyleSetHeightPercent(yogaNode, height); + } + @Override public void setPositionX(int posX) { Yoga.YGNodeStyleSetPosition(this.yogaNode, Yoga.YGEdgeLeft, posX); diff --git a/src/main/java/electrosphere/renderer/ui/elements/Window.java b/src/main/java/electrosphere/renderer/ui/elements/Window.java index 92373626..03cc66f4 100644 --- a/src/main/java/electrosphere/renderer/ui/elements/Window.java +++ b/src/main/java/electrosphere/renderer/ui/elements/Window.java @@ -292,6 +292,11 @@ public class Window implements DrawableElement, ContainerElement, NavigableEleme this.width = width; Yoga.YGNodeStyleSetWidth(this.yogaNode, width); } + + @Override + public void setWidthPercent(float width) { + Yoga.YGNodeStyleSetWidthPercent(yogaNode, width); + } @Override public void setHeight(int height){ @@ -299,6 +304,11 @@ public class Window implements DrawableElement, ContainerElement, NavigableEleme Yoga.YGNodeStyleSetHeight(this.yogaNode, height); } + @Override + public void setHeightPercent(float height) { + Yoga.YGNodeStyleSetHeightPercent(yogaNode, height); + } + @Override public void setMaxWidth(int width) { Yoga.YGNodeStyleSetMaxWidth(yogaNode, width); diff --git a/src/main/java/electrosphere/renderer/ui/elementtypes/Element.java b/src/main/java/electrosphere/renderer/ui/elementtypes/Element.java index 0af9f69a..7791b341 100644 --- a/src/main/java/electrosphere/renderer/ui/elementtypes/Element.java +++ b/src/main/java/electrosphere/renderer/ui/elementtypes/Element.java @@ -14,7 +14,9 @@ public interface Element { public int getWidth(); public int getHeight(); public void setWidth(int width); + public void setWidthPercent(float width); public void setHeight(int height); + public void setHeightPercent(float height); public void setMaxWidth(int width); public void setMaxWidthPercent(float percent); public void setMaxHeight(int height);