From 2b5b0234721de23c5507e3698bac0f3081e8d11c Mon Sep 17 00:00:00 2001 From: Morippi Date: Fri, 9 Jul 2021 13:33:11 +0200 Subject: [PATCH] fixed LodQuadTreeDimension --- .../quadTree/LodQuadTreeDimension.java | 28 +++- .../lod/objects/quadTree/QuadTreeImage.java | 133 ++++++++---------- 2 files changed, 83 insertions(+), 78 deletions(-) diff --git a/src/main/java/com/seibel/lod/objects/quadTree/LodQuadTreeDimension.java b/src/main/java/com/seibel/lod/objects/quadTree/LodQuadTreeDimension.java index ce828a802..dc4c980a3 100644 --- a/src/main/java/com/seibel/lod/objects/quadTree/LodQuadTreeDimension.java +++ b/src/main/java/com/seibel/lod/objects/quadTree/LodQuadTreeDimension.java @@ -35,6 +35,7 @@ public class LodQuadTreeDimension { dimension = newDimension; width = newMaxWidth; + /* try { Minecraft mc = Minecraft.getInstance(); @@ -60,12 +61,13 @@ public class LodQuadTreeDimension { } fileHandler = new LodQuadTreeDimensionFileHandler(saveDir, this); + } catch(IOException e) { // the file handler wasn't able to be created // we won't be able to read or write any files - } + } */ regions = new LodQuadTree[width][width]; @@ -231,7 +233,7 @@ public class LodQuadTreeDimension { /** *this method create all the regions that are null */ - public void initializeNullRegions(LodNodeData lodNodeData){ + public void initializeNullRegions(){ int n = regions.length; int xIndex; int zIndex; @@ -278,11 +280,14 @@ public class LodQuadTreeDimension { region = new LodQuadTree(pos.x, pos.z); setRegion(region); } - + System.out.println("Adding this node"); + System.out.println(lodNodeData); + System.out.println("to"); + System.out.println(region); region.setNodeAtLowerLevel(lodNodeData, true); // don't save empty place holders to disk - if (!lodNodeData.real && fileHandler != null) + if (lodNodeData.real && fileHandler != null) { // mark the region as dirty so it will be saved to disk int xIndex = (pos.x - centerX) + halfWidth; @@ -347,6 +352,21 @@ public class LodQuadTreeDimension { return listOfQuadTree.stream().map(entry -> entry.getKey()).collect(Collectors.toList()); } + /** + * getNodes + * @return list of quadTrees + */ + public List getNodes(boolean getOnlyReal, boolean getOnlyDirty, boolean getOnlyLeaf){ + int n = regions.length; + List listOfNodes = new ArrayList<>(); + for(int i=0; i lodQuadTreeList = new ArrayList<>(); - lodQuadTreeList.add(lodQuadTree1); - lodQuadTreeList.add(lodQuadTree2); - lodQuadTreeList.add(lodQuadTree3); - lodQuadTreeList.add(lodQuadTree4); + LodQuadTreeDimension dim = new LodQuadTreeDimension(null, null, 10); + dim.move(playerX / 512, playerZ / 512); + dim.initializeNullRegions(); + System.out.println(dim.getRegion(0, 0)); + List levelToGenerate2 = dim.getNodeToGenerate(playerX, playerZ, (byte) 0, 1000, 0); + System.out.println(levelToGenerate2); + final QuadTreeImage quadTreeImage = new QuadTreeImage(); JFrame frame = new JFrame("DrawChit"); @@ -94,77 +92,68 @@ 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 - 2); i++) { + for (int i = 0; i <= (9 - 8); i++) { for (int j = 0; j < 1; j++) { + int dist; + if (i == 9) { + dist = 1000; + } else { + dist = 100; + } + List levelToGenerate = dim.getNodeToGenerate(playerX, playerZ, (byte) (9 - i), (int) dist * (9 - i + 1), 0); - for (LodQuadTree lodQuadTree : lodQuadTreeList) { - int dist; - if (i == 9) { - dist = 1000; + for (LodQuadTree level : levelToGenerate) { + System.out.println(level); + 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 = LodNodeData.BLOCK_LEVEL; + int otherWidth = LodNodeData.BLOCK_WIDTH; + + List posXs = new ArrayList<>(); + List posZs = new ArrayList<>(); + if (level.getLodNodeData().level == 0) { + posXs.add(startX / otherWidth); + posZs.add(startZ / otherWidth); + } else if (level.getLodNodeData().level == 2) { + posXs.add(startX / otherWidth); + posXs.add(endX / otherWidth); + posZs.add(startZ / otherWidth); + posZs.add(endZ / otherWidth); } else { - dist = 100; + posXs.add(startX / otherWidth); + //posXs.add((centerX / otherWidth)-1); + //posXs.add(centerX / otherWidth); + //posXs.add(endX / otherWidth); + posZs.add(startZ / otherWidth); + //posZs.add((centerZ / otherWidth)-1); + //posZs.add(centerZ / otherWidth); + //posZs.add(endZ / otherWidth); } - List> levelToGenerate = lodQuadTree.getLevelToGenerate(playerX, playerZ, (byte) (9 - i), (int) dist * (9 - i + 1), 0); - for (AbstractMap.SimpleEntry levelDist : levelToGenerate) { - LodQuadTree level = levelDist.getKey(); - 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 = LodNodeData.BLOCK_LEVEL; - int otherWidth = LodNodeData.BLOCK_WIDTH; - - List posXs = new ArrayList<>(); - List posZs = new ArrayList<>(); - if (level.getLodNodeData().level == 0) { - posXs.add(startX / otherWidth); - posZs.add(startZ / otherWidth); - } else if (level.getLodNodeData().level == 2) { - posXs.add(startX / otherWidth); - posXs.add(endX / otherWidth); - posZs.add(startZ / otherWidth); - posZs.add(endZ / otherWidth); - } else { - posXs.add(startX / otherWidth); - //posXs.add((centerX / otherWidth)-1); - posXs.add(centerX / otherWidth); - //posXs.add(endX / otherWidth); - posZs.add(startZ / otherWidth); - //posZs.add((centerZ / otherWidth)-1); - posZs.add(centerZ / otherWidth); - //posZs.add(endZ / otherWidth); - } - - for (Integer posXI : posXs) { - 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()); - lodQuadTree.setNodeAtLowerLevel(new LodNodeData(otherLevel, posX, posZ, 0, 0, color, true), true); - } + for (Integer posXI : posXs) { + 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()); + LodNodeData node = new LodNodeData(otherLevel, posX, posZ, 0, 0, color, true); + dim.addNode(node); } } } } - Collection lodList = new ArrayList<>(); - for (LodQuadTree lodQuadTree : lodQuadTreeList) { - //lodList.addAll(lodQuadTree.getNodeList(false, false,true)); - lodList.addAll(lodQuadTree.getNodeToRender(playerX, playerZ, (byte) 0, 10000, 0)); - /* - lodList.addAll(lodQuadTree.getNodeToRender(playerX, playerZ, (byte) 2, 100, 0)); - lodList.addAll(lodQuadTree.getNodeToRender(playerX, playerZ, (byte) 3, 200, 100)); - lodList.addAll(lodQuadTree.getNodeToRender(playerX, playerZ, (byte) 4, 400, 200)); - lodList.addAll(lodQuadTree.getNodeToRender(playerX, playerZ, (byte) 5, 10000, 400)); + Collection lodList = dim.getNodes(false, false, true); + // lodList.addAll(lodQuadTree.getNodeToRender(playerX, playerZ, (byte) 2, 100, 0)); + // lodList.addAll(lodQuadTree.getNodeToRender(playerX, playerZ, (byte) 3, 200, 100)); + // lodList.addAll(lodQuadTree.getNodeToRender(playerX, playerZ, (byte) 4, 400, 200)); + // lodList.addAll(lodQuadTree.getNodeToRender(playerX, playerZ, (byte) 5, 10000, 400)); - */ - - } //lodList = lodQuadTree.getNodeList(false,false,false); listOfList.add(lodList); @@ -184,10 +173,6 @@ public class QuadTreeImage extends JPanel { */ } - for (LodQuadTree lodQuadTree : lodQuadTreeList) { - System.out.println(lodQuadTree.getLodNodeData().posX + " " + lodQuadTree.getLodNodeData().posZ ); - System.out.println(lodQuadTree.getLodNodeData().startX + " " + lodQuadTree.getLodNodeData().startZ ); - } int timerDelay = 500; new Timer(timerDelay, new ActionListener() {