From bbf99ed1455af3f44828b7cf90a0557e1355d509 Mon Sep 17 00:00:00 2001 From: Leonardo Date: Tue, 24 Aug 2021 00:33:46 +0200 Subject: [PATCH] fixed tree generator new tree cutter --- .../seibel/lod/builders/LodBufferBuilder.java | 6 -- .../com/seibel/lod/objects/LodDimension.java | 64 +++++++++---------- .../seibel/lod/util/DetailDistanceUtil.java | 26 ++++---- 3 files changed, 43 insertions(+), 53 deletions(-) diff --git a/src/main/java/com/seibel/lod/builders/LodBufferBuilder.java b/src/main/java/com/seibel/lod/builders/LodBufferBuilder.java index 6435a3519..0a51f12b1 100644 --- a/src/main/java/com/seibel/lod/builders/LodBufferBuilder.java +++ b/src/main/java/com/seibel/lod/builders/LodBufferBuilder.java @@ -129,10 +129,8 @@ public class LodBufferBuilder public LodBufferBuilder(LodBuilder newLodBuilder) { - System.out.println("start building con"); mc = Minecraft.getInstance(); LodQuadTreeNodeBuilder = newLodBuilder; - System.out.println("end building con"); } @@ -151,7 +149,6 @@ public class LodBufferBuilder public void generateLodBuffersAsync(LodRenderer renderer, LodDimension lodDim, BlockPos playerBlockPos, int numbChunksWide) { - System.out.println("start building process"); // only allow one generation process to happen at a time if (generatingBuffers) return; @@ -181,9 +178,6 @@ public class LodBufferBuilder try { long treeStart = System.currentTimeMillis(); - lodDim.treeGenerator(playerBlockPosRounded.getX(), playerBlockPosRounded.getZ()); - lodDim.treeCutter(playerBlockPosRounded.getX(), playerBlockPosRounded.getZ()); - System.out.println("memory needed " + lodDim.getMinMemoryNeeded() + " byte"); long treeEnd = System.currentTimeMillis(); long startTime = System.currentTimeMillis(); diff --git a/src/main/java/com/seibel/lod/objects/LodDimension.java b/src/main/java/com/seibel/lod/objects/LodDimension.java index ae386a9ce..406665cc1 100644 --- a/src/main/java/com/seibel/lod/objects/LodDimension.java +++ b/src/main/java/com/seibel/lod/objects/LodDimension.java @@ -36,6 +36,7 @@ import net.minecraft.util.math.ChunkPos; import net.minecraft.world.DimensionType; import net.minecraft.world.server.ServerChunkProvider; import net.minecraft.world.server.ServerWorld; +import org.lwjgl.system.CallbackI; /** * This object holds all loaded LOD regions @@ -75,16 +76,14 @@ public class LodDimension */ public LodDimension(DimensionType newDimension, LodWorld lodWorld, int newWidth) { - System.out.println("start lod dim"); dimension = newDimension; width = newWidth; halfWidth = (int) Math.floor(width / 2); - + Minecraft mc = Minecraft.getInstance(); if (newDimension != null && lodWorld != null) { try { - Minecraft mc = Minecraft.getInstance(); File saveDir; if (mc.hasSingleplayerServer()) @@ -117,13 +116,14 @@ public class LodDimension regions = new LodRegion[width][width]; isRegionDirty = new boolean[width][width]; + //treeGenerator((int) mc.player.getX(),(int) mc.player.getZ()); + // populate isRegionDirty for (int i = 0; i < width; i++) for (int j = 0; j < width; j++) isRegionDirty[i][j] = false; center = new RegionPos(0, 0); - System.out.println("end lod dim"); } @@ -315,6 +315,8 @@ public class LodDimension LevelPos levelPos; LodRegion region; + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.append("cutting tree : \n"); for (int x = 0; x < regions.length; x++) { for (int z = 0; z < regions.length; z++) @@ -329,8 +331,10 @@ public class LodDimension if(DetailDistanceUtil.getDistanceCut(index + 1) > levelPos.minDistance(playerPosX, playerPosZ)){ region = regions[x][z]; - byte cutDetailLevel = DetailDistanceUtil.getCutLodDetail(index).detailLevel; + byte cutDetailLevel = (byte) (DetailDistanceUtil.getCutLodDetail(index).detailLevel); + stringBuilder.append(cutDetailLevel); + stringBuilder.append("\t"); if(region != null && cutDetailLevel > 0) { region.cutTree(cutDetailLevel); @@ -340,7 +344,9 @@ public class LodDimension } } } + stringBuilder.append("\n"); } + System.out.println(stringBuilder); } /** @@ -353,7 +359,8 @@ public class LodDimension RegionPos regionPos; LodRegion region; byte targetDetailLevel; - + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.append("generating tree : \n"); for (int x = 0; x < regions.length; x++) { for (int z = 0; z < regions.length; z++) @@ -370,7 +377,7 @@ public class LodDimension region = regions[x][z]; //We require that the region we are checking is loaded with at least this level - targetDetailLevel = DetailDistanceUtil.getLodDetail(index).detailLevel; + targetDetailLevel = (byte) (DetailDistanceUtil.getLodDetail(index).detailLevel); if (region == null) { @@ -381,18 +388,32 @@ public class LodDimension //if there is no file we initialize the region if (region == null) + { regions[x][z] = new LodRegion(targetDetailLevel, regionPos); + stringBuilder.append(targetDetailLevel); + stringBuilder.append("i"); + stringBuilder.append("\t"); + }else{ + stringBuilder.append(targetDetailLevel); + stringBuilder.append("l"); + stringBuilder.append("\t"); + } }else if(region.getMinDetailLevel() > targetDetailLevel){ //Second case, region has been initialized but at a higher level //We expand the region by introducing the missing layer + stringBuilder.append(targetDetailLevel); + stringBuilder.append("e"); + stringBuilder.append("\t"); region.expand(targetDetailLevel); } break; } } } + stringBuilder.append("\n"); } + System.out.println(stringBuilder); } /** @@ -517,14 +538,7 @@ public class LodDimension start <= regionLevelPos.maxDistance(playerPosX, playerPosZ)) { region = getRegion(new LevelPos(LodUtil.REGION_DETAIL_LEVEL, regionPos.x, regionPos.z).convert(detailLevel)); - if (region == null) - { - //region = new LodRegion(DetailUtil.getLodDetail(detailLevel).detailLevel, regionPos); - //addOrOverwriteRegion(region); - } else - { - listOfData.addAll(region.getDataToRender(playerPosX, playerPosZ, start, end, detailLevel)); - } + listOfData.addAll(region.getDataToRender(playerPosX, playerPosZ, start, end, detailLevel)); } } } @@ -544,25 +558,7 @@ public class LodDimension start <= regionLevelPos.maxDistance(playerPosX, playerPosZ)) { LodRegion region = getRegion(new LevelPos(LodUtil.REGION_DETAIL_LEVEL, regionPos.x, regionPos.z).convert(detailLevel)); - if (region == null) - { - /* - try - { - region = new LodRegion(DetailUtil.getLodDetail(detailLevel).detailLevel, regionPos); - addOrOverwriteRegion(region); - } - catch (ArrayIndexOutOfBoundsException e) - { - ClientProxy.LOGGER.warn("getDataToRender was unable to add the region at the pos [" + regionPos.x + ", " + regionPos.z + "]"); - return listOfData; // this list should be empty - } - */ - return listOfData; - } else - { - listOfData.addAll(region.getDataToRender(playerPosX, playerPosZ, start, end, detailLevel)); - } + listOfData.addAll(region.getDataToRender(playerPosX, playerPosZ, start, end, detailLevel)); } return listOfData; } diff --git a/src/main/java/com/seibel/lod/util/DetailDistanceUtil.java b/src/main/java/com/seibel/lod/util/DetailDistanceUtil.java index 87a3ba570..628d38bcd 100644 --- a/src/main/java/com/seibel/lod/util/DetailDistanceUtil.java +++ b/src/main/java/com/seibel/lod/util/DetailDistanceUtil.java @@ -8,11 +8,11 @@ public class DetailDistanceUtil { private static double genMultiplier = 1.25; private static double cutMultiplier = 1.5; - private static final int minDetail = LodConfig.CLIENT.maxGenerationDetail.get().detailLevel; - private static final int maxDetail = LodUtil.REGION_DETAIL_LEVEL + 1; - private static final int minDistance = 0; - private static final int maxDistance = LodConfig.CLIENT.lodChunkRenderDistance.get() * 16 * 2; - private static final DistanceGenerationMode[] distancesGenerators = { + private static int minDetail = LodConfig.CLIENT.maxGenerationDetail.get().detailLevel; + private static int maxDetail = LodUtil.REGION_DETAIL_LEVEL + 1; + private static int minDistance = 0; + private static int maxDistance = LodConfig.CLIENT.lodChunkRenderDistance.get() * 16 * 2; + private static DistanceGenerationMode[] distancesGenerators = { DistanceGenerationMode.SURFACE, DistanceGenerationMode.SURFACE, DistanceGenerationMode.SURFACE, @@ -24,7 +24,7 @@ public class DetailDistanceUtil DistanceGenerationMode.SURFACE, DistanceGenerationMode.SURFACE}; - private static final LodDetail[] lodDetails = { + private static LodDetail[] lodDetails = { LodDetail.FULL, LodDetail.HALF, LodDetail.QUAD, @@ -37,18 +37,18 @@ public class DetailDistanceUtil LodDetail.SINGLE, LodDetail.SINGLE}; - private static final LodDetail[] lodDetailsCut = { + private static LodDetail[] lodDetailsCut = { LodDetail.FULL, LodDetail.FULL, LodDetail.HALF, LodDetail.QUAD, LodDetail.DOUBLE, - LodDetail.DOUBLE, - LodDetail.DOUBLE, - LodDetail.DOUBLE, - LodDetail.DOUBLE, - LodDetail.DOUBLE, - LodDetail.DOUBLE}; + LodDetail.SINGLE, + LodDetail.SINGLE, + LodDetail.SINGLE, + LodDetail.SINGLE, + LodDetail.SINGLE, + LodDetail.SINGLE}; public static int getDistanceRendering(int detail) {