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 64e3f4ffe..83f806d41 100644 --- a/src/main/java/com/seibel/lod/objects/quadTree/LodQuadTree.java +++ b/src/main/java/com/seibel/lod/objects/quadTree/LodQuadTree.java @@ -136,8 +136,8 @@ public class LodQuadTree { int posX = newLodNodeData.posX; int posZ = newLodNodeData.posZ; short widthRatio = (short) (lodNodeData.width / (2 * newLodNodeData.width)); - int NS = (posX / widthRatio) % 2; - int WE = (posZ / widthRatio) % 2; + int NS = Math.abs((posX / widthRatio) % 2); + int WE = Math.abs((posZ / widthRatio) % 2); if (getChild(NS, WE) == null) { setChild(NS, WE); } 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 dc4c980a3..5a9f508e7 100644 --- a/src/main/java/com/seibel/lod/objects/quadTree/LodQuadTreeDimension.java +++ b/src/main/java/com/seibel/lod/objects/quadTree/LodQuadTreeDimension.java @@ -34,40 +34,34 @@ public class LodQuadTreeDimension { { dimension = newDimension; width = newMaxWidth; + if(newDimension != null && lodWorld != null) { + try { + Minecraft mc = Minecraft.getInstance(); - /* - try - { - Minecraft mc = Minecraft.getInstance(); + File saveDir; + if (mc.hasSingleplayerServer()) { + // local world - File saveDir; - if(mc.hasSingleplayerServer()) - { - // local world + ServerWorld serverWorld = LodUtil.getServerWorldFromDimension(newDimension); + seed = serverWorld.getSeed(); + // provider needs a separate variable to prevent + // the compiler from complaining + ServerChunkProvider provider = serverWorld.getChunkSource(); + saveDir = new File(provider.dataStorage.dataFolder.getCanonicalFile().getPath() + File.separatorChar + "lod"); + } else { + // connected to server - ServerWorld serverWorld = LodUtil.getServerWorldFromDimension(newDimension); - seed = serverWorld.getSeed(); - // provider needs a separate variable to prevent - // the compiler from complaining - ServerChunkProvider provider = serverWorld.getChunkSource(); - saveDir = new File(provider.dataStorage.dataFolder.getCanonicalFile().getPath() + File.separatorChar + "lod"); + saveDir = new File(mc.gameDirectory.getCanonicalFile().getPath() + + File.separatorChar + "lod server data" + File.separatorChar + LodUtil.getDimensionIDFromWorld(mc.level)); + } + + 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 } - else - { - // connected to server - - saveDir = new File(mc.gameDirectory.getCanonicalFile().getPath() + - File.separatorChar + "lod server data" + File.separatorChar + LodUtil.getDimensionIDFromWorld(mc.level)); - } - - 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]; @@ -262,8 +256,8 @@ public class LodQuadTreeDimension { public void addNode(LodNodeData lodNodeData) { RegionPos pos = new RegionPos( - lodNodeData.posX / lodNodeData.width, - lodNodeData.posZ / lodNodeData.width + lodNodeData.startX / 512, + lodNodeData.startZ / 512 ); // don't continue if the region can't be saved @@ -280,10 +274,6 @@ 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 @@ -341,11 +331,22 @@ public class LodQuadTreeDimension { * @return list of quadTrees */ public List getNodeToGenerate(int x, int z, byte level, int maxDistance, int minDistance){ + int n = regions.length; + int xIndex; + int zIndex; + LodQuadTree region; List> listOfQuadTree = new ArrayList<>(); - for(int i=0; i getNodes(boolean getOnlyReal, boolean getOnlyDirty, boolean getOnlyLeaf){ int n = regions.length; List listOfNodes = new ArrayList<>(); - for(int i=0; i levelToGenerate2 = dim.getNodeToGenerate(playerX, playerZ, (byte) 0, 1000, 0); - System.out.println(levelToGenerate2); - + dim.move(playerX/512,playerZ/512); + System.out.println(dim.getCenterX()); + System.out.println(dim.getCenterZ()); + System.out.println(dim.getWidth()); final QuadTreeImage quadTreeImage = new QuadTreeImage(); + JFrame frame = new JFrame("DrawChit"); frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); frame.getContentPane().add(quadTreeImage); @@ -92,18 +92,16 @@ 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 - 8); i++) { + for (int i = 0; i <= (9 - 5); i++) { for (int j = 0; j < 1; j++) { int dist; if (i == 9) { - dist = 1000; + dist = 10000; } else { dist = 100; } - List levelToGenerate = dim.getNodeToGenerate(playerX, playerZ, (byte) (9 - i), (int) dist * (9 - i + 1), 0); - + List levelToGenerate = dim.getNodeToGenerate(playerX, playerZ, (byte) (9 - i), (int) dist, 0); for (LodQuadTree level : levelToGenerate) { - System.out.println(level); Color color; int startX = level.getLodNodeData().startX; int startZ = level.getLodNodeData().startZ; @@ -117,6 +115,7 @@ public class QuadTreeImage extends JPanel { List posXs = new ArrayList<>(); List posZs = new ArrayList<>(); + /* if (level.getLodNodeData().level == 0) { posXs.add(startX / otherWidth); posZs.add(startZ / otherWidth); @@ -135,6 +134,11 @@ public class QuadTreeImage extends JPanel { //posZs.add(centerZ / otherWidth); //posZs.add(endZ / otherWidth); } + */ + posXs.add(startX / otherWidth); + //posXs.add(centerX / otherWidth); + posZs.add(startZ / otherWidth); + //posXs.add(centerZ / otherWidth); for (Integer posXI : posXs) { for (Integer posZI : posZs) { @@ -148,29 +152,13 @@ public class QuadTreeImage extends JPanel { } } } - Collection lodList = dim.getNodes(false, false, true); + 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)); // 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); -/* - final List myDrawables = new ArrayList<>(); - int amp = 2; - 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), - Color.yellow, new BasicStroke(1))); - for (int k = 0; k < myDrawables.size(); k++) { - quadTreeImage.addMyDrawable(myDrawables.get(k)); - - } - */ + System.out.println(lodList); } @@ -182,16 +170,26 @@ public class QuadTreeImage extends JPanel { public void actionPerformed(ActionEvent e) { if (drawCount >= listOfList.size()) { drawCount = 0; - quadTreeImage.clearAll(); } else { + if(drawCount==0) quadTreeImage.clearAll(); final List myDrawables = new ArrayList<>(); - int amp = 1; + double amp = 1; + int xOffset = (dim.getCenterX() - (dim.getWidth()/2))*512; + int zOffset = (dim.getCenterZ() - (dim.getWidth()/2))*512; 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), + myDrawables.add(new MyDrawable(new Rectangle2D.Double( + ((data.startX - xOffset ) * amp), + ((data.startZ - zOffset) * amp), + data.width * amp, + data.width * amp), data.color, new BasicStroke(1))); } - myDrawables.add(new MyDrawable(new Rectangle2D.Double(playerX * amp - 10, playerZ * amp - 10, 20, 20), + myDrawables.add(new MyDrawable(new Rectangle2D.Double( + (playerX - 10 + xOffset) * amp, + (playerZ - 10 + zOffset) * amp, + 20, + 20), Color.yellow, new BasicStroke(1))); for (int k = 0; k < myDrawables.size(); k++) { quadTreeImage.addMyDrawable(myDrawables.get(k)); diff --git a/src/main/java/com/seibel/lod/util/LodUtil.java b/src/main/java/com/seibel/lod/util/LodUtil.java index a36df9819..92d1fe72b 100644 --- a/src/main/java/com/seibel/lod/util/LodUtil.java +++ b/src/main/java/com/seibel/lod/util/LodUtil.java @@ -79,8 +79,8 @@ public class LodUtil public static RegionPos convertChunkPosToRegionPos(ChunkPos pos) { RegionPos rPos = new RegionPos(); - rPos.x = pos.x / LodRegion.SIZE; - rPos.z = pos.z / LodRegion.SIZE; + rPos.x = pos.x / 512; + rPos.z = pos.z / 512; // prevent issues if X/Z is negative and less than 16 if (pos.x < 0)