From ec2933f23c1691d9ebe0534c7788d41cd47c171b Mon Sep 17 00:00:00 2001 From: Leonardo Date: Sat, 14 Aug 2021 14:14:26 +0200 Subject: [PATCH 1/3] Fixed generation detail not being used --- src/main/java/com/seibel/lod/builders/LodNodeBuilder.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/seibel/lod/builders/LodNodeBuilder.java b/src/main/java/com/seibel/lod/builders/LodNodeBuilder.java index 2b66167a3..73c839435 100644 --- a/src/main/java/com/seibel/lod/builders/LodNodeBuilder.java +++ b/src/main/java/com/seibel/lod/builders/LodNodeBuilder.java @@ -25,6 +25,7 @@ import java.util.concurrent.Executors; import com.seibel.lod.enums.DistanceGenerationMode; import com.seibel.lod.enums.LodDetail; +import com.seibel.lod.handlers.LodConfig; import com.seibel.lod.objects.LodDataPoint; import com.seibel.lod.objects.LodQuadTreeDimension; import com.seibel.lod.objects.LodQuadTreeNode; @@ -139,7 +140,7 @@ public class LodNodeBuilder public List generateLodNodeFromChunk(IChunk chunk, LodBuilderConfig config) throws IllegalArgumentException { - LodDetail detail = LodDetail.FULL; + LodDetail detail = LodConfig.CLIENT.maxGenerationDetail.get(); List lodNodeList = new ArrayList<>(); if (chunk == null) throw new IllegalArgumentException("generateLodFromChunk given a null chunk"); From 86bf551de802b4f615e534ec398900447eec3408 Mon Sep 17 00:00:00 2001 From: Leonardo Date: Sat, 14 Aug 2021 15:04:54 +0200 Subject: [PATCH 2/3] Lod not saving fix --- src/main/java/com/seibel/lod/objects/LodQuadTree.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/seibel/lod/objects/LodQuadTree.java b/src/main/java/com/seibel/lod/objects/LodQuadTree.java index 8f1ab0474..4e9509eda 100644 --- a/src/main/java/com/seibel/lod/objects/LodQuadTree.java +++ b/src/main/java/com/seibel/lod/objects/LodQuadTree.java @@ -364,7 +364,7 @@ public class LodQuadTree lodNode.combineData(dataList); // update sub regions if requested - if (lodNode.detailLevel < LodUtil.CHUNK_DETAIL_LEVEL && recursiveUpdate) + if (lodNode.detailLevel < LodUtil.REGION_DETAIL_LEVEL && recursiveUpdate) { this.parent.updateRegion(recursiveUpdate); } From 8102063850d2510d83156739aefaf6e3aab554ec Mon Sep 17 00:00:00 2001 From: Leonardo Date: Sat, 14 Aug 2021 15:17:03 +0200 Subject: [PATCH 3/3] Added the cutTreeAtLevel method --- .../com/seibel/lod/objects/LodQuadTree.java | 27 ++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/seibel/lod/objects/LodQuadTree.java b/src/main/java/com/seibel/lod/objects/LodQuadTree.java index 4e9509eda..536998b26 100644 --- a/src/main/java/com/seibel/lod/objects/LodQuadTree.java +++ b/src/main/java/com/seibel/lod/objects/LodQuadTree.java @@ -328,7 +328,32 @@ public class LodQuadTree children[NS][WE] = new LodQuadTree(this, (byte) (lodNode.detailLevel - 1), new RegionPos(childRegionX, childRegionZ)); } - + + /** + * Delete all the children + */ + public void deleteChildren() + { + children = new LodQuadTree[2][2]; + } + + /** + * Cut the tree at the given target level + */ + public void cutTreeAtLevel(byte targetLevel) { + if (targetLevel <= lodNode.detailLevel) { + deleteChildren(); + } else { + for (int NS = 0; NS <= 1; NS++) { + for (int WE = 0; WE <= 1; WE++) { + if (getChild(NS, WE) != null) { + getChild(NS, WE).cutTreeAtLevel(targetLevel); + } + } + } + } + } + /** * Update this region's data, specifically levelFull and lodNodeData. *