added region in image + various fix

This commit is contained in:
Morippi
2021-07-08 19:31:27 +02:00
parent d5b2512e27
commit 804f910584
2 changed files with 84 additions and 55 deletions
@@ -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<LodNodeData> 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()) {
@@ -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<LodQuadTree> 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<Collection<LodNodeData>> 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<AbstractMap.SimpleEntry<LodQuadTree, Integer>> levelToGenerate = lodQuadTree.getLevelToGenerate(playerX, playerZ, (byte) (9 - i), (int) dist * (9 - i + 1), 0);
System.out.println(levelToGenerate);
for (AbstractMap.SimpleEntry<LodQuadTree, Integer> 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<Integer> posXs = new ArrayList<>();
List<Integer> 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<AbstractMap.SimpleEntry<LodQuadTree, Integer>> 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<LodQuadTree, Integer> 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<Integer> posXs = new ArrayList<>();
List<Integer> 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<LodNodeData> 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<LodNodeData> 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<MyDrawable> myDrawables = new ArrayList<>();
int amp = 2;
int amp = 1;
Collection<LodNodeData> 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));