From 09eea400eba9585579dd7c5e69275f692675f948 Mon Sep 17 00:00:00 2001 From: James Seibel Date: Mon, 29 May 2023 10:43:06 -0500 Subject: [PATCH] Full data source and WorldGen refactoring --- .../override/worldGenerator/IDhApiWorldGenerator.java | 4 ++-- .../fullData/accessor/SingleColumnFullDataAccessor.java | 1 + .../dataObjects/fullData/sources/CompleteFullDataSource.java | 3 +++ .../fullData/sources/HighDetailIncompleteFullDataSource.java | 3 +++ .../fullData/sources/LowDetailIncompleteFullDataSource.java | 3 +++ .../fullData/sources/interfaces/IFullDataSource.java | 3 +++ .../java/com/seibel/lod/core/generation/BatchGenerator.java | 4 ++-- .../com/seibel/lod/core/generation/WorldGenerationQueue.java | 4 ++-- .../worldGeneratorInjection/objects/TestWorldGenerator.java | 4 ++-- 9 files changed, 21 insertions(+), 8 deletions(-) diff --git a/api/src/main/java/com/seibel/lod/api/interfaces/override/worldGenerator/IDhApiWorldGenerator.java b/api/src/main/java/com/seibel/lod/api/interfaces/override/worldGenerator/IDhApiWorldGenerator.java index 6bf3b8b6c..bc4187d04 100644 --- a/api/src/main/java/com/seibel/lod/api/interfaces/override/worldGenerator/IDhApiWorldGenerator.java +++ b/api/src/main/java/com/seibel/lod/api/interfaces/override/worldGenerator/IDhApiWorldGenerator.java @@ -35,7 +35,7 @@ public interface IDhApiWorldGenerator extends Closeable, IDhApiOverrideable * * @see EDhApiDetailLevel */ - default byte getMinDataDetailLevel() { return EDhApiDetailLevel.BLOCK.detailLevel; } + default byte getSmallestDataDetailLevel() { return EDhApiDetailLevel.BLOCK.detailLevel; } /** * Defines the largest datapoint size that can be generated at a time.
* Minimum detail level is 0 (1 block)
@@ -44,7 +44,7 @@ public interface IDhApiWorldGenerator extends Closeable, IDhApiOverrideable * * @see EDhApiDetailLevel */ - default byte getMaxDataDetailLevel() { return EDhApiDetailLevel.BLOCK.detailLevel; } + default byte getLargestDataDetailLevel() { return EDhApiDetailLevel.BLOCK.detailLevel; } /** * When creating generation requests the system will attempt to group nearby tasks together.

diff --git a/core/src/main/java/com/seibel/lod/core/dataObjects/fullData/accessor/SingleColumnFullDataAccessor.java b/core/src/main/java/com/seibel/lod/core/dataObjects/fullData/accessor/SingleColumnFullDataAccessor.java index 8a1b041af..a21640900 100644 --- a/core/src/main/java/com/seibel/lod/core/dataObjects/fullData/accessor/SingleColumnFullDataAccessor.java +++ b/core/src/main/java/com/seibel/lod/core/dataObjects/fullData/accessor/SingleColumnFullDataAccessor.java @@ -31,6 +31,7 @@ public class SingleColumnFullDataAccessor implements IFullDataAccessor + /** @return true if any data exists in this column. */ public boolean doesColumnExist() { long[] dataColumn = this.dataArrays[this.dataArrayIndex]; diff --git a/core/src/main/java/com/seibel/lod/core/dataObjects/fullData/sources/CompleteFullDataSource.java b/core/src/main/java/com/seibel/lod/core/dataObjects/fullData/sources/CompleteFullDataSource.java index fe2cb44fa..1ea0be2de 100644 --- a/core/src/main/java/com/seibel/lod/core/dataObjects/fullData/sources/CompleteFullDataSource.java +++ b/core/src/main/java/com/seibel/lod/core/dataObjects/fullData/sources/CompleteFullDataSource.java @@ -407,6 +407,9 @@ public class CompleteFullDataSource extends FullDataArrayAccessor implements IFu public boolean isEmpty() { return this.isEmpty; } public void markNotEmpty() { this.isEmpty = false; } + @Override + public int getWidthInDataPoints() { return this.width; } + //========// diff --git a/core/src/main/java/com/seibel/lod/core/dataObjects/fullData/sources/HighDetailIncompleteFullDataSource.java b/core/src/main/java/com/seibel/lod/core/dataObjects/fullData/sources/HighDetailIncompleteFullDataSource.java index 3e655f195..ae594e2d4 100644 --- a/core/src/main/java/com/seibel/lod/core/dataObjects/fullData/sources/HighDetailIncompleteFullDataSource.java +++ b/core/src/main/java/com/seibel/lod/core/dataObjects/fullData/sources/HighDetailIncompleteFullDataSource.java @@ -435,6 +435,9 @@ public class HighDetailIncompleteFullDataSource implements IIncompleteFullDataSo @Override public boolean isEmpty() { return this.isEmpty; } + @Override + public int getWidthInDataPoints() { return SECTION_SIZE; } + private int calculateOffset(int chunkX, int chunkZ) { diff --git a/core/src/main/java/com/seibel/lod/core/dataObjects/fullData/sources/LowDetailIncompleteFullDataSource.java b/core/src/main/java/com/seibel/lod/core/dataObjects/fullData/sources/LowDetailIncompleteFullDataSource.java index 2513c1474..e8d22eaa1 100644 --- a/core/src/main/java/com/seibel/lod/core/dataObjects/fullData/sources/LowDetailIncompleteFullDataSource.java +++ b/core/src/main/java/com/seibel/lod/core/dataObjects/fullData/sources/LowDetailIncompleteFullDataSource.java @@ -305,6 +305,9 @@ public class LowDetailIncompleteFullDataSource extends FullDataArrayAccessor imp public boolean isEmpty() { return this.isEmpty; } public void markNotEmpty() { this.isEmpty = false; } + @Override + public int getWidthInDataPoints() { return WIDTH; } + //===============// diff --git a/core/src/main/java/com/seibel/lod/core/dataObjects/fullData/sources/interfaces/IFullDataSource.java b/core/src/main/java/com/seibel/lod/core/dataObjects/fullData/sources/interfaces/IFullDataSource.java index 7de7a153d..567f4d555 100644 --- a/core/src/main/java/com/seibel/lod/core/dataObjects/fullData/sources/interfaces/IFullDataSource.java +++ b/core/src/main/java/com/seibel/lod/core/dataObjects/fullData/sources/interfaces/IFullDataSource.java @@ -48,6 +48,9 @@ public interface IFullDataSource boolean isEmpty(); + /** AKA; the max relative position that {@link IFullDataSource#tryGet(int, int)} can accept for either X or Z */ + int getWidthInDataPoints(); + //======// diff --git a/core/src/main/java/com/seibel/lod/core/generation/BatchGenerator.java b/core/src/main/java/com/seibel/lod/core/generation/BatchGenerator.java index dfcd6dba1..59ea2fe5d 100644 --- a/core/src/main/java/com/seibel/lod/core/generation/BatchGenerator.java +++ b/core/src/main/java/com/seibel/lod/core/generation/BatchGenerator.java @@ -88,9 +88,9 @@ public class BatchGenerator implements IDhApiWorldGenerator public EDhApiWorldGenThreadMode getThreadingMode() { return EDhApiWorldGenThreadMode.MULTI_THREADED; } @Override - public byte getMinDataDetailLevel() { return LodUtil.BLOCK_DETAIL_LEVEL; } + public byte getSmallestDataDetailLevel() { return LodUtil.BLOCK_DETAIL_LEVEL; } @Override - public byte getMaxDataDetailLevel() { return LodUtil.BLOCK_DETAIL_LEVEL; } + public byte getLargestDataDetailLevel() { return LodUtil.BLOCK_DETAIL_LEVEL; } @Override public byte getMinGenerationGranularity() { return LodUtil.CHUNK_DETAIL_LEVEL; } diff --git a/core/src/main/java/com/seibel/lod/core/generation/WorldGenerationQueue.java b/core/src/main/java/com/seibel/lod/core/generation/WorldGenerationQueue.java index 7b84fda3f..194c015d6 100644 --- a/core/src/main/java/com/seibel/lod/core/generation/WorldGenerationQueue.java +++ b/core/src/main/java/com/seibel/lod/core/generation/WorldGenerationQueue.java @@ -70,8 +70,8 @@ public class WorldGenerationQueue implements Closeable this.generator = generator; this.maxGranularity = generator.getMaxGenerationGranularity(); this.minGranularity = generator.getMinGenerationGranularity(); - this.maxDataDetail = generator.getMaxDataDetailLevel(); - this.minDataDetail = generator.getMinDataDetailLevel(); + this.maxDataDetail = generator.getLargestDataDetailLevel(); + this.minDataDetail = generator.getSmallestDataDetailLevel(); int treeWidth = Config.Client.Graphics.Quality.lodChunkRenderDistance.get() * LodUtil.CHUNK_WIDTH * 2; // TODO the *2 is to allow for generation edge cases, and should probably be removed at some point byte treeMinDetailLevel = LodUtil.BLOCK_DETAIL_LEVEL; // the tree shouldn't need to go this low, but just in case diff --git a/core/src/test/java/testItems/worldGeneratorInjection/objects/TestWorldGenerator.java b/core/src/test/java/testItems/worldGeneratorInjection/objects/TestWorldGenerator.java index e285c4bdc..436729043 100644 --- a/core/src/test/java/testItems/worldGeneratorInjection/objects/TestWorldGenerator.java +++ b/core/src/test/java/testItems/worldGeneratorInjection/objects/TestWorldGenerator.java @@ -38,10 +38,10 @@ public class TestWorldGenerator implements IDhApiWorldGenerator //======================// @Override - public byte getMinDataDetailLevel() { return LodUtil.BLOCK_DETAIL_LEVEL; } + public byte getSmallestDataDetailLevel() { return LodUtil.BLOCK_DETAIL_LEVEL; } @Override - public byte getMaxDataDetailLevel() { return LodUtil.BLOCK_DETAIL_LEVEL; } + public byte getLargestDataDetailLevel() { return LodUtil.BLOCK_DETAIL_LEVEL; } @Override public byte getMinGenerationGranularity() { return LodUtil.CHUNK_DETAIL_LEVEL; }