Updated the image creation

This commit is contained in:
Leonardo
2021-07-14 15:08:10 +02:00
parent d77bb48da1
commit 5b3aa82817
@@ -81,16 +81,16 @@ public class QuadTreeImage extends JPanel {
List<List<LodQuadTreeNode>> listOfList = new ArrayList<>();
OverworldBiomeSource biomeSource = new OverworldBiomeSource(MCVersion.v1_16_5, 1000);
//EndBiomeSource biomeSource = new EndBiomeSource(MCVersion.v1_16_5, 1000);
int sizeOfTheWorld = 16;
int sizeOfTheWorld = 64;
LodQuadTreeDimension dim = new LodQuadTreeDimension(null, null, sizeOfTheWorld);
//SIMULATING A PLAYER MOVING,
int[] playerXs = {0,100,200,300,400,500};
int[] playerZs = {0,100,200,300,400,500};
for(int pos=0; pos<6; pos++) {
int playerX= playerXs[pos];
int playerZ= playerZs[pos];
int[] playerXs = {0, 100, 200, 300, 400, 500};
int[] playerZs = {0, 100, 200, 300, 400, 500};
for (int pos = 0; pos < 1; pos++) {
int playerX = playerXs[pos];
int playerZ = playerZs[pos];
//int sizeOfTheWorld=512; //TRY THIS TO SEE A 250'000 BLOCK RENDER DISTANCE
dim.move(Math.floorDiv(playerX, 512), Math.floorDiv(playerZ, 512));
@@ -106,46 +106,44 @@ 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++) {
List<LodQuadTree> levelToGenerate = dim.getNodeToGenerate(playerX, playerZ, (byte) (9 - i), DistanceGenerationMode.SERVER, distances[i], 0);
//System.out.println(levelToGenerate);
for (LodQuadTree level : levelToGenerate) {
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 = LodQuadTreeNode.BLOCK_LEVEL;
int otherWidth = LodQuadTreeNode.BLOCK_WIDTH;
List<LodQuadTree> levelToGenerate = dim.getNodeToGenerate(playerX, playerZ, (byte) (9 - i), DistanceGenerationMode.SERVER, distances[i], 0);
//System.out.println(levelToGenerate);
for (LodQuadTree level : levelToGenerate) {
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 = LodQuadTreeNode.BLOCK_LEVEL;
int otherWidth = LodQuadTreeNode.BLOCK_WIDTH;
List<Integer> posXs = new ArrayList<>();
List<Integer> posZs = new ArrayList<>();
if (level.getLodNodeData().level == 0) {
posXs.add(Math.floorDiv(startX, otherWidth));
posZs.add(Math.floorDiv(startZ, otherWidth));
} else {
posXs.add(Math.floorDiv(startX, otherWidth));
posXs.add(Math.floorDiv(centerX + 1, otherWidth));
posZs.add(Math.floorDiv(startZ, otherWidth));
posZs.add(Math.floorDiv(centerZ + 1, otherWidth));
}
List<Integer> posXs = new ArrayList<>();
List<Integer> posZs = new ArrayList<>();
if (level.getLodNodeData().level == 0) {
posXs.add(Math.floorDiv(startX, otherWidth));
posZs.add(Math.floorDiv(startZ, otherWidth));
} else {
posXs.add(Math.floorDiv(startX, otherWidth));
posXs.add(Math.floorDiv(centerX + 1, otherWidth));
posZs.add(Math.floorDiv(startZ, otherWidth));
posZs.add(Math.floorDiv(centerZ + 1, otherWidth));
}
//System.out.println(posXs);
//System.out.println(posZs);
//System.out.println(posXs);
//System.out.println(posZs);
for (Integer posXI : posXs) {
for (Integer posZI : posZs) {
int posX = posXI.intValue();
int posZ = posZI.intValue();
//System.out.println(posX + " " + posZ);
color = BiomeColorsUtils.getColorFromBiomeManual(biomeSource.getBiome(posX, 0, posZ));
//color = BiomeColorsUtils.getColorFromIdCB(biomeSource.getBiome(posZ, 0, posX).getId());
LodQuadTreeNode node = new LodQuadTreeNode(otherLevel, posX, posZ, new LodDataPoint(0, 0, color), DistanceGenerationMode.SERVER);
if (dim.addNode(node)) {
}
for (Integer posXI : posXs) {
for (Integer posZI : posZs) {
int posX = posXI.intValue();
int posZ = posZI.intValue();
//System.out.println(posX + " " + posZ);
color = BiomeColorsUtils.getColorFromBiomeManual(biomeSource.getBiome(posX, 0, posZ));
//color = BiomeColorsUtils.getColorFromIdCB(biomeSource.getBiome(posZ, 0, posX).getId());
LodQuadTreeNode node = new LodQuadTreeNode(otherLevel, posX, posZ, new LodDataPoint(0, 0, color), DistanceGenerationMode.SERVER);
if (dim.addNode(node)) {
}
}
}
@@ -158,27 +156,28 @@ public class QuadTreeImage extends JPanel {
//complexityMask.add(DistanceGenerationMode.BIOME_ONLY_SIMULATE_HEIGHT);
//complexityMask.add(DistanceGenerationMode.BIOME_ONLY);
Set<DistanceGenerationMode> complexityMask = LodQuadTreeDimension.FULL_COMPLEXITY_MASK;
}
Set<DistanceGenerationMode> complexityMask = LodQuadTreeDimension.FULL_COMPLEXITY_MASK;
List<LodQuadTreeNode> lodList = new ArrayList<>();
//The min and max distances should increase quadratically
lodList.addAll(dim.getNodeToRender(playerX,playerZ,(byte) 3, complexityMask, 250,0));
lodList.addAll(dim.getNodeToRender(playerX,playerZ,(byte) 4, complexityMask,500,250));
lodList.addAll(dim.getNodeToRender(playerX,playerZ,(byte) 5, complexityMask,1000,500));
lodList.addAll(dim.getNodeToRender(playerX,playerZ,(byte) 6, complexityMask,2000,1000));
lodList.addAll(dim.getNodeToRender(playerX,playerZ,(byte) 7, complexityMask,4000,2000));
lodList.addAll(dim.getNodeToRender(playerX,playerZ,(byte) 8, complexityMask,8000,4000));
lodList.addAll(dim.getNodeToRender(playerX,playerZ,(byte) 9, complexityMask,100000,8000));
lodList.addAll(dim.getNodeToRender(playerX, playerZ, (byte) 3, complexityMask, 250, 0));
lodList.addAll(dim.getNodeToRender(playerX, playerZ, (byte) 4, complexityMask, 500, 250));
lodList.addAll(dim.getNodeToRender(playerX, playerZ, (byte) 5, complexityMask, 1000, 500));
lodList.addAll(dim.getNodeToRender(playerX, playerZ, (byte) 6, complexityMask, 2000, 1000));
lodList.addAll(dim.getNodeToRender(playerX, playerZ, (byte) 7, complexityMask, 4000, 2000));
lodList.addAll(dim.getNodeToRender(playerX, playerZ, (byte) 8, complexityMask, 8000, 4000));
lodList.addAll(dim.getNodeToRender(playerX, playerZ, (byte) 9, complexityMask, 10000000, 8000));
System.out.println(lodList.size());
// List<LodQuadTreeNode> lodList = dim.getNodes(complexityMask, false, false); //USE THIS TO SEE AL THE LODS
listOfList.add(lodList);
}
// List<LodQuadTreeNode> lodList = dim.getNodes(complexityMask, false, false); //USE THIS TO SEE AL THE LODS
listOfList.add(lodList);
}
System.out.println("GETTING LOD FROM COORDINATE AFTER GENERETION");
System.out.println(dim.getLodFromCoordinates(0,100, (byte) 1));
System.out.println(dim.getLodFromCoordinates(0, 100, (byte) 1));
//FROM THIS POINT ON THE CODE JUST CREATE THE IMAGE
int timerDelay = 200;
@@ -189,7 +188,7 @@ public class QuadTreeImage extends JPanel {
int zOffset = listOfList.stream().mapToInt(x -> x.stream().mapToInt(y -> y.startZ).min().getAsInt()).min().getAsInt();
int maxX = listOfList.stream().mapToInt(x -> x.stream().mapToInt(y -> y.startX).max().getAsInt()).min().getAsInt();
int maxZ = listOfList.stream().mapToInt(x -> x.stream().mapToInt(y -> y.startZ).max().getAsInt()).min().getAsInt();
int maxSize = Math.max(maxX-xOffset,maxZ - zOffset)/512;
int maxSize = Math.max(maxX - xOffset, maxZ - zOffset) / 512;
System.out.println(xOffset);
System.out.println(zOffset);
new Timer(timerDelay, new ActionListener() {
@@ -200,13 +199,13 @@ public class QuadTreeImage extends JPanel {
if (drawCount >= listOfList.size()) {
drawCount = 0;
} else {
if(drawCount==0) quadTreeImage.clearAll();
if (drawCount == 0) quadTreeImage.clearAll();
final List<MyDrawable> myDrawables = new ArrayList<>();
double amp = ((double) 3)/((double) sizeOfTheWorld);
double amp = ((double) 3) / ((double) maxSize);
Collection<LodQuadTreeNode> lodList = listOfList.get(drawCount);
for (LodQuadTreeNode data : lodList) {
myDrawables.add(new MyDrawable(new Rectangle2D.Double(
((data.startX - xOffset ) * amp),
((data.startX - xOffset) * amp),
((data.startZ - zOffset) * amp),
data.width * amp,
data.width * amp),
@@ -224,17 +223,15 @@ public class QuadTreeImage extends JPanel {
for (int k = 0; k < myDrawables.size(); k++) {
quadTreeImage.addMyDrawable(myDrawables.get(k));
}
/*
BufferedImage img = new BufferedImage(frame.getWidth(), frame.getHeight(), BufferedImage.TYPE_INT_RGB);
Graphics2D g2d = img.createGraphics();
frame.printAll(g2d);
g2d.dispose();
try {
ImageIO.write(img, "png", new File("ImgEnd" + drawCount+".png"));
ImageIO.write(img, "png", new File("ImgEnd" + drawCount + ".png"));
} catch (IOException ioException) {
ioException.printStackTrace();
}
*/
drawCount++;
}
}