From 27694036a5698133f9a3f8da6df64a28b619662f Mon Sep 17 00:00:00 2001 From: Daniel Mills Date: Sat, 24 Oct 2020 03:44:45 -0400 Subject: [PATCH] . --- .../iris/gen/ContextualTerrainProvider.java | 3 +- .../com/volmit/iris/gen/v2/DataProvider.java | 8 +++ .../com/volmit/iris/gen/v2/IrisComplex.java | 28 +++++++++- .../com/volmit/iris/gen/v2/IrisGenerator.java | 34 ------------- .../iris/gen/v2/IrisTerrainGenerator.java | 51 +++++++++++++++++++ .../java/com/volmit/iris/gen/v2/TestGen.java | 19 ++----- .../v2/scaffold/layer/ProceduralStream.java | 10 +++- .../stream/AwareConversionStream2D.java | 5 ++ .../stream/AwareConversionStream3D.java | 5 ++ .../v2/scaffold/stream/ConversionStream.java | 5 ++ .../v2/scaffold/stream/ForceDoubleStream.java | 41 +++++++++++++++ .../iris/object/IrisBiomeGeneratorLink.java | 8 +-- .../com/volmit/iris/object/IrisRegion.java | 18 +++---- 13 files changed, 168 insertions(+), 67 deletions(-) create mode 100644 src/main/java/com/volmit/iris/gen/v2/DataProvider.java delete mode 100644 src/main/java/com/volmit/iris/gen/v2/IrisGenerator.java create mode 100644 src/main/java/com/volmit/iris/gen/v2/IrisTerrainGenerator.java create mode 100644 src/main/java/com/volmit/iris/gen/v2/scaffold/stream/ForceDoubleStream.java diff --git a/src/main/java/com/volmit/iris/gen/ContextualTerrainProvider.java b/src/main/java/com/volmit/iris/gen/ContextualTerrainProvider.java index 86231b26c..d9a125bd2 100644 --- a/src/main/java/com/volmit/iris/gen/ContextualTerrainProvider.java +++ b/src/main/java/com/volmit/iris/gen/ContextualTerrainProvider.java @@ -31,6 +31,7 @@ import com.volmit.iris.gen.scaffold.Provisioned; import com.volmit.iris.gen.scaffold.TerrainChunk; import com.volmit.iris.gen.scaffold.TerrainProvider; import com.volmit.iris.gen.scaffold.TerrainTarget; +import com.volmit.iris.gen.v2.DataProvider; import com.volmit.iris.manager.IrisDataManager; import com.volmit.iris.noise.CNG; import com.volmit.iris.object.IrisBiome; @@ -54,7 +55,7 @@ import lombok.EqualsAndHashCode; @Data @EqualsAndHashCode(callSuper = false) -public abstract class ContextualTerrainProvider implements TerrainProvider, Listener +public abstract class ContextualTerrainProvider implements TerrainProvider, Listener, DataProvider { private Provisioned provisioner; private KList noLoot; diff --git a/src/main/java/com/volmit/iris/gen/v2/DataProvider.java b/src/main/java/com/volmit/iris/gen/v2/DataProvider.java new file mode 100644 index 000000000..4896986d8 --- /dev/null +++ b/src/main/java/com/volmit/iris/gen/v2/DataProvider.java @@ -0,0 +1,8 @@ +package com.volmit.iris.gen.v2; + +import com.volmit.iris.manager.IrisDataManager; + +public interface DataProvider +{ + public IrisDataManager getData(); +} diff --git a/src/main/java/com/volmit/iris/gen/v2/IrisComplex.java b/src/main/java/com/volmit/iris/gen/v2/IrisComplex.java index 5dd1b68b2..f18cbdaf6 100644 --- a/src/main/java/com/volmit/iris/gen/v2/IrisComplex.java +++ b/src/main/java/com/volmit/iris/gen/v2/IrisComplex.java @@ -1,25 +1,31 @@ package com.volmit.iris.gen.v2; +import com.volmit.iris.Iris; import com.volmit.iris.gen.v2.scaffold.layer.ProceduralStream; import com.volmit.iris.manager.IrisDataManager; import com.volmit.iris.object.InferredType; import com.volmit.iris.object.IrisBiome; +import com.volmit.iris.object.IrisBiomeGeneratorLink; import com.volmit.iris.object.IrisDimension; import com.volmit.iris.object.IrisRegion; import com.volmit.iris.object.NoiseStyle; +import com.volmit.iris.util.M; import com.volmit.iris.util.RNG; import lombok.Data; @Data -public class IrisComplex +public class IrisComplex implements DataProvider { + private IrisDataManager data; private ProceduralStream regionStream; private ProceduralStream bridgeStream; private ProceduralStream landBiomeStream; private ProceduralStream seaBiomeStream; private ProceduralStream shoreBiomeStream; private ProceduralStream baseBiomeStream; + private ProceduralStream heightStream; + private ProceduralStream heightMinStream; public IrisComplex() { @@ -53,6 +59,7 @@ public class IrisComplex public void flash(long seed, IrisDimension dimension, IrisDataManager data) { + this.data = data; RNG rng = new RNG(seed); //@builder regionStream = NoiseStyle.CELLULAR.stream(rng.nextRNG()) @@ -81,6 +88,25 @@ public class IrisComplex .convert((v) -> v >= dimension.getLandChance() ? InferredType.SEA : InferredType.LAND); baseBiomeStream = bridgeStream.convertAware2D((t, x, z) -> t.equals(InferredType.SEA) ? seaBiomeStream.get(x, z) : landBiomeStream.get(x, z)); + heightStream = baseBiomeStream.convertAware2D((b, x, z) -> { + double h = 0; + for(IrisBiomeGeneratorLink i : b.getGenerators()) + { + // TODO Use gen interp ..... or + // try trilerp again.... + try + { + h += i.getHeight(this, x, z, seed); + } + + catch(Throwable e) + { + e.printStackTrace(); + } + } + + return h+63; + }).forceDouble().interpolate().starcast9(12).into().bihermite(4, 0.01, 0); //@done } } diff --git a/src/main/java/com/volmit/iris/gen/v2/IrisGenerator.java b/src/main/java/com/volmit/iris/gen/v2/IrisGenerator.java deleted file mode 100644 index 951491564..000000000 --- a/src/main/java/com/volmit/iris/gen/v2/IrisGenerator.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.volmit.iris.gen.v2; - -import org.bukkit.block.Biome; -import org.bukkit.block.data.BlockData; - -import com.volmit.iris.gen.v2.scaffold.Hunk; -import com.volmit.iris.manager.IrisDataManager; -import com.volmit.iris.object.IrisDimension; -import com.volmit.iris.util.RNG; - -public class IrisGenerator -{ - private long seed; - private IrisDataManager data; - private IrisDimension dimension; - private IrisComplex complex; - - public IrisGenerator(long seed, IrisDimension dimension, IrisDataManager data) - { - this.seed = seed; - flash(); - } - - public void flash() - { - complex.flash(seed, dimension, data); - } - - public void generate(int x, int z, Hunk blocks, Hunk biomes) - { - RNG rng = new RNG((((long) x) << 32) | (z & 0xffffffffL)); - - } -} diff --git a/src/main/java/com/volmit/iris/gen/v2/IrisTerrainGenerator.java b/src/main/java/com/volmit/iris/gen/v2/IrisTerrainGenerator.java new file mode 100644 index 000000000..fb113e244 --- /dev/null +++ b/src/main/java/com/volmit/iris/gen/v2/IrisTerrainGenerator.java @@ -0,0 +1,51 @@ +package com.volmit.iris.gen.v2; + +import org.bukkit.Material; +import org.bukkit.block.Biome; +import org.bukkit.block.data.BlockData; + +import com.volmit.iris.gen.v2.scaffold.Hunk; +import com.volmit.iris.gen.v2.scaffold.layer.ProceduralStream; +import com.volmit.iris.manager.IrisDataManager; +import com.volmit.iris.object.IrisDimension; +import com.volmit.iris.object.NoiseStyle; +import com.volmit.iris.util.RNG; + +public class IrisTerrainGenerator +{ + private long seed; + private IrisDataManager data; + private IrisDimension dimension; + private IrisComplex complex; + + public IrisTerrainGenerator(long seed, IrisDimension dimension, IrisDataManager data) + { + this.seed = seed; + complex = new IrisComplex(); + this.data = data; + this.dimension = dimension; + flash(); + } + + public void flash() + { + complex.flash(seed, dimension, data); + } + + public ProceduralStream height = NoiseStyle.CELLULAR + .stream(69) + .fit(1, 69) + .interpolate().starcast9(4).into().bilinear(4) + ; + + public ProceduralStream rock = NoiseStyle.STATIC + .stream(88) + .select(Material.STONE, Material.ANDESITE) + .convertCached((mat) -> mat.createBlockData()); + + public void generate(int x, int z, Hunk blocks, Hunk biomes) + { + RNG rng = new RNG((((long) x) << 32) | (z & 0xffffffffL)); + complex.getHeightStream().fill2D(blocks, x * 16, z * 16, Material.STONE.createBlockData()); + } +} diff --git a/src/main/java/com/volmit/iris/gen/v2/TestGen.java b/src/main/java/com/volmit/iris/gen/v2/TestGen.java index 3d0c69515..65c697a52 100644 --- a/src/main/java/com/volmit/iris/gen/v2/TestGen.java +++ b/src/main/java/com/volmit/iris/gen/v2/TestGen.java @@ -12,6 +12,7 @@ import org.bukkit.block.data.BlockData; import org.bukkit.entity.Player; import org.bukkit.generator.ChunkGenerator; +import com.volmit.iris.Iris; import com.volmit.iris.gen.v2.scaffold.Hunk; import com.volmit.iris.gen.v2.scaffold.layer.ProceduralStream; import com.volmit.iris.object.NoiseStyle; @@ -22,27 +23,13 @@ public class TestGen { p.teleport(new WorldCreator("t/" + UUID.randomUUID().toString()).generator(new ChunkGenerator() { - //@builder - ProceduralStream rock = NoiseStyle.STATIC.stream(1337) - .select(new Material[] { - Material.STONE, - Material.ANDESITE - }).convertCached((m) -> m.createBlockData()); - ProceduralStream terrain = NoiseStyle.CELLULAR.stream(1337) - .fit(1, 32) - .zoom(1.75) - .interpolate().bilinear(4) - .into().starcast(4, 9); - - //@done + IrisTerrainGenerator tg = new IrisTerrainGenerator(1337, Iris.globaldata.getDimensionLoader().load("overworld"), Iris.globaldata); @Override public ChunkData generateChunkData(World world, Random random, int x, int z, BiomeGrid biome) { ChunkData c = createChunkData(world); - Hunk data = Hunk.view(c); - terrain.fill2D(data, x * 16, z * 16, rock); - + tg.generate(x, z, Hunk.view(c), null); return c; } }).createWorld().getSpawnLocation()); diff --git a/src/main/java/com/volmit/iris/gen/v2/scaffold/layer/ProceduralStream.java b/src/main/java/com/volmit/iris/gen/v2/scaffold/layer/ProceduralStream.java index e10b6e9c5..689f4e8fb 100644 --- a/src/main/java/com/volmit/iris/gen/v2/scaffold/layer/ProceduralStream.java +++ b/src/main/java/com/volmit/iris/gen/v2/scaffold/layer/ProceduralStream.java @@ -11,6 +11,7 @@ import com.volmit.iris.gen.v2.scaffold.stream.CachedStream2D; import com.volmit.iris.gen.v2.scaffold.stream.ClampedStream; import com.volmit.iris.gen.v2.scaffold.stream.ConversionStream; import com.volmit.iris.gen.v2.scaffold.stream.FittedStream; +import com.volmit.iris.gen.v2.scaffold.stream.ForceDoubleStream; import com.volmit.iris.gen.v2.scaffold.stream.Interpolated; import com.volmit.iris.gen.v2.scaffold.stream.OffsetStream; import com.volmit.iris.gen.v2.scaffold.stream.RoundingStream; @@ -26,6 +27,11 @@ public interface ProceduralStream extends ProceduralLayer, Interpolated return new RoundingStream(this); } + default ProceduralStream forceDouble() + { + return new ForceDoubleStream(this); + } + default ProceduralStream cache2D(int maxSize) { return new CachedStream2D(this, maxSize); @@ -115,7 +121,7 @@ public interface ProceduralStream extends ProceduralLayer, Interpolated } } - default void fillUp2D(Hunk h, double x, double z, V v) + default void fill2D(Hunk h, double x, double z, V v) { for(int i = 0; i < h.getWidth(); i++) { @@ -131,7 +137,7 @@ public interface ProceduralStream extends ProceduralLayer, Interpolated } } - default void fillUp3D(Hunk h, double x, int y, double z, V v) + default void fill3D(Hunk h, double x, int y, double z, V v) { for(int i = 0; i < h.getWidth(); i++) { diff --git a/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/AwareConversionStream2D.java b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/AwareConversionStream2D.java index 688ff21dd..a6d1f87d6 100644 --- a/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/AwareConversionStream2D.java +++ b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/AwareConversionStream2D.java @@ -19,6 +19,11 @@ public class AwareConversionStream2D extends BasicLayer implements Procedu @Override public double toDouble(V t) { + if(t instanceof Double) + { + return (double) t; + } + return 0; } diff --git a/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/AwareConversionStream3D.java b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/AwareConversionStream3D.java index a685595ee..98bd3d677 100644 --- a/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/AwareConversionStream3D.java +++ b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/AwareConversionStream3D.java @@ -19,6 +19,11 @@ public class AwareConversionStream3D extends BasicLayer implements Procedu @Override public double toDouble(V t) { + if(t instanceof Double) + { + return (double) t; + } + return 0; } diff --git a/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/ConversionStream.java b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/ConversionStream.java index 5afc9cec3..76deb3e32 100644 --- a/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/ConversionStream.java +++ b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/ConversionStream.java @@ -20,6 +20,11 @@ public class ConversionStream extends BasicLayer implements ProceduralStre @Override public double toDouble(V t) { + if(t instanceof Double) + { + return (double) t; + } + return 0; } diff --git a/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/ForceDoubleStream.java b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/ForceDoubleStream.java new file mode 100644 index 000000000..48fe0ab91 --- /dev/null +++ b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/ForceDoubleStream.java @@ -0,0 +1,41 @@ +package com.volmit.iris.gen.v2.scaffold.stream; + +import com.volmit.iris.gen.v2.scaffold.layer.BasicLayer; +import com.volmit.iris.gen.v2.scaffold.layer.ProceduralStream; + +public class ForceDoubleStream extends BasicLayer implements ProceduralStream +{ + private final ProceduralStream stream; + + public ForceDoubleStream(ProceduralStream stream) + { + super(); + this.stream = stream; + } + + @Override + public double toDouble(T t) + { + return (double) t; + } + + @SuppressWarnings("unchecked") + @Override + public T fromDouble(double d) + { + return (T) Double.valueOf(d); + } + + @Override + public T get(double x, double z) + { + return stream.get(x, z); + } + + @Override + public T get(double x, double y, double z) + { + return stream.get(x, y, z); + } + +} diff --git a/src/main/java/com/volmit/iris/object/IrisBiomeGeneratorLink.java b/src/main/java/com/volmit/iris/object/IrisBiomeGeneratorLink.java index f0e3c88a3..a07a2bf66 100644 --- a/src/main/java/com/volmit/iris/object/IrisBiomeGeneratorLink.java +++ b/src/main/java/com/volmit/iris/object/IrisBiomeGeneratorLink.java @@ -1,8 +1,8 @@ package com.volmit.iris.object; import com.volmit.iris.Iris; -import com.volmit.iris.gen.ContextualTerrainProvider; import com.volmit.iris.gen.atomics.AtomicCache; +import com.volmit.iris.gen.v2.DataProvider; import com.volmit.iris.util.DependsOn; import com.volmit.iris.util.Desc; import com.volmit.iris.util.DontObfuscate; @@ -48,11 +48,11 @@ public class IrisBiomeGeneratorLink private final transient AtomicCache gen = new AtomicCache<>(); - public IrisGenerator getCachedGenerator(ContextualTerrainProvider g) + public IrisGenerator getCachedGenerator(DataProvider g) { return gen.aquire(() -> { - IrisGenerator gen = g != null ? g.loadGenerator(getGenerator()) : Iris.globaldata.getGeneratorLoader().load(getGenerator()); + IrisGenerator gen = g != null ? g.getData().getGeneratorLoader().load(getGenerator()) : Iris.globaldata.getGeneratorLoader().load(getGenerator()); if(gen == null) { @@ -63,7 +63,7 @@ public class IrisBiomeGeneratorLink }); } - public double getHeight(ContextualTerrainProvider xg, double x, double z, long seed) + public double getHeight(DataProvider xg, double x, double z, long seed) { double g = getCachedGenerator(xg).getHeight(x, z, seed); g = g < 0 ? 0 : g; diff --git a/src/main/java/com/volmit/iris/object/IrisRegion.java b/src/main/java/com/volmit/iris/object/IrisRegion.java index 91107db6b..97f565b8c 100644 --- a/src/main/java/com/volmit/iris/object/IrisRegion.java +++ b/src/main/java/com/volmit/iris/object/IrisRegion.java @@ -1,8 +1,8 @@ package com.volmit.iris.object; import com.volmit.iris.Iris; -import com.volmit.iris.gen.ContextualTerrainProvider; import com.volmit.iris.gen.atomics.AtomicCache; +import com.volmit.iris.gen.v2.DataProvider; import com.volmit.iris.noise.CNG; import com.volmit.iris.util.ArrayType; import com.volmit.iris.util.Desc; @@ -382,7 +382,7 @@ public class IrisRegion extends IrisRegistrant implements IRare return getShoreHeightGenerator().fitDouble(shoreHeightMin, shoreHeightMax, x / shoreHeightZoom, z / shoreHeightZoom); } - public KList getAllBiomes(ContextualTerrainProvider g) + public KList getAllBiomes(DataProvider g) { KMap b = new KMap<>(); KSet names = new KSet<>(); @@ -422,7 +422,7 @@ public class IrisRegion extends IrisRegistrant implements IRare return b.v(); } - public KList getBiomes(ContextualTerrainProvider g, InferredType type) + public KList getBiomes(DataProvider g, InferredType type) { if(type.equals(InferredType.LAND)) { @@ -457,7 +457,7 @@ public class IrisRegion extends IrisRegistrant implements IRare return new KList<>(); } - public KList getRealCaveBiomes(ContextualTerrainProvider g) + public KList getRealCaveBiomes(DataProvider g) { return realCaveBiomes.aquire(() -> { @@ -472,7 +472,7 @@ public class IrisRegion extends IrisRegistrant implements IRare }); } - public KList getRealLakeBiomes(ContextualTerrainProvider g) + public KList getRealLakeBiomes(DataProvider g) { return realLakeBiomes.aquire(() -> { @@ -487,7 +487,7 @@ public class IrisRegion extends IrisRegistrant implements IRare }); } - public KList getRealRiverBiomes(ContextualTerrainProvider g) + public KList getRealRiverBiomes(DataProvider g) { return realRiverBiomes.aquire(() -> { @@ -502,7 +502,7 @@ public class IrisRegion extends IrisRegistrant implements IRare }); } - public KList getRealShoreBiomes(ContextualTerrainProvider g) + public KList getRealShoreBiomes(DataProvider g) { return realShoreBiomes.aquire(() -> { @@ -517,7 +517,7 @@ public class IrisRegion extends IrisRegistrant implements IRare }); } - public KList getRealSeaBiomes(ContextualTerrainProvider g) + public KList getRealSeaBiomes(DataProvider g) { return realSeaBiomes.aquire(() -> { @@ -532,7 +532,7 @@ public class IrisRegion extends IrisRegistrant implements IRare }); } - public KList getRealLandBiomes(ContextualTerrainProvider g) + public KList getRealLandBiomes(DataProvider g) { return realLandBiomes.aquire(() -> {