diff --git a/src/main/java/com/seibel/lod/objects/quadTree/LodQuadTree.java b/src/main/java/com/seibel/lod/objects/quadTree/LodQuadTree.java index 1f4d652a3..64e3f4ffe 100644 --- a/src/main/java/com/seibel/lod/objects/quadTree/LodQuadTree.java +++ b/src/main/java/com/seibel/lod/objects/quadTree/LodQuadTree.java @@ -307,7 +307,10 @@ public class LodQuadTree { int min = distances.stream().mapToInt(Integer::intValue).min().getAsInt(); int max = distances.stream().mapToInt(Integer::intValue).max().getAsInt(); List nodeList = new ArrayList<>(); - if (min > maxDistance || max < minDistance || targetLevel > lodNodeData.level) { + if (targetLevel > lodNodeData.level) { + return nodeList; + } + if ((min > maxDistance || max < minDistance) && !isCoordinateInLevel(x,z)){ return nodeList; } if (targetLevel == lodNodeData.level || !isNodeFull()) { 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 dfe7a7c22..6173f3713 100644 --- a/src/main/java/com/seibel/lod/objects/quadTree/QuadTreeImage.java +++ b/src/main/java/com/seibel/lod/objects/quadTree/QuadTreeImage.java @@ -73,7 +73,17 @@ public class QuadTreeImage extends JPanel { } private static void createAndShowGui() { - LodQuadTree lodQuadTree = new LodQuadTree(0, 0); + int playerX = 600; + int playerZ = 260; + LodQuadTree lodQuadTree1 = new LodQuadTree(0, 0); + LodQuadTree lodQuadTree3 = new LodQuadTree(1, 0); + LodQuadTree lodQuadTree2 = new LodQuadTree(0, 1); + LodQuadTree lodQuadTree4 = new LodQuadTree(1, 1); + List lodQuadTreeList = new ArrayList<>(); + lodQuadTreeList.add(lodQuadTree1); + lodQuadTreeList.add(lodQuadTree2); + lodQuadTreeList.add(lodQuadTree3); + lodQuadTreeList.add(lodQuadTree4); final QuadTreeImage quadTreeImage = new QuadTreeImage(); JFrame frame = new JFrame("DrawChit"); @@ -82,68 +92,79 @@ public class QuadTreeImage extends JPanel { frame.pack(); frame.setLocationByPlatform(true); frame.setVisible(true); - System.out.println(lodQuadTree.getLodNodeData().endX); - int playerX = 150; - int playerZ = 260; List> listOfList = new ArrayList<>(); - OverworldBiomeSource biomeSource = new OverworldBiomeSource(MCVersion.v1_16_5, 0); + OverworldBiomeSource biomeSource = new OverworldBiomeSource(MCVersion.v1_16_5, 100); for (int i = 0; i <= (9 - 2); i++) { for (int j = 0; j < 1; j++) { - int dist; - if (i == 9) { - dist = 500; - } else { - dist = 500; - } - List> levelToGenerate = lodQuadTree.getLevelToGenerate(playerX, playerZ, (byte) (9 - i), (int) dist * (9 - i + 1), 0); - System.out.println(levelToGenerate); - 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 (LodQuadTree lodQuadTree : lodQuadTreeList) { + int dist; + if (i == 9) { + dist = 1000; + } else { + dist = 100; } + List> levelToGenerate = lodQuadTree.getLevelToGenerate(playerX, playerZ, (byte) (9 - i), (int) dist * (9 - i + 1), 0); - for(Integer posXI : posXs){ - for(Integer posZI : posZs){ - int posX = posXI.intValue(); - int posZ = 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 (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); + } } } } } + 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 = lodQuadTree.getNodeToRender(playerX, playerZ, (byte) 0, 10000, 0); + */ + + } //lodList = lodQuadTree.getNodeList(false,false,false); listOfList.add(lodList); @@ -163,6 +184,11 @@ 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() { private int drawCount = 0; @@ -174,13 +200,13 @@ public class QuadTreeImage extends JPanel { quadTreeImage.clearAll(); } else { final List myDrawables = new ArrayList<>(); - int amp = 2; + int amp = 1; Collection lodList = listOfList.get(drawCount); for (LodNodeData data : lodList) { myDrawables.add(new MyDrawable(new Rectangle2D.Double(data.startX * amp, data.startZ * amp, data.width * amp, data.width * amp), data.color, new BasicStroke(1))); } - myDrawables.add(new MyDrawable(new Rectangle2D.Double(playerZ * amp - 10, playerX * amp - 10, 20, 20), + myDrawables.add(new MyDrawable(new Rectangle2D.Double(playerX * amp - 10, playerZ * amp - 10, 20, 20), Color.yellow, new BasicStroke(1))); for (int k = 0; k < myDrawables.size(); k++) { quadTreeImage.addMyDrawable(myDrawables.get(k));