second fix for negative coordinate

This commit is contained in:
Morippi
2021-07-10 13:36:15 +02:00
parent f95d57ab6d
commit 6cb1d2f8f4
2 changed files with 31 additions and 27 deletions
@@ -133,11 +133,19 @@ public class LodQuadTree {
byte targetLevel = newLodNodeData.level;
byte currentLevel = lodNodeData.level;
if (targetLevel < currentLevel) {
int posX = Math.abs(newLodNodeData.posX);
int posZ = Math.abs(newLodNodeData.posZ);
int posX = newLodNodeData.posX;
int posZ = newLodNodeData.posZ;
short widthRatio = (short) (lodNodeData.width / (2 * newLodNodeData.width));
int WE = Math.abs((posX / widthRatio) % 2);
int NS = Math.abs((posZ / widthRatio) % 2);
int WE = Math.abs(Math.floorDiv(posX , widthRatio) % 2);
int NS = Math.abs(Math.floorDiv(posZ , widthRatio) % 2);
//These two if fix the negative coordinate problema
//I don't know why, there is some problem with the %2 operation
/*
if(posX<0) WE = 1 - WE;
if(posZ<0) NS = 1 - NS;
*/
if (getChild(NS, WE) == null) {
setChild(NS, WE);
}
@@ -170,9 +178,9 @@ public class LodQuadTree {
if (targetLevel == currentLevel) {
return lodNodeData;
} else if (targetLevel < currentLevel) {
short widthRatio = (short) (lodNodeData.width / Math.pow(2, level));
int WE = Math.abs((posX / widthRatio) % lodNodeData.posX);
int NS = Math.abs((posZ / widthRatio) % lodNodeData.posZ);
short widthRatio = (short) (lodNodeData.width / (2 * Math.pow(2, level)));
int WE = Math.abs(Math.floorDiv(posX , widthRatio) % 2);
int NS = Math.abs(Math.floorDiv(posZ , widthRatio) % 2);
if (getChild(NS, WE) == null) {
return null;
}
@@ -311,7 +319,7 @@ public class LodQuadTree {
if (targetLevel > lodNodeData.level) {
return nodeList;
}
if ((min > maxDistance || max < minDistance) && !isCoordinateInLevel(x,z)){
if ((min > maxDistance || max < minDistance) /*&& !isCoordinateInLevel(x,z)*/){
return nodeList;
}
if (targetLevel == lodNodeData.level || !isNodeFull()) {
@@ -325,7 +333,7 @@ public class LodQuadTree {
} else {
for (int NS = 0; NS <= 1; NS++) {
for (int WE = 0; WE <= 1; WE++) {
LodQuadTree child = children[NS][WE];
LodQuadTree child = getChild(NS,WE);
if (child != null) {
nodeList.addAll(child.getNodeToRender(x, z, targetLevel, maxDistance, minDistance));
}
@@ -368,10 +376,10 @@ public class LodQuadTree {
if (targetLevel != lodNodeData.level) {
for (int NS = 0; NS <= 1; NS++) {
for (int WE = 0; WE <= 1; WE++) {
if (children[NS][WE] == null) {
if (getChild(NS,WE) == null) {
setChild(NS,WE);
}
LodQuadTree child = children[NS][WE];
LodQuadTree child = getChild(NS,WE);
nodeList.addAll(child.getLevelToGenerate(x, z, targetLevel, maxDistance, minDistance));
}
}
@@ -75,11 +75,13 @@ public class QuadTreeImage extends JPanel {
}
private static void createAndShowGui() {
int playerX =-0*511;
int playerZ =-0*511;
int playerX =-40;
int playerZ =-250;
LodQuadTreeDimension dim = new LodQuadTreeDimension(null, null, 16);
System.out.println(dim.getRegion(0, 0));
dim.move(playerX/512,playerZ/512);
dim.move(Math.floorDiv(playerX,512),Math.floorDiv(playerZ,512));
System.out.println(playerX/512 + " " + playerZ/512);
System.out.println(dim.getCenterX());
System.out.println(dim.getCenterZ());
System.out.println(dim.getWidth());
@@ -98,12 +100,6 @@ 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++) {
int dist;
if (i == 0) {
dist = 2000;
} else {
dist = 32;
}
List<LodQuadTree> levelToGenerate = dim.getNodeToGenerate(playerX, playerZ, (byte) (9 - i), distances[i], 0);
System.out.println(levelToGenerate);
for (LodQuadTree level : levelToGenerate) {
@@ -135,7 +131,7 @@ public class QuadTreeImage extends JPanel {
int posX = posXI.intValue();
int posZ = posZI.intValue();
//System.out.println(posX + " " + posZ);
color = BiomeColorsUtils.getColorFromBiomeManual(biomeSource.getBiome(posZ, 0, posX));
color = BiomeColorsUtils.getColorFromBiomeManual(biomeSource.getBiome(posX, 0, posZ));
//color = BiomeColorsUtils.getColorFromIdCB(biomeSource.getBiome(posZ, 0, posX).getId());
LodNodeData node = new LodNodeData(otherLevel, posX, posZ, 0, 0, color, true);
dim.addNode(node);
@@ -144,13 +140,13 @@ public class QuadTreeImage extends JPanel {
}
}
List<LodNodeData> lodList = new ArrayList<>();
lodList.addAll(dim.getNodeToRender(playerX,playerZ,(byte) 9, 100000,8000));
lodList.addAll(dim.getNodeToRender(playerX,playerZ,(byte) 8, 8000,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,250));
lodList.addAll(dim.getNodeToRender(playerX,playerZ,(byte) 3, 250,0));
lodList.addAll(dim.getNodeToRender(playerX,playerZ,(byte) 4, 500,250));
lodList.addAll(dim.getNodeToRender(playerX,playerZ,(byte) 5, 1000,500));
lodList.addAll(dim.getNodeToRender(playerX,playerZ,(byte) 6, 2000,1000));
lodList.addAll(dim.getNodeToRender(playerX,playerZ,(byte) 7, 4000,2000));
lodList.addAll(dim.getNodeToRender(playerX,playerZ,(byte) 8, 8000,4000));
lodList.addAll(dim.getNodeToRender(playerX,playerZ,(byte) 9, 100000,8000));
System.out.println(lodList.size());
//Collection<LodNodeData> lodList = dim.getNodes(false,false,false);
// lodList.addAll(lodQuadTree.getNodeToRender(playerX, playerZ, (byte) 2, 100, 0));