From f181d073a3af0fcf3c201f6b7e54652de0a84885 Mon Sep 17 00:00:00 2001 From: Morippi Date: Fri, 9 Jul 2021 17:56:44 +0200 Subject: [PATCH] fixed LodQuadTreeDimension --- .../lod/objects/quadTree/QuadTreeImage.java | 49 +++++++++++++------ .../com/seibel/lod/util/BiomeColorsUtils.java | 11 +++-- 2 files changed, 40 insertions(+), 20 deletions(-) diff --git a/src/main/java/com/seibel/lod/objects/quadTree/QuadTreeImage.java b/src/main/java/com/seibel/lod/objects/quadTree/QuadTreeImage.java index 3fa42a6fe..0929102de 100644 --- a/src/main/java/com/seibel/lod/objects/quadTree/QuadTreeImage.java +++ b/src/main/java/com/seibel/lod/objects/quadTree/QuadTreeImage.java @@ -21,6 +21,7 @@ import java.awt.geom.Rectangle2D; import java.awt.geom.RoundRectangle2D; import java.awt.image.BufferedImage; import java.io.File; +import java.io.IOException; import java.util.AbstractMap; import java.util.ArrayList; import java.util.Collection; @@ -34,7 +35,7 @@ import javax.swing.Timer; @SuppressWarnings("serial") public class QuadTreeImage extends JPanel { - private static final int PREF_W = 1024; + private static final int PREF_W = (int) 0.1*16*512; private static final int PREF_H = PREF_W; private List drawables = new ArrayList<>(); @@ -73,9 +74,9 @@ public class QuadTreeImage extends JPanel { } private static void createAndShowGui() { - int playerX = 1000; - int playerZ = 3000; - LodQuadTreeDimension dim = new LodQuadTreeDimension(null, null, 8); + int playerX = 8*512; + int playerZ = (8*512); + LodQuadTreeDimension dim = new LodQuadTreeDimension(null, null, 16); System.out.println(dim.getRegion(0, 0)); dim.move(playerX/512,playerZ/512); System.out.println(dim.getCenterX()); @@ -92,15 +93,15 @@ public class QuadTreeImage extends JPanel { frame.setVisible(true); List> listOfList = new ArrayList<>(); OverworldBiomeSource biomeSource = new OverworldBiomeSource(MCVersion.v1_16_5, 100); - for (int i = 0; i <= (9 - 0); i++) { + for (int i = 0; i <= (9 - 2); i++) { for (int j = 0; j < 1; j++) { int dist; if (i == 9) { - dist = 200; + dist = 30; } else { - dist = 200; + dist = 30; } - List levelToGenerate = dim.getNodeToGenerate(playerX, playerZ, (byte) (9 - i), (int) dist*(9-i), 0); + List levelToGenerate = dim.getNodeToGenerate(playerX, playerZ, (byte) (9 - i), (int) (dist*Math.pow(9-i,2.5)), 0); for (LodQuadTree level : levelToGenerate) { Color color; int startX = level.getLodNodeData().startX; @@ -129,15 +130,20 @@ public class QuadTreeImage extends JPanel { for (Integer posZI : posZs) { int posZ = posXI.intValue(); int posX = posZI.intValue(); - //color = BiomeColorsUtils.getColorFromBiomeManual(biomeSource.getBiome(posZ, 0, posX)); - color = BiomeColorsUtils.getColorFromIdCB(biomeSource.getBiome(posZ, 0, posX).getId()); + color = BiomeColorsUtils.getColorFromBiomeManual(biomeSource.getBiome(posZ, 0, posX)); + //color = BiomeColorsUtils.getColorFromIdCB(biomeSource.getBiome(posZ, 0, posX).getId()); LodNodeData node = new LodNodeData(otherLevel, posX, posZ, 0, 0, color, true); dim.addNode(node); } } } } - List lodList = dim.getNodeToRender(playerX,playerZ,(byte) 0, 10000,0); + List lodList = dim.getNodeToRender(playerX,playerZ,(byte) 8, 10000,4000); + lodList.addAll(dim.getNodeToRender(playerX,playerZ,(byte) 7, 4000,2000)); + lodList.addAll(dim.getNodeToRender(playerX,playerZ,(byte) 6, 2000,1000)); + lodList.addAll(dim.getNodeToRender(playerX,playerZ,(byte) 5, 1000,500)); + lodList.addAll(dim.getNodeToRender(playerX,playerZ,(byte) 4, 500,0)); + lodList.addAll(dim.getNodeToRender(playerX,playerZ,(byte) 3, 250,0)); //Collection lodList = dim.getNodes(false,false,false); // lodList.addAll(lodQuadTree.getNodeToRender(playerX, playerZ, (byte) 2, 100, 0)); // lodList.addAll(lodQuadTree.getNodeToRender(playerX, playerZ, (byte) 3, 200, 100)); @@ -147,11 +153,14 @@ public class QuadTreeImage extends JPanel { } - int timerDelay = 250; + int timerDelay = 5000; System.out.println("STARTING"); - System.out.println(listOfList.get(0).get(0).startX); System.out.println(dim.getWidth()); System.out.println(dim.getCenterX()); + int xOffset = listOfList.stream().mapToInt(x -> x.stream().mapToInt(y -> y.startX).min().getAsInt()).min().getAsInt(); + int zOffset = listOfList.stream().mapToInt(x -> x.stream().mapToInt(y -> y.startZ).min().getAsInt()).min().getAsInt(); + System.out.println(xOffset); + System.out.println(zOffset); new Timer(timerDelay, new ActionListener() { private int drawCount = 0; @@ -162,11 +171,10 @@ public class QuadTreeImage extends JPanel { } else { if(drawCount==0) quadTreeImage.clearAll(); final List myDrawables = new ArrayList<>(); - double amp = 1; - int xOffset = (dim.getCenterX() - (dim.getWidth()/2))*512; - int zOffset = (dim.getCenterZ() - (dim.getWidth()/2))*512; + double amp = 0.1; Collection lodList = listOfList.get(drawCount); for (LodNodeData data : lodList) { + System.out.println(); myDrawables.add(new MyDrawable(new Rectangle2D.Double( ((data.startX - xOffset ) * amp), ((data.startZ - zOffset) * amp), @@ -183,6 +191,15 @@ public class QuadTreeImage extends JPanel { for (int k = 0; k < myDrawables.size(); k++) { quadTreeImage.addMyDrawable(myDrawables.get(k)); } + BufferedImage img = new BufferedImage(frame.getWidth(), frame.getHeight(), BufferedImage.TYPE_INT_RGB); + Graphics2D g2d = img.createGraphics(); + frame.printAll(g2d); + g2d.dispose(); + try { + ImageIO.write(img, "png", new File("Img" + drawCount+".png")); + } catch (IOException ioException) { + ioException.printStackTrace(); + } drawCount++; } } diff --git a/src/main/java/com/seibel/lod/util/BiomeColorsUtils.java b/src/main/java/com/seibel/lod/util/BiomeColorsUtils.java index 3482404d2..5ab35491e 100644 --- a/src/main/java/com/seibel/lod/util/BiomeColorsUtils.java +++ b/src/main/java/com/seibel/lod/util/BiomeColorsUtils.java @@ -240,7 +240,7 @@ public class BiomeColorsUtils { switch(biome.getCategory()) { case BEACH: case DESERT: - color = new Color(65,85,40); + color = new Color(220,214,170); break; case EXTREME_HILLS: color = new Color(81,129,60); @@ -261,13 +261,14 @@ public class BiomeColorsUtils { color = new Color(123,105,109); break; case PLAINS: - color = new Color(65,85,40); + color = new Color(96,125,59); break; case OCEAN: case RIVER: - color = new Color(42,63,110); + color = new Color(54,73,229); + break; case SWAMP: - color = new Color(57,67,53); + color = new Color(83,86,67); break; case ICY: color = new Color(199,217,254); @@ -283,6 +284,8 @@ public class BiomeColorsUtils { color = new Color(188,103,39); break; case NONE: + color = new Color(96,125,59); + break; default: color = new Color(0,0,0,0); }