diff --git a/common/src/main/java/com/dfsek/terra/biome/StandardBiomeProvider.java b/common/src/main/java/com/dfsek/terra/biome/StandardBiomeProvider.java index 872d7e854..8a7a2ae50 100644 --- a/common/src/main/java/com/dfsek/terra/biome/StandardBiomeProvider.java +++ b/common/src/main/java/com/dfsek/terra/biome/StandardBiomeProvider.java @@ -16,7 +16,7 @@ import java.util.concurrent.ExecutionException; public class StandardBiomeProvider implements BiomeProvider { private final BiomePipeline pipeline; private final LoadingCache holderCache = CacheBuilder.newBuilder() - .maximumSize(1024) + .maximumSize(64) .build( new CacheLoader() { @Override diff --git a/common/src/main/java/com/dfsek/terra/biome/pipeline/BiomeHolder.java b/common/src/main/java/com/dfsek/terra/biome/pipeline/BiomeHolder.java index bd2305fe1..4882edee0 100644 --- a/common/src/main/java/com/dfsek/terra/biome/pipeline/BiomeHolder.java +++ b/common/src/main/java/com/dfsek/terra/biome/pipeline/BiomeHolder.java @@ -13,4 +13,6 @@ public interface BiomeHolder { void fill(BiomeSource source); TerraBiome getBiome(int x, int z); + + TerraBiome getBiomeRaw(int x, int z); } diff --git a/common/src/main/java/com/dfsek/terra/biome/pipeline/TerraBiomeHolder.java b/common/src/main/java/com/dfsek/terra/biome/pipeline/TerraBiomeHolder.java index fa2a39ac0..619f3cd2d 100644 --- a/common/src/main/java/com/dfsek/terra/biome/pipeline/TerraBiomeHolder.java +++ b/common/src/main/java/com/dfsek/terra/biome/pipeline/TerraBiomeHolder.java @@ -10,17 +10,21 @@ public class TerraBiomeHolder implements BiomeHolder { private final Vector2 origin; private final int width; private TerraBiome[][] biomes; + private final int offset; public TerraBiomeHolder(int width, Vector2 origin) { + width += 2; this.width = width; biomes = new TerraBiome[width][width]; this.origin = origin; + this.offset = 1; } - private TerraBiomeHolder(TerraBiome[][] biomes, Vector2 origin, int width) { + private TerraBiomeHolder(TerraBiome[][] biomes, Vector2 origin, int width, int offset) { this.biomes = biomes; this.origin = origin; this.width = width; + this.offset = 2 * offset; } @Override @@ -41,7 +45,7 @@ public class TerraBiomeHolder implements BiomeHolder { biomes[x * 2 + 1][z * 2 + 1] = expander.getBetween(x + 1 + origin.getX(), z + 1 + origin.getZ(), old[x][z], old[x + 1][z + 1], old[x][z + 1], old[x + 1][z]); } } - return new TerraBiomeHolder(biomes, origin.setX(origin.getX() * 2 - 1).setZ(origin.getZ() * 2 - 1), newWidth); + return new TerraBiomeHolder(biomes, origin.setX(origin.getX() * 2 - 1).setZ(origin.getZ() * 2 - 1), newWidth, offset); } @Override @@ -65,6 +69,13 @@ public class TerraBiomeHolder implements BiomeHolder { @Override public TerraBiome getBiome(int x, int z) { + x += offset; + z += offset; + return getBiomeRaw(x, z); + } + + @Override + public TerraBiome getBiomeRaw(int x, int z) { if(x >= width || z >= width || x < 0 || z < 0) return null; return biomes[x][z]; } diff --git a/common/src/main/java/com/dfsek/terra/biome/pipeline/mutator/BiomeMutator.java b/common/src/main/java/com/dfsek/terra/biome/pipeline/mutator/BiomeMutator.java index deb10d379..7a941b285 100644 --- a/common/src/main/java/com/dfsek/terra/biome/pipeline/mutator/BiomeMutator.java +++ b/common/src/main/java/com/dfsek/terra/biome/pipeline/mutator/BiomeMutator.java @@ -19,7 +19,7 @@ public interface BiomeMutator { public TerraBiome getBiome(int x, int z) { - return biomes.getBiome(x + offX, z + offZ); + return biomes.getBiomeRaw(x + offX, z + offZ); } } } diff --git a/common/src/test/java/biome/BiomeTest.java b/common/src/test/java/biome/BiomeTest.java index e83b4a4f7..2b073e6cc 100644 --- a/common/src/test/java/biome/BiomeTest.java +++ b/common/src/test/java/biome/BiomeTest.java @@ -61,19 +61,25 @@ public class BiomeTest { BiomeSource source = new RandomSource(climate, sourceSampler); - BiomeProvider provider = new StandardBiomeProvider.StandardBiomeProviderBuilder((seed) -> new BiomePipeline.BiomePipelineBuilder(3) - .addStage(new ExpanderStage(new FractalExpander(whiteNoise(1)))) - .addStage(new MutatorStage(new ReplaceMutator("OCEAN_TEMP", oceanBiomes, whiteNoise(243)))) - .addStage(new MutatorStage(new ReplaceMutator("LAND_TEMP", landBiomes, whiteNoise(243)))) - .addStage(new ExpanderStage(new FractalExpander(whiteNoise(2)))) - .addStage(new ExpanderStage(new FractalExpander(whiteNoise(2)))) - .addStage(new MutatorStage(new SmoothMutator(whiteNoise(3)))) - .addStage(new ExpanderStage(new FractalExpander(whiteNoise(4)))) - .addStage(new MutatorStage(new BorderMutator("OCEAN", "LAND", whiteNoise(1234), beachBiomes))) - .addStage(new ExpanderStage(new FractalExpander(whiteNoise(5)))) - .addStage(new ExpanderStage(new FractalExpander(whiteNoise(5)))) - .addStage(new MutatorStage(new SmoothMutator(whiteNoise(6)))) - .build(source)).build(0); + BiomeProvider provider = new StandardBiomeProvider.StandardBiomeProviderBuilder((seed) -> { + BiomePipeline pipeline = new BiomePipeline.BiomePipelineBuilder(2) + .addStage(new ExpanderStage(new FractalExpander(whiteNoise(1)))) + .addStage(new MutatorStage(new ReplaceMutator("OCEAN_TEMP", oceanBiomes, whiteNoise(243)))) + .addStage(new MutatorStage(new ReplaceMutator("LAND_TEMP", landBiomes, whiteNoise(243)))) + .addStage(new ExpanderStage(new FractalExpander(whiteNoise(2)))) + .addStage(new ExpanderStage(new FractalExpander(whiteNoise(2)))) + .addStage(new MutatorStage(new SmoothMutator(whiteNoise(3)))) + .addStage(new ExpanderStage(new FractalExpander(whiteNoise(4)))) + .addStage(new ExpanderStage(new FractalExpander(whiteNoise(4)))) + .addStage(new ExpanderStage(new FractalExpander(whiteNoise(4)))) + .addStage(new ExpanderStage(new FractalExpander(whiteNoise(4)))) + .addStage(new MutatorStage(new BorderMutator("OCEAN", "LAND", whiteNoise(1234), beachBiomes))) + .addStage(new MutatorStage(new SmoothMutator(whiteNoise(6)))) + .addStage(new MutatorStage(new SmoothMutator(whiteNoise(6)))) + .build(source); + System.out.println("Size: " + pipeline.getSize()); + return pipeline; + }).build(0); int size = 1000;