second fix for negative coordinate
This commit is contained in:
@@ -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));
|
||||
|
||||
Reference in New Issue
Block a user