From 5b3aa8281748869ca0bb97bb69e505be2bc13435 Mon Sep 17 00:00:00 2001 From: Leonardo Date: Wed, 14 Jul 2021 15:08:10 +0200 Subject: [PATCH] Updated the image creation --- .../com/seibel/lod/objects/QuadTreeImage.java | 121 +++++++++--------- 1 file changed, 59 insertions(+), 62 deletions(-) diff --git a/src/main/java/com/seibel/lod/objects/QuadTreeImage.java b/src/main/java/com/seibel/lod/objects/QuadTreeImage.java index ffde537d4..ac6288fb8 100644 --- a/src/main/java/com/seibel/lod/objects/QuadTreeImage.java +++ b/src/main/java/com/seibel/lod/objects/QuadTreeImage.java @@ -81,16 +81,16 @@ public class QuadTreeImage extends JPanel { List> listOfList = new ArrayList<>(); OverworldBiomeSource biomeSource = new OverworldBiomeSource(MCVersion.v1_16_5, 1000); //EndBiomeSource biomeSource = new EndBiomeSource(MCVersion.v1_16_5, 1000); - int sizeOfTheWorld = 16; + int sizeOfTheWorld = 64; LodQuadTreeDimension dim = new LodQuadTreeDimension(null, null, sizeOfTheWorld); //SIMULATING A PLAYER MOVING, - int[] playerXs = {0,100,200,300,400,500}; - int[] playerZs = {0,100,200,300,400,500}; - for(int pos=0; pos<6; pos++) { - int playerX= playerXs[pos]; - int playerZ= playerZs[pos]; + int[] playerXs = {0, 100, 200, 300, 400, 500}; + int[] playerZs = {0, 100, 200, 300, 400, 500}; + for (int pos = 0; pos < 1; pos++) { + int playerX = playerXs[pos]; + int playerZ = playerZs[pos]; //int sizeOfTheWorld=512; //TRY THIS TO SEE A 250'000 BLOCK RENDER DISTANCE dim.move(Math.floorDiv(playerX, 512), Math.floorDiv(playerZ, 512)); @@ -106,46 +106,44 @@ public class QuadTreeImage extends JPanel { int[] distances = {100000, 8000, 4000, 2000, 1000, 500, 250, 100, 50, 25}; for (int i = 0; i <= (9 - 2); i++) { - for (int j = 0; j < 1; j++) { - List levelToGenerate = dim.getNodeToGenerate(playerX, playerZ, (byte) (9 - i), DistanceGenerationMode.SERVER, distances[i], 0); - //System.out.println(levelToGenerate); - for (LodQuadTree level : levelToGenerate) { - Color color; - int startX = level.getLodNodeData().startX; - int startZ = level.getLodNodeData().startZ; - int endX = level.getLodNodeData().endX; - int endZ = level.getLodNodeData().endZ; - int centerX = level.getLodNodeData().centerX; - int centerZ = level.getLodNodeData().centerZ; - int width = level.getLodNodeData().width; - byte otherLevel = LodQuadTreeNode.BLOCK_LEVEL; - int otherWidth = LodQuadTreeNode.BLOCK_WIDTH; + List levelToGenerate = dim.getNodeToGenerate(playerX, playerZ, (byte) (9 - i), DistanceGenerationMode.SERVER, distances[i], 0); + //System.out.println(levelToGenerate); + for (LodQuadTree level : levelToGenerate) { + Color color; + int startX = level.getLodNodeData().startX; + int startZ = level.getLodNodeData().startZ; + int endX = level.getLodNodeData().endX; + int endZ = level.getLodNodeData().endZ; + int centerX = level.getLodNodeData().centerX; + int centerZ = level.getLodNodeData().centerZ; + int width = level.getLodNodeData().width; + byte otherLevel = LodQuadTreeNode.BLOCK_LEVEL; + int otherWidth = LodQuadTreeNode.BLOCK_WIDTH; - List posXs = new ArrayList<>(); - List posZs = new ArrayList<>(); - if (level.getLodNodeData().level == 0) { - posXs.add(Math.floorDiv(startX, otherWidth)); - posZs.add(Math.floorDiv(startZ, otherWidth)); - } else { - posXs.add(Math.floorDiv(startX, otherWidth)); - posXs.add(Math.floorDiv(centerX + 1, otherWidth)); - posZs.add(Math.floorDiv(startZ, otherWidth)); - posZs.add(Math.floorDiv(centerZ + 1, otherWidth)); - } + List posXs = new ArrayList<>(); + List posZs = new ArrayList<>(); + if (level.getLodNodeData().level == 0) { + posXs.add(Math.floorDiv(startX, otherWidth)); + posZs.add(Math.floorDiv(startZ, otherWidth)); + } else { + posXs.add(Math.floorDiv(startX, otherWidth)); + posXs.add(Math.floorDiv(centerX + 1, otherWidth)); + posZs.add(Math.floorDiv(startZ, otherWidth)); + posZs.add(Math.floorDiv(centerZ + 1, otherWidth)); + } - //System.out.println(posXs); - //System.out.println(posZs); + //System.out.println(posXs); + //System.out.println(posZs); - for (Integer posXI : posXs) { - for (Integer posZI : posZs) { - int posX = posXI.intValue(); - int posZ = posZI.intValue(); - //System.out.println(posX + " " + posZ); - color = BiomeColorsUtils.getColorFromBiomeManual(biomeSource.getBiome(posX, 0, posZ)); - //color = BiomeColorsUtils.getColorFromIdCB(biomeSource.getBiome(posZ, 0, posX).getId()); - LodQuadTreeNode node = new LodQuadTreeNode(otherLevel, posX, posZ, new LodDataPoint(0, 0, color), DistanceGenerationMode.SERVER); - if (dim.addNode(node)) { - } + for (Integer posXI : posXs) { + for (Integer posZI : posZs) { + int posX = posXI.intValue(); + int posZ = posZI.intValue(); + //System.out.println(posX + " " + posZ); + color = BiomeColorsUtils.getColorFromBiomeManual(biomeSource.getBiome(posX, 0, posZ)); + //color = BiomeColorsUtils.getColorFromIdCB(biomeSource.getBiome(posZ, 0, posX).getId()); + LodQuadTreeNode node = new LodQuadTreeNode(otherLevel, posX, posZ, new LodDataPoint(0, 0, color), DistanceGenerationMode.SERVER); + if (dim.addNode(node)) { } } } @@ -158,27 +156,28 @@ public class QuadTreeImage extends JPanel { //complexityMask.add(DistanceGenerationMode.BIOME_ONLY_SIMULATE_HEIGHT); //complexityMask.add(DistanceGenerationMode.BIOME_ONLY); - Set complexityMask = LodQuadTreeDimension.FULL_COMPLEXITY_MASK; + + } + Set complexityMask = LodQuadTreeDimension.FULL_COMPLEXITY_MASK; List lodList = new ArrayList<>(); //The min and max distances should increase quadratically - lodList.addAll(dim.getNodeToRender(playerX,playerZ,(byte) 3, complexityMask, 250,0)); - lodList.addAll(dim.getNodeToRender(playerX,playerZ,(byte) 4, complexityMask,500,250)); - lodList.addAll(dim.getNodeToRender(playerX,playerZ,(byte) 5, complexityMask,1000,500)); - lodList.addAll(dim.getNodeToRender(playerX,playerZ,(byte) 6, complexityMask,2000,1000)); - lodList.addAll(dim.getNodeToRender(playerX,playerZ,(byte) 7, complexityMask,4000,2000)); - lodList.addAll(dim.getNodeToRender(playerX,playerZ,(byte) 8, complexityMask,8000,4000)); - lodList.addAll(dim.getNodeToRender(playerX,playerZ,(byte) 9, complexityMask,100000,8000)); + lodList.addAll(dim.getNodeToRender(playerX, playerZ, (byte) 3, complexityMask, 250, 0)); + lodList.addAll(dim.getNodeToRender(playerX, playerZ, (byte) 4, complexityMask, 500, 250)); + lodList.addAll(dim.getNodeToRender(playerX, playerZ, (byte) 5, complexityMask, 1000, 500)); + lodList.addAll(dim.getNodeToRender(playerX, playerZ, (byte) 6, complexityMask, 2000, 1000)); + lodList.addAll(dim.getNodeToRender(playerX, playerZ, (byte) 7, complexityMask, 4000, 2000)); + lodList.addAll(dim.getNodeToRender(playerX, playerZ, (byte) 8, complexityMask, 8000, 4000)); + lodList.addAll(dim.getNodeToRender(playerX, playerZ, (byte) 9, complexityMask, 10000000, 8000)); System.out.println(lodList.size()); - // List lodList = dim.getNodes(complexityMask, false, false); //USE THIS TO SEE AL THE LODS - listOfList.add(lodList); - } + // List lodList = dim.getNodes(complexityMask, false, false); //USE THIS TO SEE AL THE LODS + listOfList.add(lodList); } System.out.println("GETTING LOD FROM COORDINATE AFTER GENERETION"); - System.out.println(dim.getLodFromCoordinates(0,100, (byte) 1)); + System.out.println(dim.getLodFromCoordinates(0, 100, (byte) 1)); //FROM THIS POINT ON THE CODE JUST CREATE THE IMAGE int timerDelay = 200; @@ -189,7 +188,7 @@ public class QuadTreeImage extends JPanel { int zOffset = listOfList.stream().mapToInt(x -> x.stream().mapToInt(y -> y.startZ).min().getAsInt()).min().getAsInt(); int maxX = listOfList.stream().mapToInt(x -> x.stream().mapToInt(y -> y.startX).max().getAsInt()).min().getAsInt(); int maxZ = listOfList.stream().mapToInt(x -> x.stream().mapToInt(y -> y.startZ).max().getAsInt()).min().getAsInt(); - int maxSize = Math.max(maxX-xOffset,maxZ - zOffset)/512; + int maxSize = Math.max(maxX - xOffset, maxZ - zOffset) / 512; System.out.println(xOffset); System.out.println(zOffset); new Timer(timerDelay, new ActionListener() { @@ -200,13 +199,13 @@ public class QuadTreeImage extends JPanel { if (drawCount >= listOfList.size()) { drawCount = 0; } else { - if(drawCount==0) quadTreeImage.clearAll(); + if (drawCount == 0) quadTreeImage.clearAll(); final List myDrawables = new ArrayList<>(); - double amp = ((double) 3)/((double) sizeOfTheWorld); + double amp = ((double) 3) / ((double) maxSize); Collection lodList = listOfList.get(drawCount); for (LodQuadTreeNode data : lodList) { myDrawables.add(new MyDrawable(new Rectangle2D.Double( - ((data.startX - xOffset ) * amp), + ((data.startX - xOffset) * amp), ((data.startZ - zOffset) * amp), data.width * amp, data.width * amp), @@ -224,17 +223,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("ImgEnd" + drawCount+".png")); + ImageIO.write(img, "png", new File("ImgEnd" + drawCount + ".png")); } catch (IOException ioException) { ioException.printStackTrace(); } - */ drawCount++; } }