From 2c8c23522b01f5794442b991975ff47f6cba9902 Mon Sep 17 00:00:00 2001 From: Daniel Mills Date: Thu, 29 Oct 2020 01:17:39 -0400 Subject: [PATCH] Auto stash before merge of "master" and "origin/master" --- .idea/misc.xml | 4 + .idea/workspace.xml | 52 ++--- pom.xml | 9 + .../com/volmit/iris/gen/v2/IrisComplex.java | 59 +++--- .../iris/gen/v2/IrisTerrainGenerator.java | 15 +- .../java/com/volmit/iris/gen/v2/TestGen.java | 14 +- .../{layer => stream}/BasicLayer.java | 2 +- .../gen/v2/scaffold/stream/BasicStream.java | 40 ++++ .../gen/v2/scaffold/stream/ClampedStream.java | 49 ----- .../stream/CoordinateBitShiftLeftStream.java | 42 ---- .../stream/CoordinateBitShiftRightStream.java | 42 ---- .../v2/scaffold/stream/ForceDoubleStream.java | 41 ---- .../gen/v2/scaffold/stream/OffsetStream.java | 46 ----- .../{layer => stream}/ProceduralLayer.java | 2 +- .../{layer => stream}/ProceduralStream.java | 97 ++++++---- .../gen/v2/scaffold/stream/To3DStream.java | 40 ---- .../v2/scaffold/stream/TriHermiteStream.java | 140 -------------- .../v2/scaffold/stream/TricubicStream.java | 139 -------------- .../gen/v2/scaffold/stream/ZoomStream.java | 46 ----- .../stream/{ => arithmetic}/AddingStream.java | 20 +- .../stream/arithmetic/ClampedStream.java | 47 +++++ .../CoordinateBitShiftLeftStream.java | 40 ++++ .../CoordinateBitShiftRightStream.java | 40 ++++ .../{ => arithmetic}/DividingStream.java | 20 +- .../stream/{ => arithmetic}/FittedStream.java | 20 +- .../stream/{ => arithmetic}/MaxingStream.java | 20 +- .../{ => arithmetic}/MinningStream.java | 20 +- .../stream/{ => arithmetic}/ModuloStream.java | 20 +- .../{ => arithmetic}/MultiplyingStream.java | 20 +- .../stream/arithmetic/OffsetStream.java | 44 +++++ .../stream/arithmetic/RadialStream.java | 50 +++++ .../RoundingDoubleStream.java | 10 +- .../stream/arithmetic/SlopeStream.java | 49 +++++ .../{ => arithmetic}/SubtractingStream.java | 20 +- .../stream/arithmetic/ZoomStream.java | 44 +++++ .../AwareConversionStream2D.java | 17 +- .../AwareConversionStream3D.java | 17 +- .../{ => convert}/CachedConversionStream.java | 16 +- .../{ => convert}/ConversionStream.java | 18 +- .../stream/convert/ForceDoubleStream.java | 40 ++++ .../stream/{ => convert}/RoundingStream.java | 9 +- .../stream/{ => convert}/SelectionStream.java | 8 +- .../{ => convert}/SignificanceStream.java | 8 +- .../scaffold/stream/convert/To3DStream.java | 36 ++++ .../{ => interpolation}/BiHermiteStream.java | 49 +++-- .../{ => interpolation}/BiStarcastStream.java | 21 +- .../{ => interpolation}/BicubicStream.java | 49 +++-- .../{ => interpolation}/BilinearStream.java | 25 ++- .../{ => interpolation}/Interpolated.java | 4 +- .../InterpolatingStream.java | 17 +- .../{ => interpolation}/Interpolator.java | 4 +- .../InterpolatorFactory.java | 4 +- .../interpolation/TriHermiteStream.java | 139 ++++++++++++++ .../TriStarcastStream.java | 25 ++- .../stream/interpolation/TricubicStream.java | 138 ++++++++++++++ .../{ => interpolation}/TrilinearStream.java | 33 ++-- .../stream/{ => sources}/CNGStream.java | 16 +- .../stream/{ => sources}/FunctionStream.java | 8 +- .../stream/{ => utility}/CachedStream2D.java | 8 +- .../stream/utility/ProfiledStream.java | 179 ++++++++++++++++++ .../stream/utility/SemaphoreStream.java | 47 +++++ .../stream/utility/SynchronizedStream.java | 44 +++++ src/main/java/com/volmit/iris/noise/CNG.java | 10 +- .../com/volmit/iris/object/IrisBiome.java | 12 +- .../com/volmit/iris/object/NoiseStyle.java | 2 +- 65 files changed, 1421 insertions(+), 945 deletions(-) rename src/main/java/com/volmit/iris/gen/v2/scaffold/{layer => stream}/BasicLayer.java (90%) create mode 100644 src/main/java/com/volmit/iris/gen/v2/scaffold/stream/BasicStream.java delete mode 100644 src/main/java/com/volmit/iris/gen/v2/scaffold/stream/ClampedStream.java delete mode 100644 src/main/java/com/volmit/iris/gen/v2/scaffold/stream/CoordinateBitShiftLeftStream.java delete mode 100644 src/main/java/com/volmit/iris/gen/v2/scaffold/stream/CoordinateBitShiftRightStream.java delete mode 100644 src/main/java/com/volmit/iris/gen/v2/scaffold/stream/ForceDoubleStream.java delete mode 100644 src/main/java/com/volmit/iris/gen/v2/scaffold/stream/OffsetStream.java rename src/main/java/com/volmit/iris/gen/v2/scaffold/{layer => stream}/ProceduralLayer.java (78%) rename src/main/java/com/volmit/iris/gen/v2/scaffold/{layer => stream}/ProceduralStream.java (84%) delete mode 100644 src/main/java/com/volmit/iris/gen/v2/scaffold/stream/To3DStream.java delete mode 100644 src/main/java/com/volmit/iris/gen/v2/scaffold/stream/TriHermiteStream.java delete mode 100644 src/main/java/com/volmit/iris/gen/v2/scaffold/stream/TricubicStream.java delete mode 100644 src/main/java/com/volmit/iris/gen/v2/scaffold/stream/ZoomStream.java rename src/main/java/com/volmit/iris/gen/v2/scaffold/stream/{ => arithmetic}/AddingStream.java (58%) create mode 100644 src/main/java/com/volmit/iris/gen/v2/scaffold/stream/arithmetic/ClampedStream.java create mode 100644 src/main/java/com/volmit/iris/gen/v2/scaffold/stream/arithmetic/CoordinateBitShiftLeftStream.java create mode 100644 src/main/java/com/volmit/iris/gen/v2/scaffold/stream/arithmetic/CoordinateBitShiftRightStream.java rename src/main/java/com/volmit/iris/gen/v2/scaffold/stream/{ => arithmetic}/DividingStream.java (58%) rename src/main/java/com/volmit/iris/gen/v2/scaffold/stream/{ => arithmetic}/FittedStream.java (59%) rename src/main/java/com/volmit/iris/gen/v2/scaffold/stream/{ => arithmetic}/MaxingStream.java (57%) rename src/main/java/com/volmit/iris/gen/v2/scaffold/stream/{ => arithmetic}/MinningStream.java (57%) rename src/main/java/com/volmit/iris/gen/v2/scaffold/stream/{ => arithmetic}/ModuloStream.java (58%) rename src/main/java/com/volmit/iris/gen/v2/scaffold/stream/{ => arithmetic}/MultiplyingStream.java (58%) create mode 100644 src/main/java/com/volmit/iris/gen/v2/scaffold/stream/arithmetic/OffsetStream.java create mode 100644 src/main/java/com/volmit/iris/gen/v2/scaffold/stream/arithmetic/RadialStream.java rename src/main/java/com/volmit/iris/gen/v2/scaffold/stream/{ => arithmetic}/RoundingDoubleStream.java (66%) create mode 100644 src/main/java/com/volmit/iris/gen/v2/scaffold/stream/arithmetic/SlopeStream.java rename src/main/java/com/volmit/iris/gen/v2/scaffold/stream/{ => arithmetic}/SubtractingStream.java (58%) create mode 100644 src/main/java/com/volmit/iris/gen/v2/scaffold/stream/arithmetic/ZoomStream.java rename src/main/java/com/volmit/iris/gen/v2/scaffold/stream/{ => convert}/AwareConversionStream2D.java (65%) rename src/main/java/com/volmit/iris/gen/v2/scaffold/stream/{ => convert}/AwareConversionStream3D.java (66%) rename src/main/java/com/volmit/iris/gen/v2/scaffold/stream/{ => convert}/CachedConversionStream.java (72%) rename src/main/java/com/volmit/iris/gen/v2/scaffold/stream/{ => convert}/ConversionStream.java (67%) create mode 100644 src/main/java/com/volmit/iris/gen/v2/scaffold/stream/convert/ForceDoubleStream.java rename src/main/java/com/volmit/iris/gen/v2/scaffold/stream/{ => convert}/RoundingStream.java (69%) rename src/main/java/com/volmit/iris/gen/v2/scaffold/stream/{ => convert}/SelectionStream.java (76%) rename src/main/java/com/volmit/iris/gen/v2/scaffold/stream/{ => convert}/SignificanceStream.java (86%) create mode 100644 src/main/java/com/volmit/iris/gen/v2/scaffold/stream/convert/To3DStream.java rename src/main/java/com/volmit/iris/gen/v2/scaffold/stream/{ => interpolation}/BiHermiteStream.java (55%) rename src/main/java/com/volmit/iris/gen/v2/scaffold/stream/{ => interpolation}/BiStarcastStream.java (59%) rename src/main/java/com/volmit/iris/gen/v2/scaffold/stream/{ => interpolation}/BicubicStream.java (50%) rename src/main/java/com/volmit/iris/gen/v2/scaffold/stream/{ => interpolation}/BilinearStream.java (61%) rename src/main/java/com/volmit/iris/gen/v2/scaffold/stream/{ => interpolation}/Interpolated.java (89%) rename src/main/java/com/volmit/iris/gen/v2/scaffold/stream/{ => interpolation}/InterpolatingStream.java (63%) rename src/main/java/com/volmit/iris/gen/v2/scaffold/stream/{ => interpolation}/Interpolator.java (66%) rename src/main/java/com/volmit/iris/gen/v2/scaffold/stream/{ => interpolation}/InterpolatorFactory.java (94%) create mode 100644 src/main/java/com/volmit/iris/gen/v2/scaffold/stream/interpolation/TriHermiteStream.java rename src/main/java/com/volmit/iris/gen/v2/scaffold/stream/{ => interpolation}/TriStarcastStream.java (58%) create mode 100644 src/main/java/com/volmit/iris/gen/v2/scaffold/stream/interpolation/TricubicStream.java rename src/main/java/com/volmit/iris/gen/v2/scaffold/stream/{ => interpolation}/TrilinearStream.java (59%) rename src/main/java/com/volmit/iris/gen/v2/scaffold/stream/{ => sources}/CNGStream.java (72%) rename src/main/java/com/volmit/iris/gen/v2/scaffold/stream/{ => sources}/FunctionStream.java (74%) rename src/main/java/com/volmit/iris/gen/v2/scaffold/stream/{ => utility}/CachedStream2D.java (75%) create mode 100644 src/main/java/com/volmit/iris/gen/v2/scaffold/stream/utility/ProfiledStream.java create mode 100644 src/main/java/com/volmit/iris/gen/v2/scaffold/stream/utility/SemaphoreStream.java create mode 100644 src/main/java/com/volmit/iris/gen/v2/scaffold/stream/utility/SynchronizedStream.java diff --git a/.idea/misc.xml b/.idea/misc.xml index 4fe260455..d44c4246f 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -7,5 +7,9 @@ +<<<<<<< Updated upstream +======= + +>>>>>>> Stashed changes \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 376f5662b..8d01af8ad 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -46,21 +46,25 @@ - - + + - - - - + + + + + - - + + + + + @@ -115,18 +119,18 @@ - + - - + + - - + + - + @@ -139,22 +143,26 @@ - + - - + + - - + + - - + + - + + + + + diff --git a/pom.xml b/pom.xml index f090a296c..029575700 100644 --- a/pom.xml +++ b/pom.xml @@ -47,6 +47,15 @@ + + org.apache.maven.plugins + maven-compiler-plugin + + 1.8 + 1.8 + 1.8 + + 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 b0411f5f0..2c7591b06 100644 --- a/src/main/java/com/volmit/iris/gen/v2/IrisComplex.java +++ b/src/main/java/com/volmit/iris/gen/v2/IrisComplex.java @@ -1,12 +1,13 @@ package com.volmit.iris.gen.v2; +import com.volmit.iris.util.B; import org.bukkit.Material; import org.bukkit.block.Biome; import org.bukkit.block.data.BlockData; import com.volmit.iris.Iris; -import com.volmit.iris.gen.v2.scaffold.layer.ProceduralStream; -import com.volmit.iris.gen.v2.scaffold.stream.Interpolated; +import com.volmit.iris.gen.v2.scaffold.stream.ProceduralStream; +import com.volmit.iris.gen.v2.scaffold.stream.interpolation.Interpolated; import com.volmit.iris.manager.IrisDataManager; import com.volmit.iris.noise.CNG; import com.volmit.iris.object.DecorationPart; @@ -44,6 +45,7 @@ public class IrisComplex implements DataProvider private ProceduralStream maxHeightStream; private ProceduralStream overlayStream; private ProceduralStream heightFluidStream; + private ProceduralStream slopeStream; private ProceduralStream rngStream; private ProceduralStream chunkRngStream; private ProceduralStream terrainSurfaceDecoration; @@ -53,6 +55,7 @@ public class IrisComplex implements DataProvider private ProceduralStream terrainStream; private ProceduralStream rockStream; private ProceduralStream fluidStream; + private ProceduralStream glassStream; public IrisComplex() { @@ -86,11 +89,14 @@ public class IrisComplex implements DataProvider public void flash(long seed, IrisDimension dimension, IrisDataManager data) { + int cacheSize = 8192; + BlockData glass = B.getBlockData("GLASS"); this.rng = new RNG(seed); this.data = data; fluidHeight = dimension.getFluidHeight(); generators = new KList<>(); RNG rng = new RNG(seed); + glassStream = ProceduralStream.of((x,y,z) -> glass, Interpolated.BLOCK_DATA); //@builder dimension.getRegions().forEach((i) -> data.getRegionLoader().load(i) .getAllBiomes(this).forEach((b) -> b @@ -98,7 +104,8 @@ public class IrisComplex implements DataProvider .forEach((c) -> registerGenerator(c.getCachedGenerator(this))))); overlayStream = ProceduralStream.ofDouble((x, z) -> 0D); dimension.getOverlayNoise().forEach((i) -> overlayStream.add((x, z) -> i.get(rng, x, z))); - rngStream = ProceduralStream.of((x, z) -> new RNG(((x.longValue()) << 32) | (z.longValue() & 0xffffffffL)).nextParallelRNG(seed), Interpolated.RNG) + rngStream = ProceduralStream.of((x, z) -> new RNG(((x.longValue()) << 32) | (z.longValue() & 0xffffffffL)) + .nextParallelRNG(seed), Interpolated.RNG) .cache2D(64); chunkRngStream = rngStream.blockToChunkCoords(); rockStream = dimension.getRockPalette().getLayerGenerator(rng.nextRNG(), data).stream() @@ -109,55 +116,57 @@ public class IrisComplex implements DataProvider .zoom(dimension.getRegionZoom()) .selectRarity(dimension.getRegions()) .convertCached((s) -> data.getRegionLoader().load(s)) - .cache2D(1024); - caveBiomeStream = regionStream.convertCached((r) + .cache2D(cacheSize); + caveBiomeStream = regionStream.convertCached((r) -> dimension.getCaveBiomeStyle().create(rng.nextRNG()).stream() .zoom(r.getCaveBiomeZoom()) .selectRarity(r.getCaveBiomes()) .convertCached((s) -> data.getBiomeLoader().load(s) .setInferredType(InferredType.CAVE)) - ).convertAware2D((str, x, z) -> str.get(x, z)) - .cache2D(1024); - landBiomeStream = regionStream.convertCached((r) + ).convertAware2D(ProceduralStream::get) + + .cache2D(cacheSize); + landBiomeStream = regionStream.convertCached((r) -> dimension.getLandBiomeStyle().create(rng.nextRNG()).stream() .zoom(r.getLandBiomeZoom()) .selectRarity(r.getLandBiomes()) .convertCached((s) -> data.getBiomeLoader().load(s) .setInferredType(InferredType.LAND)) - ).convertAware2D((str, x, z) -> str.get(x, z)) - .cache2D(1024); - seaBiomeStream = regionStream.convertCached((r) + ).convertAware2D(ProceduralStream::get) + .cache2D(cacheSize); + seaBiomeStream = regionStream.convertCached((r) -> dimension.getSeaBiomeStyle().create(rng.nextRNG()).stream() .zoom(r.getSeaBiomeZoom()) .selectRarity(r.getSeaBiomes()) .convertCached((s) -> data.getBiomeLoader().load(s) .setInferredType(InferredType.SEA)) - ).convertAware2D((str, x, z) -> str.get(x, z)) - .cache2D(1024); - shoreBiomeStream = regionStream.convertCached((r) + ).convertAware2D(ProceduralStream::get) + .cache2D(cacheSize); + shoreBiomeStream = regionStream.convertCached((r) -> dimension.getShoreBiomeStyle().create(rng.nextRNG()).stream() .zoom(r.getShoreBiomeZoom()) .selectRarity(r.getShoreBiomes()) .convertCached((s) -> data.getBiomeLoader().load(s) .setInferredType(InferredType.SHORE)) - ).convertAware2D((str, x, z) -> str.get(x, z)) - .cache2D(1024); + ).convertAware2D(ProceduralStream::get) + .cache2D(cacheSize); bridgeStream = dimension.getContinentalStyle().create(rng.nextRNG()).stream() .convert((v) -> v >= dimension.getLandChance() ? InferredType.SEA : InferredType.LAND); - baseBiomeStream = bridgeStream.convertAware2D((t, x, z) -> t.equals(InferredType.SEA) + baseBiomeStream = bridgeStream.convertAware2D((t, x, z) -> t.equals(InferredType.SEA) ? seaBiomeStream.get(x, z) : landBiomeStream.get(x, z)) - .convertAware2D(this::implode) - .cache2D(1024); + .convertAware2D(this::implode).cache2D(cacheSize); heightStream = baseBiomeStream.convertAware2D((b, x, z) -> getHeight(b, x, z, seed)) - .forceDouble().add(fluidHeight) - .add2D(overlayStream::get).roundDouble() - .cache2D(1024); + .add(fluidHeight) + .add2D(overlayStream::get) + .roundDouble() + .cache2D(cacheSize); + slopeStream = heightStream.slope(); trueBiomeStream = heightStream - .convertAware2D((h, x, z) -> + .convertAware2D((h, x, z) -> fixBiomeType(h, baseBiomeStream.get(x, z), regionStream.get(x, z), x, z, fluidHeight)) - .cache2D(1024); - trueBiomeDerivativeStream = trueBiomeStream.convert((b) -> b.getDerivative()); + .cache2D(cacheSize); + trueBiomeDerivativeStream = trueBiomeStream.convert(IrisBiome::getDerivative); heightFluidStream = heightStream.max(fluidHeight); maxHeightStream = ProceduralStream.ofDouble((x, z) -> 255D); terrainSurfaceDecoration = trueBiomeStream diff --git a/src/main/java/com/volmit/iris/gen/v2/IrisTerrainGenerator.java b/src/main/java/com/volmit/iris/gen/v2/IrisTerrainGenerator.java index a6feb2c37..5b6c68bab 100644 --- a/src/main/java/com/volmit/iris/gen/v2/IrisTerrainGenerator.java +++ b/src/main/java/com/volmit/iris/gen/v2/IrisTerrainGenerator.java @@ -2,18 +2,20 @@ package com.volmit.iris.gen.v2; import java.util.function.Predicate; +import com.volmit.iris.Iris; +import com.volmit.iris.gen.v2.scaffold.stream.utility.ProfiledStream; import org.bukkit.Material; import org.bukkit.block.Biome; import org.bukkit.block.data.BlockData; import com.volmit.iris.gen.v2.scaffold.hunk.Hunk; -import com.volmit.iris.gen.v2.scaffold.layer.ProceduralStream; +import com.volmit.iris.gen.v2.scaffold.stream.ProceduralStream; import com.volmit.iris.manager.IrisDataManager; import com.volmit.iris.object.IrisBiome; import com.volmit.iris.object.IrisDecorator; import com.volmit.iris.object.IrisDimension; -import com.volmit.iris.util.PrecisionStopwatch; import com.volmit.iris.util.RNG; +import org.bukkit.entity.Player; public class IrisTerrainGenerator { @@ -33,7 +35,6 @@ public class IrisTerrainGenerator complex = new IrisComplex(); this.data = data; this.dimension = dimension; - flash(); } @@ -130,16 +131,12 @@ public class IrisTerrainGenerator public void generateTerrain(int x, int z, Hunk blocks) { - PrecisionStopwatch p = PrecisionStopwatch.start(); fill2D(complex.getHeightFluidStream(), blocks, x, z, complex.getTerrainStream()); - p.end(); } public void generateBiome(int x, int z, Hunk blocks) { - PrecisionStopwatch p = PrecisionStopwatch.start(); fill2DYLock(complex.getMaxHeightStream(), blocks, x, z, complex.getTrueBiomeDerivativeStream()); - p.end(); } public void generate(int x, int z, Hunk blocks, Hunk biomes) @@ -148,4 +145,8 @@ public class IrisTerrainGenerator generateBiome(x, z, biomes); generateDecorations(x, z, blocks); } + + public void printMetrics(Player p) { + ProfiledStream.print(Iris::verbose, complex.getTerrainStream()); + } } 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 b82e92765..b2e0053f5 100644 --- a/src/main/java/com/volmit/iris/gen/v2/TestGen.java +++ b/src/main/java/com/volmit/iris/gen/v2/TestGen.java @@ -3,6 +3,9 @@ package com.volmit.iris.gen.v2; import java.util.Random; import java.util.UUID; +import com.volmit.iris.util.J; +import net.minecraft.server.v1_16_R2.MinecraftServer; +import org.bukkit.Location; import org.bukkit.World; import org.bukkit.WorldCreator; import org.bukkit.block.Biome; @@ -18,10 +21,9 @@ public class TestGen { public static void gen(Player p) { - p.teleport(new WorldCreator("t/" + UUID.randomUUID().toString()).generator(new ChunkGenerator() + IrisTerrainGenerator tg = new IrisTerrainGenerator(1337, Iris.globaldata.getDimensionLoader().load("overworld"), Iris.globaldata); + p.teleport(new Location(new WorldCreator("t/" + UUID.randomUUID().toString()).generator(new ChunkGenerator() { - IrisTerrainGenerator tg = new IrisTerrainGenerator(1337, Iris.globaldata.getDimensionLoader().load("overworld"), Iris.globaldata); - public boolean isParallelCapable() { return true; @@ -49,6 +51,10 @@ public class TestGen Iris.info("Generated " + x + " " + z + " in " + Form.duration(p.getMilliseconds(), 2)); return c; } - }).createWorld().getSpawnLocation()); + }).createWorld(), 0, 200, 0)); + + J.s(() -> { + tg.printMetrics(p); + }, 200); } } diff --git a/src/main/java/com/volmit/iris/gen/v2/scaffold/layer/BasicLayer.java b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/BasicLayer.java similarity index 90% rename from src/main/java/com/volmit/iris/gen/v2/scaffold/layer/BasicLayer.java rename to src/main/java/com/volmit/iris/gen/v2/scaffold/stream/BasicLayer.java index 60c4778cb..86e1aab10 100644 --- a/src/main/java/com/volmit/iris/gen/v2/scaffold/layer/BasicLayer.java +++ b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/BasicLayer.java @@ -1,4 +1,4 @@ -package com.volmit.iris.gen.v2.scaffold.layer; +package com.volmit.iris.gen.v2.scaffold.stream; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/BasicStream.java b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/BasicStream.java new file mode 100644 index 000000000..ca670d624 --- /dev/null +++ b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/BasicStream.java @@ -0,0 +1,40 @@ +package com.volmit.iris.gen.v2.scaffold.stream; + +public abstract class BasicStream extends BasicLayer implements ProceduralStream +{ + private final ProceduralStream source; + + public BasicStream(ProceduralStream source) + { + super(); + this.source = source; + } + + public BasicStream() + { + this(null); + } + + + @Override + public ProceduralStream getTypedSource() { + return source; + } + + @Override + public ProceduralStream getSource() { + return getTypedSource(); + } + + @Override + public abstract T get(double x, double z); + + @Override + public abstract T get(double x, double y, double z); + + @Override + public abstract double toDouble(T t); + + @Override + public abstract T fromDouble(double d); +} diff --git a/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/ClampedStream.java b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/ClampedStream.java deleted file mode 100644 index 65362e11a..000000000 --- a/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/ClampedStream.java +++ /dev/null @@ -1,49 +0,0 @@ -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 ClampedStream extends BasicLayer implements ProceduralStream -{ - private final ProceduralStream stream; - private final double min; - private final double max; - - public ClampedStream(ProceduralStream stream, double min, double max) - { - super(); - this.stream = stream; - this.min = min; - this.max = max; - } - - @Override - public double toDouble(T t) - { - return stream.toDouble(t); - } - - @Override - public T fromDouble(double d) - { - return stream.fromDouble(d); - } - - private double clamp(double v) - { - return Math.max(Math.min(v, max), min); - } - - @Override - public T get(double x, double z) - { - return fromDouble(clamp(stream.getDouble(x, z))); - } - - @Override - public T get(double x, double y, double z) - { - return fromDouble(clamp(stream.getDouble(x, y, z))); - } - -} diff --git a/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/CoordinateBitShiftLeftStream.java b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/CoordinateBitShiftLeftStream.java deleted file mode 100644 index dfbfcaecc..000000000 --- a/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/CoordinateBitShiftLeftStream.java +++ /dev/null @@ -1,42 +0,0 @@ -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 CoordinateBitShiftLeftStream extends BasicLayer implements ProceduralStream -{ - private final ProceduralStream stream; - private final int amount; - - public CoordinateBitShiftLeftStream(ProceduralStream stream, int amount) - { - super(); - this.stream = stream; - this.amount = amount; - } - - @Override - public double toDouble(T t) - { - return stream.toDouble(t); - } - - @Override - public T fromDouble(double d) - { - return stream.fromDouble(d); - } - - @Override - public T get(double x, double z) - { - return stream.get((int) x << amount, (int) z << amount); - } - - @Override - public T get(double x, double y, double z) - { - return stream.get((int) x << amount, (int) y << amount, (int) z << amount); - } - -} diff --git a/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/CoordinateBitShiftRightStream.java b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/CoordinateBitShiftRightStream.java deleted file mode 100644 index 31e782272..000000000 --- a/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/CoordinateBitShiftRightStream.java +++ /dev/null @@ -1,42 +0,0 @@ -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 CoordinateBitShiftRightStream extends BasicLayer implements ProceduralStream -{ - private final ProceduralStream stream; - private final int amount; - - public CoordinateBitShiftRightStream(ProceduralStream stream, int amount) - { - super(); - this.stream = stream; - this.amount = amount; - } - - @Override - public double toDouble(T t) - { - return stream.toDouble(t); - } - - @Override - public T fromDouble(double d) - { - return stream.fromDouble(d); - } - - @Override - public T get(double x, double z) - { - return stream.get((int) x >> amount, (int) z >> amount); - } - - @Override - public T get(double x, double y, double z) - { - return stream.get((int) x >> amount, (int) y >> amount, (int) z >> amount); - } - -} 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 deleted file mode 100644 index 48fe0ab91..000000000 --- a/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/ForceDoubleStream.java +++ /dev/null @@ -1,41 +0,0 @@ -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/gen/v2/scaffold/stream/OffsetStream.java b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/OffsetStream.java deleted file mode 100644 index 484572f36..000000000 --- a/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/OffsetStream.java +++ /dev/null @@ -1,46 +0,0 @@ -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 OffsetStream extends BasicLayer implements ProceduralStream -{ - private final ProceduralStream stream; - private final double ox; - private final double oy; - private final double oz; - - public OffsetStream(ProceduralStream stream, double x, double y, double z) - { - super(); - this.stream = stream; - this.ox = x; - this.oy = y; - this.oz = z; - } - - @Override - public double toDouble(T t) - { - return stream.toDouble(t); - } - - @Override - public T fromDouble(double d) - { - return stream.fromDouble(d); - } - - @Override - public T get(double x, double z) - { - return stream.get(x + ox, z + oz); - } - - @Override - public T get(double x, double y, double z) - { - return stream.get(x + ox, y + oy, z + oz); - } - -} diff --git a/src/main/java/com/volmit/iris/gen/v2/scaffold/layer/ProceduralLayer.java b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/ProceduralLayer.java similarity index 78% rename from src/main/java/com/volmit/iris/gen/v2/scaffold/layer/ProceduralLayer.java rename to src/main/java/com/volmit/iris/gen/v2/scaffold/stream/ProceduralLayer.java index b55f54858..8e6281a14 100644 --- a/src/main/java/com/volmit/iris/gen/v2/scaffold/layer/ProceduralLayer.java +++ b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/ProceduralLayer.java @@ -1,4 +1,4 @@ -package com.volmit.iris.gen.v2.scaffold.layer; +package com.volmit.iris.gen.v2.scaffold.stream; public interface ProceduralLayer { 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/stream/ProceduralStream.java similarity index 84% rename from src/main/java/com/volmit/iris/gen/v2/scaffold/layer/ProceduralStream.java rename to src/main/java/com/volmit/iris/gen/v2/scaffold/stream/ProceduralStream.java index e3025b230..ccb1f03df 100644 --- a/src/main/java/com/volmit/iris/gen/v2/scaffold/layer/ProceduralStream.java +++ b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/ProceduralStream.java @@ -1,36 +1,19 @@ -package com.volmit.iris.gen.v2.scaffold.layer; +package com.volmit.iris.gen.v2.scaffold.stream; +import java.awt.*; import java.util.List; import java.util.function.Function; import com.volmit.iris.gen.v2.scaffold.Significance; import com.volmit.iris.gen.v2.scaffold.hunk.Hunk; -import com.volmit.iris.gen.v2.scaffold.stream.AddingStream; -import com.volmit.iris.gen.v2.scaffold.stream.AwareConversionStream2D; -import com.volmit.iris.gen.v2.scaffold.stream.AwareConversionStream3D; -import com.volmit.iris.gen.v2.scaffold.stream.CachedConversionStream; -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.CoordinateBitShiftLeftStream; -import com.volmit.iris.gen.v2.scaffold.stream.CoordinateBitShiftRightStream; -import com.volmit.iris.gen.v2.scaffold.stream.DividingStream; -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.FunctionStream; -import com.volmit.iris.gen.v2.scaffold.stream.Interpolated; -import com.volmit.iris.gen.v2.scaffold.stream.MaxingStream; -import com.volmit.iris.gen.v2.scaffold.stream.MinningStream; -import com.volmit.iris.gen.v2.scaffold.stream.ModuloStream; -import com.volmit.iris.gen.v2.scaffold.stream.MultiplyingStream; -import com.volmit.iris.gen.v2.scaffold.stream.OffsetStream; -import com.volmit.iris.gen.v2.scaffold.stream.RoundingDoubleStream; -import com.volmit.iris.gen.v2.scaffold.stream.RoundingStream; -import com.volmit.iris.gen.v2.scaffold.stream.SelectionStream; -import com.volmit.iris.gen.v2.scaffold.stream.SignificanceStream; -import com.volmit.iris.gen.v2.scaffold.stream.SubtractingStream; -import com.volmit.iris.gen.v2.scaffold.stream.To3DStream; -import com.volmit.iris.gen.v2.scaffold.stream.ZoomStream; +import com.volmit.iris.gen.v2.scaffold.stream.arithmetic.*; +import com.volmit.iris.gen.v2.scaffold.stream.convert.*; +import com.volmit.iris.gen.v2.scaffold.stream.interpolation.Interpolated; +import com.volmit.iris.gen.v2.scaffold.stream.sources.FunctionStream; +import com.volmit.iris.gen.v2.scaffold.stream.utility.CachedStream2D; +import com.volmit.iris.gen.v2.scaffold.stream.utility.ProfiledStream; +import com.volmit.iris.gen.v2.scaffold.stream.utility.SemaphoreStream; +import com.volmit.iris.gen.v2.scaffold.stream.utility.SynchronizedStream; import com.volmit.iris.util.Function2; import com.volmit.iris.util.Function3; import com.volmit.iris.util.Function4; @@ -64,6 +47,16 @@ public interface ProceduralStream extends ProceduralLayer, Interpolated return new FunctionStream<>(f, f2, helper); } + default ProceduralStream profile() + { + return profile(10); + } + + default ProceduralStream profile(int memory) + { + return new ProfiledStream<>(this, memory); + } + default ProceduralStream add(Function3 a) { return new AddingStream<>(this, a); @@ -119,6 +112,16 @@ public interface ProceduralStream extends ProceduralLayer, Interpolated return new CoordinateBitShiftRightStream<>(this, a); } + default ProceduralStream synchronize() + { + return new SynchronizedStream<>(this); + } + + default ProceduralStream semaphore(int permits) + { + return new SemaphoreStream<>(this, permits); + } + default ProceduralStream bitShiftCoordsLeft(int a) { return new CoordinateBitShiftLeftStream<>(this, a); @@ -134,6 +137,16 @@ public interface ProceduralStream extends ProceduralLayer, Interpolated return new MaxingStream<>(this, a); } + default ProceduralStream slope() + { + return slope(1); + } + + default ProceduralStream slope(int range) + { + return new SlopeStream<>(this, range); + } + default ProceduralStream max(double a) { return new MaxingStream<>(this, a); @@ -224,9 +237,9 @@ public interface ProceduralStream extends ProceduralLayer, Interpolated return new RoundingDoubleStream(this); } - default ProceduralStream forceDouble() + default ProceduralStream forceDouble() { - return new ForceDoubleStream(this); + return new ForceDoubleStream(this); } default ProceduralStream> significance(double radius, int checks) @@ -246,7 +259,7 @@ public interface ProceduralStream extends ProceduralLayer, Interpolated default ProceduralStream convert(Function converter) { - return new ConversionStream(this, converter); + return new ConversionStream(this, converter); } default ProceduralStream convertAware2D(Function3 converter) @@ -289,7 +302,17 @@ public interface ProceduralStream extends ProceduralLayer, Interpolated return new ZoomStream(this, all, all, all); } - default ProceduralStream select(@SuppressWarnings("unchecked") V... types) + default ProceduralStream radial(double scale) + { + return new RadialStream<>(this, scale); + } + + default ProceduralStream radial() + { + return radial(1D); + } + + default ProceduralStream select(V... types) { return new SelectionStream(this, types); } @@ -472,10 +495,6 @@ public interface ProceduralStream extends ProceduralLayer, Interpolated fill3D(h, x, y, z, v, 4); } - public T get(double x, double z); - - public T get(double x, double y, double z); - default double getDouble(double x, double z) { return toDouble(get(x, z)); @@ -485,4 +504,12 @@ public interface ProceduralStream extends ProceduralLayer, Interpolated { return toDouble(get(x, y, z)); } + + public ProceduralStream getTypedSource(); + + public ProceduralStream getSource(); + + public T get(double x, double z); + + public T get(double x, double y, double z); } diff --git a/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/To3DStream.java b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/To3DStream.java deleted file mode 100644 index 45daba0d1..000000000 --- a/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/To3DStream.java +++ /dev/null @@ -1,40 +0,0 @@ -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 To3DStream extends BasicLayer implements ProceduralStream -{ - private final ProceduralStream stream; - - public To3DStream(ProceduralStream stream) - { - super(); - this.stream = stream; - } - - @Override - public double toDouble(T t) - { - return stream.toDouble(t); - } - - @Override - public T fromDouble(double d) - { - return stream.fromDouble(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.fromDouble(stream.getDouble(x, z) >= y ? 1D : 0D); - } - -} diff --git a/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/TriHermiteStream.java b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/TriHermiteStream.java deleted file mode 100644 index 8e08fe2ad..000000000 --- a/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/TriHermiteStream.java +++ /dev/null @@ -1,140 +0,0 @@ -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; -import com.volmit.iris.util.IrisInterpolation; - -public class TriHermiteStream extends BasicLayer implements ProceduralStream, Interpolator -{ - private final ProceduralStream stream; - private final int rx; - private final int ry; - private final int rz; - private final double tension; - private final double bias; - - public TriHermiteStream(ProceduralStream stream, int rx, int ry, int rz, double tension, double bias) - { - this.stream = stream; - this.rx = rx; - this.ry = ry; - this.rz = rz; - this.tension = tension; - this.bias = bias; - } - - public T interpolate(double x, double y, double z) - { - int fx = (int) Math.floor(x / rx); - int fy = (int) Math.floor(y / ry); - int fz = (int) Math.floor(z / rz); - int x0 = (int) Math.round((fx - 1) * rx); - int y0 = (int) Math.round((fy - 1) * ry); - int z0 = (int) Math.round((fz - 1) * rz); - int x1 = (int) Math.round(fx * rx); - int y1 = (int) Math.round(fy * ry); - int z1 = (int) Math.round(fz * rz); - int x2 = (int) Math.round((fx + 1) * rx); - int y2 = (int) Math.round((fy + 1) * ry); - int z2 = (int) Math.round((fz + 1) * rz); - int x3 = (int) Math.round((fx + 2) * rx); - int y3 = (int) Math.round((fy + 2) * ry); - int z3 = (int) Math.round((fz + 2) * rz); - double px = IrisInterpolation.rangeScale(0, 1, x1, x2, x); - double py = IrisInterpolation.rangeScale(0, 1, y1, y2, y); - double pz = IrisInterpolation.rangeScale(0, 1, z1, z2, z); - - //@builder - return stream.fromDouble(IrisInterpolation.trihermite( - stream.getDouble(x0, y0, z0), - stream.getDouble(x0, y0,z1), - stream.getDouble(x0, y0,z2), - stream.getDouble(x0, y0,z3), - stream.getDouble(x1, y0,z0), - stream.getDouble(x1, y0,z1), - stream.getDouble(x1, y0,z2), - stream.getDouble(x1, y0,z3), - stream.getDouble(x2, y0,z0), - stream.getDouble(x2, y0,z1), - stream.getDouble(x2, y0,z2), - stream.getDouble(x2, y0,z3), - stream.getDouble(x3, y0,z0), - stream.getDouble(x3, y0,z1), - stream.getDouble(x3, y0,z2), - stream.getDouble(x3, y0,z3), - stream.getDouble(x0, y1, z0), - stream.getDouble(x0, y1,z1), - stream.getDouble(x0, y1,z2), - stream.getDouble(x0, y1,z3), - stream.getDouble(x1, y1,z0), - stream.getDouble(x1, y1,z1), - stream.getDouble(x1, y1,z2), - stream.getDouble(x1, y1,z3), - stream.getDouble(x2, y1,z0), - stream.getDouble(x2, y1,z1), - stream.getDouble(x2, y1,z2), - stream.getDouble(x2, y1,z3), - stream.getDouble(x3, y1,z0), - stream.getDouble(x3, y1,z1), - stream.getDouble(x3, y1,z2), - stream.getDouble(x3, y1,z3), - stream.getDouble(x0, y2, z0), - stream.getDouble(x0, y2,z1), - stream.getDouble(x0, y2,z2), - stream.getDouble(x0, y2,z3), - stream.getDouble(x1, y2,z0), - stream.getDouble(x1, y2,z1), - stream.getDouble(x1, y2,z2), - stream.getDouble(x1, y2,z3), - stream.getDouble(x2, y2,z0), - stream.getDouble(x2, y2,z1), - stream.getDouble(x2, y2,z2), - stream.getDouble(x2, y2,z3), - stream.getDouble(x3, y2,z0), - stream.getDouble(x3, y2,z1), - stream.getDouble(x3, y2,z2), - stream.getDouble(x3, y2,z3), - stream.getDouble(x0, y3, z0), - stream.getDouble(x0, y3,z1), - stream.getDouble(x0, y3,z2), - stream.getDouble(x0, y3,z3), - stream.getDouble(x1, y3,z0), - stream.getDouble(x1, y3,z1), - stream.getDouble(x1, y3,z2), - stream.getDouble(x1, y3,z3), - stream.getDouble(x2, y3,z0), - stream.getDouble(x2, y3,z1), - stream.getDouble(x2, y3,z2), - stream.getDouble(x2, y3,z3), - stream.getDouble(x3, y3,z0), - stream.getDouble(x3, y3,z1), - stream.getDouble(x3, y3,z2), - stream.getDouble(x3, y3,z3), - px, pz, py, tension, bias)); - //@done - } - - @Override - public double toDouble(T t) - { - return stream.toDouble(t); - } - - @Override - public T fromDouble(double d) - { - return stream.fromDouble(d); - } - - @Override - public T get(double x, double z) - { - return interpolate(x, 0, z); - } - - @Override - public T get(double x, double y, double z) - { - return interpolate(x, y, z); - } -} diff --git a/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/TricubicStream.java b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/TricubicStream.java deleted file mode 100644 index df43e9706..000000000 --- a/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/TricubicStream.java +++ /dev/null @@ -1,139 +0,0 @@ -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; -import com.volmit.iris.util.IrisInterpolation; - -public class TricubicStream extends BasicLayer implements ProceduralStream, Interpolator -{ - private final ProceduralStream stream; - private final int rx; - private final int ry; - private final int rz; - - public TricubicStream(ProceduralStream stream, int rx, int ry, int rz) - { - this.stream = stream; - this.rx = rx; - this.ry = ry; - this.rz = rz; - } - - public T interpolate(double x, double y, double z) - { - int fx = (int) Math.floor(x / rx); - int fy = (int) Math.floor(y / ry); - int fz = (int) Math.floor(z / rz); - int x0 = (int) Math.round((fx - 1) * rx); - int y0 = (int) Math.round((fy - 1) * ry); - int z0 = (int) Math.round((fz - 1) * rz); - int x1 = (int) Math.round(fx * rx); - int y1 = (int) Math.round(fy * ry); - int z1 = (int) Math.round(fz * rz); - int x2 = (int) Math.round((fx + 1) * rx); - int y2 = (int) Math.round((fy + 1) * ry); - int z2 = (int) Math.round((fz + 1) * rz); - int x3 = (int) Math.round((fx + 2) * rx); - int y3 = (int) Math.round((fy + 2) * ry); - int z3 = (int) Math.round((fz + 2) * rz); - double px = IrisInterpolation.rangeScale(0, 1, x1, x2, x); - double py = IrisInterpolation.rangeScale(0, 1, y1, y2, y); - double pz = IrisInterpolation.rangeScale(0, 1, z1, z2, z); - - //@builder - return stream.fromDouble(IrisInterpolation.tricubic( - stream.getDouble(x0, y0, z0), - stream.getDouble(x0, y0,z1), - stream.getDouble(x0, y0,z2), - stream.getDouble(x0, y0,z3), - stream.getDouble(x1, y0,z0), - stream.getDouble(x1, y0,z1), - stream.getDouble(x1, y0,z2), - stream.getDouble(x1, y0,z3), - stream.getDouble(x2, y0,z0), - stream.getDouble(x2, y0,z1), - stream.getDouble(x2, y0,z2), - stream.getDouble(x2, y0,z3), - stream.getDouble(x3, y0,z0), - stream.getDouble(x3, y0,z1), - stream.getDouble(x3, y0,z2), - stream.getDouble(x3, y0,z3), - - stream.getDouble(x0, y1, z0), - stream.getDouble(x0, y1,z1), - stream.getDouble(x0, y1,z2), - stream.getDouble(x0, y1,z3), - stream.getDouble(x1, y1,z0), - stream.getDouble(x1, y1,z1), - stream.getDouble(x1, y1,z2), - stream.getDouble(x1, y1,z3), - stream.getDouble(x2, y1,z0), - stream.getDouble(x2, y1,z1), - stream.getDouble(x2, y1,z2), - stream.getDouble(x2, y1,z3), - stream.getDouble(x3, y1,z0), - stream.getDouble(x3, y1,z1), - stream.getDouble(x3, y1,z2), - stream.getDouble(x3, y1,z3), - - stream.getDouble(x0, y2, z0), - stream.getDouble(x0, y2,z1), - stream.getDouble(x0, y2,z2), - stream.getDouble(x0, y2,z3), - stream.getDouble(x1, y2,z0), - stream.getDouble(x1, y2,z1), - stream.getDouble(x1, y2,z2), - stream.getDouble(x1, y2,z3), - stream.getDouble(x2, y2,z0), - stream.getDouble(x2, y2,z1), - stream.getDouble(x2, y2,z2), - stream.getDouble(x2, y2,z3), - stream.getDouble(x3, y2,z0), - stream.getDouble(x3, y2,z1), - stream.getDouble(x3, y2,z2), - stream.getDouble(x3, y2,z3), - - stream.getDouble(x0, y3, z0), - stream.getDouble(x0, y3,z1), - stream.getDouble(x0, y3,z2), - stream.getDouble(x0, y3,z3), - stream.getDouble(x1, y3,z0), - stream.getDouble(x1, y3,z1), - stream.getDouble(x1, y3,z2), - stream.getDouble(x1, y3,z3), - stream.getDouble(x2, y3,z0), - stream.getDouble(x2, y3,z1), - stream.getDouble(x2, y3,z2), - stream.getDouble(x2, y3,z3), - stream.getDouble(x3, y3,z0), - stream.getDouble(x3, y3,z1), - stream.getDouble(x3, y3,z2), - stream.getDouble(x3, y3,z3), - px, pz, py)); - //@done - } - - @Override - public double toDouble(T t) - { - return stream.toDouble(t); - } - - @Override - public T fromDouble(double d) - { - return stream.fromDouble(d); - } - - @Override - public T get(double x, double z) - { - return interpolate(x, 0, z); - } - - @Override - public T get(double x, double y, double z) - { - return interpolate(x, y, z); - } -} diff --git a/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/ZoomStream.java b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/ZoomStream.java deleted file mode 100644 index b1759e489..000000000 --- a/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/ZoomStream.java +++ /dev/null @@ -1,46 +0,0 @@ -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 ZoomStream extends BasicLayer implements ProceduralStream -{ - private final ProceduralStream stream; - private final double ox; - private final double oy; - private final double oz; - - public ZoomStream(ProceduralStream stream, double x, double y, double z) - { - super(); - this.stream = stream; - this.ox = x; - this.oy = y; - this.oz = z; - } - - @Override - public double toDouble(T t) - { - return stream.toDouble(t); - } - - @Override - public T fromDouble(double d) - { - return stream.fromDouble(d); - } - - @Override - public T get(double x, double z) - { - return stream.get(x / ox, z / oz); - } - - @Override - public T get(double x, double y, double z) - { - return stream.get(x / ox, y / oy, z / oz); - } - -} diff --git a/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/AddingStream.java b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/arithmetic/AddingStream.java similarity index 58% rename from src/main/java/com/volmit/iris/gen/v2/scaffold/stream/AddingStream.java rename to src/main/java/com/volmit/iris/gen/v2/scaffold/stream/arithmetic/AddingStream.java index 5b0bea654..ed6a735b8 100644 --- a/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/AddingStream.java +++ b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/arithmetic/AddingStream.java @@ -1,19 +1,17 @@ -package com.volmit.iris.gen.v2.scaffold.stream; +package com.volmit.iris.gen.v2.scaffold.stream.arithmetic; -import com.volmit.iris.gen.v2.scaffold.layer.BasicLayer; -import com.volmit.iris.gen.v2.scaffold.layer.ProceduralStream; +import com.volmit.iris.gen.v2.scaffold.stream.BasicStream; +import com.volmit.iris.gen.v2.scaffold.stream.ProceduralStream; import com.volmit.iris.util.Function2; import com.volmit.iris.util.Function3; -public class AddingStream extends BasicLayer implements ProceduralStream +public class AddingStream extends BasicStream { - private final ProceduralStream stream; private final Function3 add; public AddingStream(ProceduralStream stream, Function3 add) { - super(); - this.stream = stream; + super(stream); this.add = add; } @@ -30,25 +28,25 @@ public class AddingStream extends BasicLayer implements ProceduralStream @Override public double toDouble(T t) { - return stream.toDouble(t); + return getTypedSource().toDouble(t); } @Override public T fromDouble(double d) { - return stream.fromDouble(d); + return getTypedSource().fromDouble(d); } @Override public T get(double x, double z) { - return fromDouble(add.apply(x, 0D, z) + stream.getDouble(x, z)); + return fromDouble(add.apply(x, 0D, z) + getTypedSource().getDouble(x, z)); } @Override public T get(double x, double y, double z) { - return fromDouble(add.apply(x, y, z) + stream.getDouble(x, y, z)); + return fromDouble(add.apply(x, y, z) + getTypedSource().getDouble(x, y, z)); } } diff --git a/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/arithmetic/ClampedStream.java b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/arithmetic/ClampedStream.java new file mode 100644 index 000000000..621293254 --- /dev/null +++ b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/arithmetic/ClampedStream.java @@ -0,0 +1,47 @@ +package com.volmit.iris.gen.v2.scaffold.stream.arithmetic; + +import com.volmit.iris.gen.v2.scaffold.stream.BasicStream; +import com.volmit.iris.gen.v2.scaffold.stream.ProceduralStream; + +public class ClampedStream extends BasicStream implements ProceduralStream +{ + private final double min; + private final double max; + + public ClampedStream(ProceduralStream stream, double min, double max) + { + super(stream); + this.min = min; + this.max = max; + } + + @Override + public double toDouble(T t) + { + return getTypedSource().toDouble(t); + } + + @Override + public T fromDouble(double d) + { + return getTypedSource().fromDouble(d); + } + + private double clamp(double v) + { + return Math.max(Math.min(v, max), min); + } + + @Override + public T get(double x, double z) + { + return fromDouble(clamp(getTypedSource().getDouble(x, z))); + } + + @Override + public T get(double x, double y, double z) + { + return fromDouble(clamp(getTypedSource().getDouble(x, y, z))); + } + +} diff --git a/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/arithmetic/CoordinateBitShiftLeftStream.java b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/arithmetic/CoordinateBitShiftLeftStream.java new file mode 100644 index 000000000..0988fc86e --- /dev/null +++ b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/arithmetic/CoordinateBitShiftLeftStream.java @@ -0,0 +1,40 @@ +package com.volmit.iris.gen.v2.scaffold.stream.arithmetic; + +import com.volmit.iris.gen.v2.scaffold.stream.BasicStream; +import com.volmit.iris.gen.v2.scaffold.stream.ProceduralStream; + +public class CoordinateBitShiftLeftStream extends BasicStream implements ProceduralStream +{ + private final int amount; + + public CoordinateBitShiftLeftStream(ProceduralStream stream, int amount) + { + super(stream); + this.amount = amount; + } + + @Override + public double toDouble(T t) + { + return getTypedSource().toDouble(t); + } + + @Override + public T fromDouble(double d) + { + return getTypedSource().fromDouble(d); + } + + @Override + public T get(double x, double z) + { + return getTypedSource().get((int) x << amount, (int) z << amount); + } + + @Override + public T get(double x, double y, double z) + { + return getTypedSource().get((int) x << amount, (int) y << amount, (int) z << amount); + } + +} diff --git a/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/arithmetic/CoordinateBitShiftRightStream.java b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/arithmetic/CoordinateBitShiftRightStream.java new file mode 100644 index 000000000..f30ba0809 --- /dev/null +++ b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/arithmetic/CoordinateBitShiftRightStream.java @@ -0,0 +1,40 @@ +package com.volmit.iris.gen.v2.scaffold.stream.arithmetic; + +import com.volmit.iris.gen.v2.scaffold.stream.BasicStream; +import com.volmit.iris.gen.v2.scaffold.stream.ProceduralStream; + +public class CoordinateBitShiftRightStream extends BasicStream implements ProceduralStream +{ + private final int amount; + + public CoordinateBitShiftRightStream(ProceduralStream stream, int amount) + { + super(stream); + this.amount = amount; + } + + @Override + public double toDouble(T t) + { + return getTypedSource().toDouble(t); + } + + @Override + public T fromDouble(double d) + { + return getTypedSource().fromDouble(d); + } + + @Override + public T get(double x, double z) + { + return getTypedSource().get((int) x >> amount, (int) z >> amount); + } + + @Override + public T get(double x, double y, double z) + { + return getTypedSource().get((int) x >> amount, (int) y >> amount, (int) z >> amount); + } + +} diff --git a/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/DividingStream.java b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/arithmetic/DividingStream.java similarity index 58% rename from src/main/java/com/volmit/iris/gen/v2/scaffold/stream/DividingStream.java rename to src/main/java/com/volmit/iris/gen/v2/scaffold/stream/arithmetic/DividingStream.java index 93a410082..2a1f6f7ba 100644 --- a/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/DividingStream.java +++ b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/arithmetic/DividingStream.java @@ -1,19 +1,17 @@ -package com.volmit.iris.gen.v2.scaffold.stream; +package com.volmit.iris.gen.v2.scaffold.stream.arithmetic; -import com.volmit.iris.gen.v2.scaffold.layer.BasicLayer; -import com.volmit.iris.gen.v2.scaffold.layer.ProceduralStream; +import com.volmit.iris.gen.v2.scaffold.stream.BasicStream; +import com.volmit.iris.gen.v2.scaffold.stream.ProceduralStream; import com.volmit.iris.util.Function2; import com.volmit.iris.util.Function3; -public class DividingStream extends BasicLayer implements ProceduralStream +public class DividingStream extends BasicStream implements ProceduralStream { - private final ProceduralStream stream; private final Function3 add; public DividingStream(ProceduralStream stream, Function3 add) { - super(); - this.stream = stream; + super(stream); this.add = add; } @@ -30,24 +28,24 @@ public class DividingStream extends BasicLayer implements ProceduralStream @Override public double toDouble(T t) { - return stream.toDouble(t); + return getTypedSource().toDouble(t); } @Override public T fromDouble(double d) { - return stream.fromDouble(d); + return getTypedSource().fromDouble(d); } @Override public T get(double x, double z) { - return fromDouble(stream.getDouble(x, z) / add.apply(x, 0D, z)); + return fromDouble(getTypedSource().getDouble(x, z) / add.apply(x, 0D, z)); } @Override public T get(double x, double y, double z) { - return fromDouble(stream.getDouble(x, y, z) / add.apply(x, y, z)); + return fromDouble(getTypedSource().getDouble(x, y, z) / add.apply(x, y, z)); } } diff --git a/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/FittedStream.java b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/arithmetic/FittedStream.java similarity index 59% rename from src/main/java/com/volmit/iris/gen/v2/scaffold/stream/FittedStream.java rename to src/main/java/com/volmit/iris/gen/v2/scaffold/stream/arithmetic/FittedStream.java index 8292c03fe..fcd2d6103 100644 --- a/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/FittedStream.java +++ b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/arithmetic/FittedStream.java @@ -1,11 +1,10 @@ -package com.volmit.iris.gen.v2.scaffold.stream; +package com.volmit.iris.gen.v2.scaffold.stream.arithmetic; -import com.volmit.iris.gen.v2.scaffold.layer.BasicLayer; -import com.volmit.iris.gen.v2.scaffold.layer.ProceduralStream; +import com.volmit.iris.gen.v2.scaffold.stream.BasicStream; +import com.volmit.iris.gen.v2.scaffold.stream.ProceduralStream; -public class FittedStream extends BasicLayer implements ProceduralStream +public class FittedStream extends BasicStream implements ProceduralStream { - private final ProceduralStream stream; private final double min; private final double max; private final double inMin; @@ -13,8 +12,7 @@ public class FittedStream extends BasicLayer implements ProceduralStream public FittedStream(ProceduralStream stream, double inMin, double inMax, double min, double max) { - super(); - this.stream = stream; + super(stream); this.inMin = inMin; this.inMax = inMax; this.min = min; @@ -29,13 +27,13 @@ public class FittedStream extends BasicLayer implements ProceduralStream @Override public double toDouble(T t) { - return stream.toDouble(t); + return getTypedSource().toDouble(t); } @Override public T fromDouble(double d) { - return stream.fromDouble(d); + return getTypedSource().fromDouble(d); } private double dlerp(double v) @@ -46,13 +44,13 @@ public class FittedStream extends BasicLayer implements ProceduralStream @Override public T get(double x, double z) { - return fromDouble(dlerp(stream.getDouble(x, z))); + return fromDouble(dlerp(getTypedSource().getDouble(x, z))); } @Override public T get(double x, double y, double z) { - return fromDouble(dlerp(stream.getDouble(x, y, z))); + return fromDouble(dlerp(getTypedSource().getDouble(x, y, z))); } } diff --git a/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/MaxingStream.java b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/arithmetic/MaxingStream.java similarity index 57% rename from src/main/java/com/volmit/iris/gen/v2/scaffold/stream/MaxingStream.java rename to src/main/java/com/volmit/iris/gen/v2/scaffold/stream/arithmetic/MaxingStream.java index ca6604288..e58a49a87 100644 --- a/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/MaxingStream.java +++ b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/arithmetic/MaxingStream.java @@ -1,19 +1,17 @@ -package com.volmit.iris.gen.v2.scaffold.stream; +package com.volmit.iris.gen.v2.scaffold.stream.arithmetic; -import com.volmit.iris.gen.v2.scaffold.layer.BasicLayer; -import com.volmit.iris.gen.v2.scaffold.layer.ProceduralStream; +import com.volmit.iris.gen.v2.scaffold.stream.BasicStream; +import com.volmit.iris.gen.v2.scaffold.stream.ProceduralStream; import com.volmit.iris.util.Function2; import com.volmit.iris.util.Function3; -public class MaxingStream extends BasicLayer implements ProceduralStream +public class MaxingStream extends BasicStream { - private final ProceduralStream stream; private final Function3 add; public MaxingStream(ProceduralStream stream, Function3 add) { - super(); - this.stream = stream; + super(stream); this.add = add; } @@ -30,25 +28,25 @@ public class MaxingStream extends BasicLayer implements ProceduralStream @Override public double toDouble(T t) { - return stream.toDouble(t); + return getTypedSource().toDouble(t); } @Override public T fromDouble(double d) { - return stream.fromDouble(d); + return getTypedSource().fromDouble(d); } @Override public T get(double x, double z) { - return fromDouble(Math.max(add.apply(x, 0D, z), stream.getDouble(x, z))); + return fromDouble(Math.max(add.apply(x, 0D, z), getTypedSource().getDouble(x, z))); } @Override public T get(double x, double y, double z) { - return fromDouble(Math.max(add.apply(x, y, z), stream.getDouble(x, y, z))); + return fromDouble(Math.max(add.apply(x, y, z), getTypedSource().getDouble(x, y, z))); } } diff --git a/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/MinningStream.java b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/arithmetic/MinningStream.java similarity index 57% rename from src/main/java/com/volmit/iris/gen/v2/scaffold/stream/MinningStream.java rename to src/main/java/com/volmit/iris/gen/v2/scaffold/stream/arithmetic/MinningStream.java index 7740093bc..fc356c0c0 100644 --- a/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/MinningStream.java +++ b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/arithmetic/MinningStream.java @@ -1,19 +1,17 @@ -package com.volmit.iris.gen.v2.scaffold.stream; +package com.volmit.iris.gen.v2.scaffold.stream.arithmetic; -import com.volmit.iris.gen.v2.scaffold.layer.BasicLayer; -import com.volmit.iris.gen.v2.scaffold.layer.ProceduralStream; +import com.volmit.iris.gen.v2.scaffold.stream.BasicStream; +import com.volmit.iris.gen.v2.scaffold.stream.ProceduralStream; import com.volmit.iris.util.Function2; import com.volmit.iris.util.Function3; -public class MinningStream extends BasicLayer implements ProceduralStream +public class MinningStream extends BasicStream { - private final ProceduralStream stream; private final Function3 add; public MinningStream(ProceduralStream stream, Function3 add) { - super(); - this.stream = stream; + super(stream); this.add = add; } @@ -30,25 +28,25 @@ public class MinningStream extends BasicLayer implements ProceduralStream @Override public double toDouble(T t) { - return stream.toDouble(t); + return getTypedSource().toDouble(t); } @Override public T fromDouble(double d) { - return stream.fromDouble(d); + return getTypedSource().fromDouble(d); } @Override public T get(double x, double z) { - return fromDouble(Math.min(add.apply(x, 0D, z), stream.getDouble(x, z))); + return fromDouble(Math.min(add.apply(x, 0D, z), getTypedSource().getDouble(x, z))); } @Override public T get(double x, double y, double z) { - return fromDouble(Math.min(add.apply(x, y, z), stream.getDouble(x, y, z))); + return fromDouble(Math.min(add.apply(x, y, z), getTypedSource().getDouble(x, y, z))); } } diff --git a/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/ModuloStream.java b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/arithmetic/ModuloStream.java similarity index 58% rename from src/main/java/com/volmit/iris/gen/v2/scaffold/stream/ModuloStream.java rename to src/main/java/com/volmit/iris/gen/v2/scaffold/stream/arithmetic/ModuloStream.java index ff7bddb04..495251d05 100644 --- a/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/ModuloStream.java +++ b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/arithmetic/ModuloStream.java @@ -1,19 +1,17 @@ -package com.volmit.iris.gen.v2.scaffold.stream; +package com.volmit.iris.gen.v2.scaffold.stream.arithmetic; -import com.volmit.iris.gen.v2.scaffold.layer.BasicLayer; -import com.volmit.iris.gen.v2.scaffold.layer.ProceduralStream; +import com.volmit.iris.gen.v2.scaffold.stream.BasicStream; +import com.volmit.iris.gen.v2.scaffold.stream.ProceduralStream; import com.volmit.iris.util.Function2; import com.volmit.iris.util.Function3; -public class ModuloStream extends BasicLayer implements ProceduralStream +public class ModuloStream extends BasicStream { - private final ProceduralStream stream; private final Function3 add; public ModuloStream(ProceduralStream stream, Function3 add) { - super(); - this.stream = stream; + super(stream); this.add = add; } @@ -30,24 +28,24 @@ public class ModuloStream extends BasicLayer implements ProceduralStream @Override public double toDouble(T t) { - return stream.toDouble(t); + return getTypedSource().toDouble(t); } @Override public T fromDouble(double d) { - return stream.fromDouble(d); + return getTypedSource().fromDouble(d); } @Override public T get(double x, double z) { - return fromDouble(stream.getDouble(x, z) % add.apply(x, 0D, z)); + return fromDouble(getTypedSource().getDouble(x, z) % add.apply(x, 0D, z)); } @Override public T get(double x, double y, double z) { - return fromDouble(stream.getDouble(x, y, z) % add.apply(x, y, z)); + return fromDouble(getTypedSource().getDouble(x, y, z) % add.apply(x, y, z)); } } diff --git a/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/MultiplyingStream.java b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/arithmetic/MultiplyingStream.java similarity index 58% rename from src/main/java/com/volmit/iris/gen/v2/scaffold/stream/MultiplyingStream.java rename to src/main/java/com/volmit/iris/gen/v2/scaffold/stream/arithmetic/MultiplyingStream.java index bdfbedd32..767235efe 100644 --- a/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/MultiplyingStream.java +++ b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/arithmetic/MultiplyingStream.java @@ -1,19 +1,17 @@ -package com.volmit.iris.gen.v2.scaffold.stream; +package com.volmit.iris.gen.v2.scaffold.stream.arithmetic; -import com.volmit.iris.gen.v2.scaffold.layer.BasicLayer; -import com.volmit.iris.gen.v2.scaffold.layer.ProceduralStream; +import com.volmit.iris.gen.v2.scaffold.stream.BasicStream; +import com.volmit.iris.gen.v2.scaffold.stream.ProceduralStream; import com.volmit.iris.util.Function2; import com.volmit.iris.util.Function3; -public class MultiplyingStream extends BasicLayer implements ProceduralStream +public class MultiplyingStream extends BasicStream { - private final ProceduralStream stream; private final Function3 add; public MultiplyingStream(ProceduralStream stream, Function3 add) { - super(); - this.stream = stream; + super(stream); this.add = add; } @@ -30,24 +28,24 @@ public class MultiplyingStream extends BasicLayer implements ProceduralStream @Override public double toDouble(T t) { - return stream.toDouble(t); + return getTypedSource().toDouble(t); } @Override public T fromDouble(double d) { - return stream.fromDouble(d); + return getTypedSource().fromDouble(d); } @Override public T get(double x, double z) { - return fromDouble(stream.getDouble(x, z) * add.apply(x, 0D, z)); + return fromDouble(getTypedSource().getDouble(x, z) * add.apply(x, 0D, z)); } @Override public T get(double x, double y, double z) { - return fromDouble(stream.getDouble(x, y, z) * add.apply(x, y, z)); + return fromDouble(getTypedSource().getDouble(x, y, z) * add.apply(x, y, z)); } } diff --git a/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/arithmetic/OffsetStream.java b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/arithmetic/OffsetStream.java new file mode 100644 index 000000000..9a4354e6a --- /dev/null +++ b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/arithmetic/OffsetStream.java @@ -0,0 +1,44 @@ +package com.volmit.iris.gen.v2.scaffold.stream.arithmetic; + +import com.volmit.iris.gen.v2.scaffold.stream.BasicStream; +import com.volmit.iris.gen.v2.scaffold.stream.ProceduralStream; + +public class OffsetStream extends BasicStream implements ProceduralStream +{ + private final double ox; + private final double oy; + private final double oz; + + public OffsetStream(ProceduralStream stream, double x, double y, double z) + { + super(stream); + this.ox = x; + this.oy = y; + this.oz = z; + } + + @Override + public double toDouble(T t) + { + return getTypedSource().toDouble(t); + } + + @Override + public T fromDouble(double d) + { + return getTypedSource().fromDouble(d); + } + + @Override + public T get(double x, double z) + { + return getTypedSource().get(x + ox, z + oz); + } + + @Override + public T get(double x, double y, double z) + { + return getTypedSource().get(x + ox, y + oy, z + oz); + } + +} diff --git a/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/arithmetic/RadialStream.java b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/arithmetic/RadialStream.java new file mode 100644 index 000000000..961d5779e --- /dev/null +++ b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/arithmetic/RadialStream.java @@ -0,0 +1,50 @@ +package com.volmit.iris.gen.v2.scaffold.stream.arithmetic; + +import com.volmit.iris.gen.v2.scaffold.stream.BasicStream; +import com.volmit.iris.gen.v2.scaffold.stream.ProceduralStream; + +public class RadialStream extends BasicStream implements ProceduralStream +{ + private final double scale; + + public RadialStream(ProceduralStream stream) + { + this(stream, 1D); + } + + public RadialStream(ProceduralStream stream, double scale) + { + super(stream); + this.scale = scale; + } + + @Override + public double toDouble(T t) + { + return getTypedSource().toDouble(t); + } + + @Override + public T fromDouble(double d) + { + return getTypedSource().fromDouble(d); + } + + private double radii(double v) + { + return (v / (360D * scale)) % 360D; + } + + @Override + public T get(double x, double z) + { + return fromDouble(radii(getTypedSource().getDouble(x, z))); + } + + @Override + public T get(double x, double y, double z) + { + return fromDouble(radii(getTypedSource().getDouble(x, y, z))); + } + +} diff --git a/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/RoundingDoubleStream.java b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/arithmetic/RoundingDoubleStream.java similarity index 66% rename from src/main/java/com/volmit/iris/gen/v2/scaffold/stream/RoundingDoubleStream.java rename to src/main/java/com/volmit/iris/gen/v2/scaffold/stream/arithmetic/RoundingDoubleStream.java index 605ff5101..9eb6ac0f8 100644 --- a/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/RoundingDoubleStream.java +++ b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/arithmetic/RoundingDoubleStream.java @@ -1,9 +1,9 @@ -package com.volmit.iris.gen.v2.scaffold.stream; +package com.volmit.iris.gen.v2.scaffold.stream.arithmetic; -import com.volmit.iris.gen.v2.scaffold.layer.BasicLayer; -import com.volmit.iris.gen.v2.scaffold.layer.ProceduralStream; +import com.volmit.iris.gen.v2.scaffold.stream.BasicStream; +import com.volmit.iris.gen.v2.scaffold.stream.ProceduralStream; -public class RoundingDoubleStream extends BasicLayer implements ProceduralStream +public class RoundingDoubleStream extends BasicStream { private final ProceduralStream stream; @@ -16,7 +16,7 @@ public class RoundingDoubleStream extends BasicLayer implements ProceduralStream @Override public double toDouble(Double t) { - return t.doubleValue(); + return t; } @Override diff --git a/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/arithmetic/SlopeStream.java b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/arithmetic/SlopeStream.java new file mode 100644 index 000000000..847aa293a --- /dev/null +++ b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/arithmetic/SlopeStream.java @@ -0,0 +1,49 @@ +package com.volmit.iris.gen.v2.scaffold.stream.arithmetic; + +import com.volmit.iris.gen.v2.scaffold.stream.BasicStream; +import com.volmit.iris.gen.v2.scaffold.stream.ProceduralStream; + +public class SlopeStream extends BasicStream +{ + private final int range; + + public SlopeStream(ProceduralStream stream, int range) + { + super(stream); + this.range = range; + } + + @Override + public double toDouble(T t) + { + return getTypedSource().toDouble(t); + } + + @Override + public T fromDouble(double d) + { + return getTypedSource().fromDouble(d); + } + + @Override + public T get(double x, double z) + { + double height = getTypedSource().getDouble(x, z); + double dx = getTypedSource().getDouble(x + range, z) - height; + double dy = getTypedSource().getDouble(x, z + range) - height; + + return fromDouble(Math.sqrt(dx * dx + dy * dy)); + } + + @Override + public T get(double x, double y, double z) + { + double height = getTypedSource().getDouble(x, y, z); + double dx = getTypedSource().getDouble(x + range,y, z) - height; + double dy = getTypedSource().getDouble(x,y+range, z) - height; + double dz = getTypedSource().getDouble(x,y, z + range) - height; + + return fromDouble(Math.cbrt((dx * dx) + (dy * dy) + (dz * dz))); + } + +} diff --git a/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/SubtractingStream.java b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/arithmetic/SubtractingStream.java similarity index 58% rename from src/main/java/com/volmit/iris/gen/v2/scaffold/stream/SubtractingStream.java rename to src/main/java/com/volmit/iris/gen/v2/scaffold/stream/arithmetic/SubtractingStream.java index bf5a21df5..1978d5732 100644 --- a/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/SubtractingStream.java +++ b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/arithmetic/SubtractingStream.java @@ -1,19 +1,17 @@ -package com.volmit.iris.gen.v2.scaffold.stream; +package com.volmit.iris.gen.v2.scaffold.stream.arithmetic; -import com.volmit.iris.gen.v2.scaffold.layer.BasicLayer; -import com.volmit.iris.gen.v2.scaffold.layer.ProceduralStream; +import com.volmit.iris.gen.v2.scaffold.stream.BasicStream; +import com.volmit.iris.gen.v2.scaffold.stream.ProceduralStream; import com.volmit.iris.util.Function2; import com.volmit.iris.util.Function3; -public class SubtractingStream extends BasicLayer implements ProceduralStream +public class SubtractingStream extends BasicStream { - private final ProceduralStream stream; private final Function3 add; public SubtractingStream(ProceduralStream stream, Function3 add) { - super(); - this.stream = stream; + super(stream); this.add = add; } @@ -30,24 +28,24 @@ public class SubtractingStream extends BasicLayer implements ProceduralStream @Override public double toDouble(T t) { - return stream.toDouble(t); + return getTypedSource().toDouble(t); } @Override public T fromDouble(double d) { - return stream.fromDouble(d); + return getTypedSource().fromDouble(d); } @Override public T get(double x, double z) { - return fromDouble(stream.getDouble(x, z) - add.apply(x, 0D, z)); + return fromDouble(getTypedSource().getDouble(x, z) - add.apply(x, 0D, z)); } @Override public T get(double x, double y, double z) { - return fromDouble(stream.getDouble(x, y, z) - add.apply(x, y, z)); + return fromDouble(getTypedSource().getDouble(x, y, z) - add.apply(x, y, z)); } } diff --git a/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/arithmetic/ZoomStream.java b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/arithmetic/ZoomStream.java new file mode 100644 index 000000000..331e56b24 --- /dev/null +++ b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/arithmetic/ZoomStream.java @@ -0,0 +1,44 @@ +package com.volmit.iris.gen.v2.scaffold.stream.arithmetic; + +import com.volmit.iris.gen.v2.scaffold.stream.BasicStream; +import com.volmit.iris.gen.v2.scaffold.stream.ProceduralStream; + +public class ZoomStream extends BasicStream +{ + private final double ox; + private final double oy; + private final double oz; + + public ZoomStream(ProceduralStream stream, double x, double y, double z) + { + super(stream); + this.ox = x; + this.oy = y; + this.oz = z; + } + + @Override + public double toDouble(T t) + { + return getTypedSource().toDouble(t); + } + + @Override + public T fromDouble(double d) + { + return getTypedSource().fromDouble(d); + } + + @Override + public T get(double x, double z) + { + return getTypedSource().get(x / ox, z / oz); + } + + @Override + public T get(double x, double y, double z) + { + return getTypedSource().get(x / ox, y / oy, z / oz); + } + +} 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/convert/AwareConversionStream2D.java similarity index 65% rename from src/main/java/com/volmit/iris/gen/v2/scaffold/stream/AwareConversionStream2D.java rename to src/main/java/com/volmit/iris/gen/v2/scaffold/stream/convert/AwareConversionStream2D.java index a6d1f87d6..fd806958c 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/convert/AwareConversionStream2D.java @@ -1,17 +1,17 @@ -package com.volmit.iris.gen.v2.scaffold.stream; +package com.volmit.iris.gen.v2.scaffold.stream.convert; -import com.volmit.iris.gen.v2.scaffold.layer.BasicLayer; -import com.volmit.iris.gen.v2.scaffold.layer.ProceduralStream; +import com.volmit.iris.gen.v2.scaffold.stream.BasicStream; +import com.volmit.iris.gen.v2.scaffold.stream.ProceduralStream; import com.volmit.iris.util.Function3; -public class AwareConversionStream2D extends BasicLayer implements ProceduralStream +public class AwareConversionStream2D extends BasicStream { private final ProceduralStream stream; private final Function3 converter; public AwareConversionStream2D(ProceduralStream stream, Function3 converter) { - super(); + super(null); this.stream = stream; this.converter = converter; } @@ -21,7 +21,7 @@ public class AwareConversionStream2D extends BasicLayer implements Procedu { if(t instanceof Double) { - return (double) t; + return (Double) t; } return 0; @@ -33,6 +33,11 @@ public class AwareConversionStream2D extends BasicLayer implements Procedu return null; } + @Override + public ProceduralStream getSource() { + return stream; + } + @Override public V get(double x, double z) { 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/convert/AwareConversionStream3D.java similarity index 66% rename from src/main/java/com/volmit/iris/gen/v2/scaffold/stream/AwareConversionStream3D.java rename to src/main/java/com/volmit/iris/gen/v2/scaffold/stream/convert/AwareConversionStream3D.java index 98bd3d677..c63aca49f 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/convert/AwareConversionStream3D.java @@ -1,17 +1,17 @@ -package com.volmit.iris.gen.v2.scaffold.stream; +package com.volmit.iris.gen.v2.scaffold.stream.convert; -import com.volmit.iris.gen.v2.scaffold.layer.BasicLayer; -import com.volmit.iris.gen.v2.scaffold.layer.ProceduralStream; +import com.volmit.iris.gen.v2.scaffold.stream.BasicStream; +import com.volmit.iris.gen.v2.scaffold.stream.ProceduralStream; import com.volmit.iris.util.Function4; -public class AwareConversionStream3D extends BasicLayer implements ProceduralStream +public class AwareConversionStream3D extends BasicStream { private final ProceduralStream stream; private final Function4 converter; public AwareConversionStream3D(ProceduralStream stream, Function4 converter) { - super(); + super(null); this.stream = stream; this.converter = converter; } @@ -21,7 +21,7 @@ public class AwareConversionStream3D extends BasicLayer implements Procedu { if(t instanceof Double) { - return (double) t; + return (Double) t; } return 0; @@ -31,6 +31,11 @@ public class AwareConversionStream3D extends BasicLayer implements Procedu public V fromDouble(double d) { return null; + + + }@Override + public ProceduralStream getSource() { + return stream; } @Override diff --git a/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/CachedConversionStream.java b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/convert/CachedConversionStream.java similarity index 72% rename from src/main/java/com/volmit/iris/gen/v2/scaffold/stream/CachedConversionStream.java rename to src/main/java/com/volmit/iris/gen/v2/scaffold/stream/convert/CachedConversionStream.java index bacdac251..85a2ba1a4 100644 --- a/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/CachedConversionStream.java +++ b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/convert/CachedConversionStream.java @@ -1,9 +1,9 @@ -package com.volmit.iris.gen.v2.scaffold.stream; +package com.volmit.iris.gen.v2.scaffold.stream.convert; import java.util.function.Function; -import com.volmit.iris.gen.v2.scaffold.layer.BasicLayer; -import com.volmit.iris.gen.v2.scaffold.layer.ProceduralStream; +import com.volmit.iris.gen.v2.scaffold.stream.BasicLayer; +import com.volmit.iris.gen.v2.scaffold.stream.ProceduralStream; import com.volmit.iris.util.KMap; public class CachedConversionStream extends BasicLayer implements ProceduralStream @@ -32,6 +32,16 @@ public class CachedConversionStream extends BasicLayer implements Procedur return null; } + @Override + public ProceduralStream getTypedSource() { + return null; + } + + @Override + public ProceduralStream getSource() { + return stream; + } + @Override public V get(double x, double z) { 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/convert/ConversionStream.java similarity index 67% rename from src/main/java/com/volmit/iris/gen/v2/scaffold/stream/ConversionStream.java rename to src/main/java/com/volmit/iris/gen/v2/scaffold/stream/convert/ConversionStream.java index 76deb3e32..ec6053f62 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/convert/ConversionStream.java @@ -1,9 +1,9 @@ -package com.volmit.iris.gen.v2.scaffold.stream; +package com.volmit.iris.gen.v2.scaffold.stream.convert; import java.util.function.Function; -import com.volmit.iris.gen.v2.scaffold.layer.BasicLayer; -import com.volmit.iris.gen.v2.scaffold.layer.ProceduralStream; +import com.volmit.iris.gen.v2.scaffold.stream.BasicLayer; +import com.volmit.iris.gen.v2.scaffold.stream.ProceduralStream; public class ConversionStream extends BasicLayer implements ProceduralStream { @@ -22,7 +22,7 @@ public class ConversionStream extends BasicLayer implements ProceduralStre { if(t instanceof Double) { - return (double) t; + return (Double) t; } return 0; @@ -34,6 +34,16 @@ public class ConversionStream extends BasicLayer implements ProceduralStre return null; } + @Override + public ProceduralStream getTypedSource() { + return null; + } + + @Override + public ProceduralStream getSource() { + return null; + } + @Override public V get(double x, double z) { diff --git a/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/convert/ForceDoubleStream.java b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/convert/ForceDoubleStream.java new file mode 100644 index 000000000..5976d4b42 --- /dev/null +++ b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/convert/ForceDoubleStream.java @@ -0,0 +1,40 @@ +package com.volmit.iris.gen.v2.scaffold.stream.convert; + +import com.volmit.iris.gen.v2.scaffold.stream.BasicStream; +import com.volmit.iris.gen.v2.scaffold.stream.ProceduralStream; + +public class ForceDoubleStream extends BasicStream +{ + private ProceduralStream stream; + + public ForceDoubleStream(ProceduralStream stream) + { + super(null); + } + + @Override + public double toDouble(Double t) + { + return t; + } + + @SuppressWarnings("unchecked") + @Override + public Double fromDouble(double d) + { + return d; + } + + @Override + public Double get(double x, double z) + { + return stream.getDouble(x, z); + } + + @Override + public Double get(double x, double y, double z) + { + return stream.getDouble(x, y, z); + } + +} diff --git a/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/RoundingStream.java b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/convert/RoundingStream.java similarity index 69% rename from src/main/java/com/volmit/iris/gen/v2/scaffold/stream/RoundingStream.java rename to src/main/java/com/volmit/iris/gen/v2/scaffold/stream/convert/RoundingStream.java index dc52887f9..7e2e1f24a 100644 --- a/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/RoundingStream.java +++ b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/convert/RoundingStream.java @@ -1,9 +1,9 @@ -package com.volmit.iris.gen.v2.scaffold.stream; +package com.volmit.iris.gen.v2.scaffold.stream.convert; -import com.volmit.iris.gen.v2.scaffold.layer.BasicLayer; -import com.volmit.iris.gen.v2.scaffold.layer.ProceduralStream; +import com.volmit.iris.gen.v2.scaffold.stream.BasicStream; +import com.volmit.iris.gen.v2.scaffold.stream.ProceduralStream; -public class RoundingStream extends BasicLayer implements ProceduralStream +public class RoundingStream extends BasicStream { private final ProceduralStream stream; @@ -41,5 +41,4 @@ public class RoundingStream extends BasicLayer implements ProceduralStream extends BasicLayer implements ProceduralStream +public class SelectionStream extends BasicStream { private final ProceduralStream stream; private final T[] options; diff --git a/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/SignificanceStream.java b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/convert/SignificanceStream.java similarity index 86% rename from src/main/java/com/volmit/iris/gen/v2/scaffold/stream/SignificanceStream.java rename to src/main/java/com/volmit/iris/gen/v2/scaffold/stream/convert/SignificanceStream.java index e507087ee..8d649601f 100644 --- a/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/SignificanceStream.java +++ b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/convert/SignificanceStream.java @@ -1,12 +1,12 @@ -package com.volmit.iris.gen.v2.scaffold.stream; +package com.volmit.iris.gen.v2.scaffold.stream.convert; import com.volmit.iris.gen.v2.scaffold.ArraySignificance; import com.volmit.iris.gen.v2.scaffold.Significance; -import com.volmit.iris.gen.v2.scaffold.layer.BasicLayer; -import com.volmit.iris.gen.v2.scaffold.layer.ProceduralStream; +import com.volmit.iris.gen.v2.scaffold.stream.BasicStream; +import com.volmit.iris.gen.v2.scaffold.stream.ProceduralStream; import com.volmit.iris.util.KList; -public class SignificanceStream, T> extends BasicLayer implements ProceduralStream +public class SignificanceStream, T> extends BasicStream { private final ProceduralStream stream; private final double radius; diff --git a/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/convert/To3DStream.java b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/convert/To3DStream.java new file mode 100644 index 000000000..3c9440973 --- /dev/null +++ b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/convert/To3DStream.java @@ -0,0 +1,36 @@ +package com.volmit.iris.gen.v2.scaffold.stream.convert; + +import com.volmit.iris.gen.v2.scaffold.stream.BasicStream; +import com.volmit.iris.gen.v2.scaffold.stream.ProceduralStream; + +public class To3DStream extends BasicStream +{ + public To3DStream(ProceduralStream stream) + { + super(stream); + } + + @Override + public double toDouble(T t) + { + return getTypedSource().toDouble(t); + } + + @Override + public T fromDouble(double d) + { + return getTypedSource().fromDouble(d); + } + + @Override + public T get(double x, double z) + { + return getTypedSource().get(x, z); + } + + @Override + public T get(double x, double y, double z) + { + return getTypedSource().fromDouble(getTypedSource().getDouble(x, z) >= y ? 1D : 0D); + } +} diff --git a/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/BiHermiteStream.java b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/interpolation/BiHermiteStream.java similarity index 55% rename from src/main/java/com/volmit/iris/gen/v2/scaffold/stream/BiHermiteStream.java rename to src/main/java/com/volmit/iris/gen/v2/scaffold/stream/interpolation/BiHermiteStream.java index 8733abb36..cc2ad0f05 100644 --- a/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/BiHermiteStream.java +++ b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/interpolation/BiHermiteStream.java @@ -1,12 +1,11 @@ -package com.volmit.iris.gen.v2.scaffold.stream; +package com.volmit.iris.gen.v2.scaffold.stream.interpolation; -import com.volmit.iris.gen.v2.scaffold.layer.BasicLayer; -import com.volmit.iris.gen.v2.scaffold.layer.ProceduralStream; +import com.volmit.iris.gen.v2.scaffold.stream.BasicStream; +import com.volmit.iris.gen.v2.scaffold.stream.ProceduralStream; import com.volmit.iris.util.IrisInterpolation; -public class BiHermiteStream extends BasicLayer implements ProceduralStream, Interpolator +public class BiHermiteStream extends BasicStream implements Interpolator { - private final ProceduralStream stream; private final int rx; private final int ry; private final double tension; @@ -14,7 +13,7 @@ public class BiHermiteStream extends BasicLayer implements ProceduralStream stream, int rx, int ry, double tension, double bias) { - this.stream = stream; + super(stream); this.rx = rx; this.ry = ry; this.tension = tension; @@ -42,23 +41,23 @@ public class BiHermiteStream extends BasicLayer implements ProceduralStream extends BasicLayer implements ProceduralStream extends BasicLayer implements ProceduralStream, Interpolator +public class BiStarcastStream extends BasicStream implements Interpolator { - private ProceduralStream stream; private int rad; private int checks; public BiStarcastStream(ProceduralStream stream, int rad, int checks) { - this.stream = stream; + super(stream); this.rad = rad; this.checks = checks; } public T interpolate(double x, double y) { - double m = (360 / checks); + double m = (360D / checks); double v = 0; for(int i = 0; i < 360; i += m) @@ -27,22 +26,22 @@ public class BiStarcastStream extends BasicLayer implements ProceduralStream< double cos = Math.cos(Math.toRadians(i)); double cx = x + ((rad * cos) - (rad * sin)); double cz = y + ((rad * sin) + (rad * cos)); - v += stream.getDouble(cx, cz); + v += getTypedSource().getDouble(cx, cz); } - return stream.fromDouble(v / checks); + return getTypedSource().fromDouble(v / checks); } @Override public double toDouble(T t) { - return stream.toDouble(t); + return getTypedSource().toDouble(t); } @Override public T fromDouble(double d) { - return stream.fromDouble(d); + return getTypedSource().fromDouble(d); } @Override diff --git a/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/BicubicStream.java b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/interpolation/BicubicStream.java similarity index 50% rename from src/main/java/com/volmit/iris/gen/v2/scaffold/stream/BicubicStream.java rename to src/main/java/com/volmit/iris/gen/v2/scaffold/stream/interpolation/BicubicStream.java index 9194981ae..96a5a9c6d 100644 --- a/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/BicubicStream.java +++ b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/interpolation/BicubicStream.java @@ -1,18 +1,17 @@ -package com.volmit.iris.gen.v2.scaffold.stream; +package com.volmit.iris.gen.v2.scaffold.stream.interpolation; -import com.volmit.iris.gen.v2.scaffold.layer.BasicLayer; -import com.volmit.iris.gen.v2.scaffold.layer.ProceduralStream; +import com.volmit.iris.gen.v2.scaffold.stream.BasicStream; +import com.volmit.iris.gen.v2.scaffold.stream.ProceduralStream; import com.volmit.iris.util.IrisInterpolation; -public class BicubicStream extends BasicLayer implements ProceduralStream, Interpolator +public class BicubicStream extends BasicStream implements Interpolator { - private final ProceduralStream stream; private final int rx; private final int ry; public BicubicStream(ProceduralStream stream, int rx, int ry) { - this.stream = stream; + super(stream); this.rx = rx; this.ry = ry; } @@ -33,23 +32,23 @@ public class BicubicStream extends BasicLayer implements ProceduralStream, double pz = IrisInterpolation.rangeScale(0, 1, z1, z2, y); //@builder - return stream.fromDouble(IrisInterpolation.bicubic( - stream.getDouble(x0, z0), - stream.getDouble(x0, z1), - stream.getDouble(x0, z2), - stream.getDouble(x0, z3), - stream.getDouble(x1, z0), - stream.getDouble(x1, z1), - stream.getDouble(x1, z2), - stream.getDouble(x1, z3), - stream.getDouble(x2, z0), - stream.getDouble(x2, z1), - stream.getDouble(x2, z2), - stream.getDouble(x2, z3), - stream.getDouble(x3, z0), - stream.getDouble(x3, z1), - stream.getDouble(x3, z2), - stream.getDouble(x3, z3), + return getTypedSource().fromDouble(IrisInterpolation.bicubic( + getTypedSource().getDouble(x0, z0), + getTypedSource().getDouble(x0, z1), + getTypedSource().getDouble(x0, z2), + getTypedSource().getDouble(x0, z3), + getTypedSource().getDouble(x1, z0), + getTypedSource().getDouble(x1, z1), + getTypedSource().getDouble(x1, z2), + getTypedSource().getDouble(x1, z3), + getTypedSource().getDouble(x2, z0), + getTypedSource().getDouble(x2, z1), + getTypedSource().getDouble(x2, z2), + getTypedSource().getDouble(x2, z3), + getTypedSource().getDouble(x3, z0), + getTypedSource().getDouble(x3, z1), + getTypedSource().getDouble(x3, z2), + getTypedSource().getDouble(x3, z3), px, pz)); //@done } @@ -57,13 +56,13 @@ public class BicubicStream extends BasicLayer implements ProceduralStream, @Override public double toDouble(T t) { - return stream.toDouble(t); + return getTypedSource().toDouble(t); } @Override public T fromDouble(double d) { - return stream.fromDouble(d); + return getTypedSource().fromDouble(d); } @Override diff --git a/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/BilinearStream.java b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/interpolation/BilinearStream.java similarity index 61% rename from src/main/java/com/volmit/iris/gen/v2/scaffold/stream/BilinearStream.java rename to src/main/java/com/volmit/iris/gen/v2/scaffold/stream/interpolation/BilinearStream.java index 7afde0fd8..d7240b637 100644 --- a/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/BilinearStream.java +++ b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/interpolation/BilinearStream.java @@ -1,18 +1,17 @@ -package com.volmit.iris.gen.v2.scaffold.stream; +package com.volmit.iris.gen.v2.scaffold.stream.interpolation; -import com.volmit.iris.gen.v2.scaffold.layer.BasicLayer; -import com.volmit.iris.gen.v2.scaffold.layer.ProceduralStream; +import com.volmit.iris.gen.v2.scaffold.stream.BasicStream; +import com.volmit.iris.gen.v2.scaffold.stream.ProceduralStream; import com.volmit.iris.util.IrisInterpolation; -public class BilinearStream extends BasicLayer implements ProceduralStream, Interpolator +public class BilinearStream extends BasicStream implements Interpolator { - private final ProceduralStream stream; private final int rx; private final int ry; public BilinearStream(ProceduralStream stream, int rx, int ry) { - this.stream = stream; + super(stream); this.rx = rx; this.ry = ry; } @@ -29,11 +28,11 @@ public class BilinearStream extends BasicLayer implements ProceduralStream double pz = IrisInterpolation.rangeScale(0, 1, z1, z2, y); //@builder - return stream.fromDouble(IrisInterpolation.blerp( - stream.getDouble(x1, z1), - stream.getDouble(x2, z1), - stream.getDouble(x1, z2), - stream.getDouble(x2, z2), + return getTypedSource().fromDouble(IrisInterpolation.blerp( + getTypedSource().getDouble(x1, z1), + getTypedSource().getDouble(x2, z1), + getTypedSource().getDouble(x1, z2), + getTypedSource().getDouble(x2, z2), px, pz)); //@done } @@ -41,13 +40,13 @@ public class BilinearStream extends BasicLayer implements ProceduralStream @Override public double toDouble(T t) { - return stream.toDouble(t); + return getTypedSource().toDouble(t); } @Override public T fromDouble(double d) { - return stream.fromDouble(d); + return getTypedSource().fromDouble(d); } @Override diff --git a/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/Interpolated.java b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/interpolation/Interpolated.java similarity index 89% rename from src/main/java/com/volmit/iris/gen/v2/scaffold/stream/Interpolated.java rename to src/main/java/com/volmit/iris/gen/v2/scaffold/stream/interpolation/Interpolated.java index 403eba5fd..0dafec074 100644 --- a/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/Interpolated.java +++ b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/interpolation/Interpolated.java @@ -1,10 +1,10 @@ -package com.volmit.iris.gen.v2.scaffold.stream; +package com.volmit.iris.gen.v2.scaffold.stream.interpolation; import java.util.function.Function; +import com.volmit.iris.gen.v2.scaffold.stream.ProceduralStream; import org.bukkit.block.data.BlockData; -import com.volmit.iris.gen.v2.scaffold.layer.ProceduralStream; import com.volmit.iris.util.RNG; public interface Interpolated diff --git a/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/InterpolatingStream.java b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/interpolation/InterpolatingStream.java similarity index 63% rename from src/main/java/com/volmit/iris/gen/v2/scaffold/stream/InterpolatingStream.java rename to src/main/java/com/volmit/iris/gen/v2/scaffold/stream/interpolation/InterpolatingStream.java index ea04ff18b..3e98d4976 100644 --- a/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/InterpolatingStream.java +++ b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/interpolation/InterpolatingStream.java @@ -1,24 +1,23 @@ -package com.volmit.iris.gen.v2.scaffold.stream; +package com.volmit.iris.gen.v2.scaffold.stream.interpolation; -import com.volmit.iris.gen.v2.scaffold.layer.BasicLayer; -import com.volmit.iris.gen.v2.scaffold.layer.ProceduralStream; +import com.volmit.iris.gen.v2.scaffold.stream.BasicStream; +import com.volmit.iris.gen.v2.scaffold.stream.ProceduralStream; import com.volmit.iris.object.InterpolationMethod; import com.volmit.iris.util.IrisInterpolation; import com.volmit.iris.util.NoiseProvider; -public class InterpolatingStream extends BasicLayer implements ProceduralStream, Interpolator +public class InterpolatingStream extends BasicStream implements Interpolator { - private final ProceduralStream stream; private final InterpolationMethod type; private final NoiseProvider np; private final int rx; public InterpolatingStream(ProceduralStream stream, int rx, InterpolationMethod type) { + super(stream); this.type = type; - this.stream = stream; this.rx = rx; - this.np = (xf, zf) -> stream.getDouble(xf, zf); + this.np = (xf, zf) -> getTypedSource().getDouble(xf, zf); } public T interpolate(double x, double y) @@ -29,13 +28,13 @@ public class InterpolatingStream extends BasicLayer implements ProceduralStre @Override public double toDouble(T t) { - return stream.toDouble(t); + return getTypedSource().toDouble(t); } @Override public T fromDouble(double d) { - return stream.fromDouble(d); + return getTypedSource().fromDouble(d); } @Override diff --git a/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/Interpolator.java b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/interpolation/Interpolator.java similarity index 66% rename from src/main/java/com/volmit/iris/gen/v2/scaffold/stream/Interpolator.java rename to src/main/java/com/volmit/iris/gen/v2/scaffold/stream/interpolation/Interpolator.java index ebb842b9b..e6dc9493b 100644 --- a/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/Interpolator.java +++ b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/interpolation/Interpolator.java @@ -1,6 +1,6 @@ -package com.volmit.iris.gen.v2.scaffold.stream; +package com.volmit.iris.gen.v2.scaffold.stream.interpolation; -import com.volmit.iris.gen.v2.scaffold.layer.ProceduralStream; +import com.volmit.iris.gen.v2.scaffold.stream.ProceduralStream; public interface Interpolator { diff --git a/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/InterpolatorFactory.java b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/interpolation/InterpolatorFactory.java similarity index 94% rename from src/main/java/com/volmit/iris/gen/v2/scaffold/stream/InterpolatorFactory.java rename to src/main/java/com/volmit/iris/gen/v2/scaffold/stream/interpolation/InterpolatorFactory.java index 997b8425f..373ad2b57 100644 --- a/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/InterpolatorFactory.java +++ b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/interpolation/InterpolatorFactory.java @@ -1,6 +1,6 @@ -package com.volmit.iris.gen.v2.scaffold.stream; +package com.volmit.iris.gen.v2.scaffold.stream.interpolation; -import com.volmit.iris.gen.v2.scaffold.layer.ProceduralStream; +import com.volmit.iris.gen.v2.scaffold.stream.ProceduralStream; import com.volmit.iris.object.InterpolationMethod; public class InterpolatorFactory diff --git a/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/interpolation/TriHermiteStream.java b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/interpolation/TriHermiteStream.java new file mode 100644 index 000000000..c1cc43dbd --- /dev/null +++ b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/interpolation/TriHermiteStream.java @@ -0,0 +1,139 @@ +package com.volmit.iris.gen.v2.scaffold.stream.interpolation; + +import com.volmit.iris.gen.v2.scaffold.stream.BasicStream; +import com.volmit.iris.gen.v2.scaffold.stream.ProceduralStream; +import com.volmit.iris.util.IrisInterpolation; + +public class TriHermiteStream extends BasicStream implements Interpolator +{ + private final int rx; + private final int ry; + private final int rz; + private final double tension; + private final double bias; + + public TriHermiteStream(ProceduralStream stream, int rx, int ry, int rz, double tension, double bias) + { + super(stream); + this.rx = rx; + this.ry = ry; + this.rz = rz; + this.tension = tension; + this.bias = bias; + } + + public T interpolate(double x, double y, double z) + { + int fx = (int) Math.floor(x / rx); + int fy = (int) Math.floor(y / ry); + int fz = (int) Math.floor(z / rz); + int x0 = (int) Math.round((fx - 1) * rx); + int y0 = (int) Math.round((fy - 1) * ry); + int z0 = (int) Math.round((fz - 1) * rz); + int x1 = (int) Math.round(fx * rx); + int y1 = (int) Math.round(fy * ry); + int z1 = (int) Math.round(fz * rz); + int x2 = (int) Math.round((fx + 1) * rx); + int y2 = (int) Math.round((fy + 1) * ry); + int z2 = (int) Math.round((fz + 1) * rz); + int x3 = (int) Math.round((fx + 2) * rx); + int y3 = (int) Math.round((fy + 2) * ry); + int z3 = (int) Math.round((fz + 2) * rz); + double px = IrisInterpolation.rangeScale(0, 1, x1, x2, x); + double py = IrisInterpolation.rangeScale(0, 1, y1, y2, y); + double pz = IrisInterpolation.rangeScale(0, 1, z1, z2, z); + + //@builder + return getTypedSource().fromDouble(IrisInterpolation.trihermite( + getTypedSource().getDouble(x0, y0, z0), + getTypedSource().getDouble(x0, y0,z1), + getTypedSource().getDouble(x0, y0,z2), + getTypedSource().getDouble(x0, y0,z3), + getTypedSource().getDouble(x1, y0,z0), + getTypedSource().getDouble(x1, y0,z1), + getTypedSource().getDouble(x1, y0,z2), + getTypedSource().getDouble(x1, y0,z3), + getTypedSource().getDouble(x2, y0,z0), + getTypedSource().getDouble(x2, y0,z1), + getTypedSource().getDouble(x2, y0,z2), + getTypedSource().getDouble(x2, y0,z3), + getTypedSource().getDouble(x3, y0,z0), + getTypedSource().getDouble(x3, y0,z1), + getTypedSource().getDouble(x3, y0,z2), + getTypedSource().getDouble(x3, y0,z3), + getTypedSource().getDouble(x0, y1, z0), + getTypedSource().getDouble(x0, y1,z1), + getTypedSource().getDouble(x0, y1,z2), + getTypedSource().getDouble(x0, y1,z3), + getTypedSource().getDouble(x1, y1,z0), + getTypedSource().getDouble(x1, y1,z1), + getTypedSource().getDouble(x1, y1,z2), + getTypedSource().getDouble(x1, y1,z3), + getTypedSource().getDouble(x2, y1,z0), + getTypedSource().getDouble(x2, y1,z1), + getTypedSource().getDouble(x2, y1,z2), + getTypedSource().getDouble(x2, y1,z3), + getTypedSource().getDouble(x3, y1,z0), + getTypedSource().getDouble(x3, y1,z1), + getTypedSource().getDouble(x3, y1,z2), + getTypedSource().getDouble(x3, y1,z3), + getTypedSource().getDouble(x0, y2, z0), + getTypedSource().getDouble(x0, y2,z1), + getTypedSource().getDouble(x0, y2,z2), + getTypedSource().getDouble(x0, y2,z3), + getTypedSource().getDouble(x1, y2,z0), + getTypedSource().getDouble(x1, y2,z1), + getTypedSource().getDouble(x1, y2,z2), + getTypedSource().getDouble(x1, y2,z3), + getTypedSource().getDouble(x2, y2,z0), + getTypedSource().getDouble(x2, y2,z1), + getTypedSource().getDouble(x2, y2,z2), + getTypedSource().getDouble(x2, y2,z3), + getTypedSource().getDouble(x3, y2,z0), + getTypedSource().getDouble(x3, y2,z1), + getTypedSource().getDouble(x3, y2,z2), + getTypedSource().getDouble(x3, y2,z3), + getTypedSource().getDouble(x0, y3, z0), + getTypedSource().getDouble(x0, y3,z1), + getTypedSource().getDouble(x0, y3,z2), + getTypedSource().getDouble(x0, y3,z3), + getTypedSource().getDouble(x1, y3,z0), + getTypedSource().getDouble(x1, y3,z1), + getTypedSource().getDouble(x1, y3,z2), + getTypedSource().getDouble(x1, y3,z3), + getTypedSource().getDouble(x2, y3,z0), + getTypedSource().getDouble(x2, y3,z1), + getTypedSource().getDouble(x2, y3,z2), + getTypedSource().getDouble(x2, y3,z3), + getTypedSource().getDouble(x3, y3,z0), + getTypedSource().getDouble(x3, y3,z1), + getTypedSource().getDouble(x3, y3,z2), + getTypedSource().getDouble(x3, y3,z3), + px, pz, py, tension, bias)); + //@done + } + + @Override + public double toDouble(T t) + { + return getTypedSource().toDouble(t); + } + + @Override + public T fromDouble(double d) + { + return getTypedSource().fromDouble(d); + } + + @Override + public T get(double x, double z) + { + return interpolate(x, 0, z); + } + + @Override + public T get(double x, double y, double z) + { + return interpolate(x, y, z); + } +} diff --git a/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/TriStarcastStream.java b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/interpolation/TriStarcastStream.java similarity index 58% rename from src/main/java/com/volmit/iris/gen/v2/scaffold/stream/TriStarcastStream.java rename to src/main/java/com/volmit/iris/gen/v2/scaffold/stream/interpolation/TriStarcastStream.java index 4236f7e0a..a5f2d5e27 100644 --- a/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/TriStarcastStream.java +++ b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/interpolation/TriStarcastStream.java @@ -1,24 +1,23 @@ -package com.volmit.iris.gen.v2.scaffold.stream; +package com.volmit.iris.gen.v2.scaffold.stream.interpolation; -import com.volmit.iris.gen.v2.scaffold.layer.BasicLayer; -import com.volmit.iris.gen.v2.scaffold.layer.ProceduralStream; +import com.volmit.iris.gen.v2.scaffold.stream.BasicStream; +import com.volmit.iris.gen.v2.scaffold.stream.ProceduralStream; -public class TriStarcastStream extends BasicLayer implements ProceduralStream, Interpolator +public class TriStarcastStream extends BasicStream implements Interpolator { - private ProceduralStream stream; - private int rad; - private int checks; + private final int rad; + private final int checks; public TriStarcastStream(ProceduralStream stream, int rad, int checks) { - this.stream = stream; + super(stream); this.rad = rad; this.checks = checks; } public T interpolate(double x, double y, double z) { - double m = (360 / checks); + double m = (360D / checks); double v = 0; for(int i = 0; i < 360; i += m) @@ -28,22 +27,22 @@ public class TriStarcastStream extends BasicLayer implements ProceduralStream double cx = x + ((rad * cos) - (rad * sin)); double cy = y + ((rad * sin) + (rad * cos)); double cz = z + ((rad * cos) - (rad * sin)); - v += stream.getDouble(cx, cy, cz); + v += getTypedSource().getDouble(cx, cy, cz); } - return stream.fromDouble(v / checks); + return getTypedSource().fromDouble(v / checks); } @Override public double toDouble(T t) { - return stream.toDouble(t); + return getTypedSource().toDouble(t); } @Override public T fromDouble(double d) { - return stream.fromDouble(d); + return getTypedSource().fromDouble(d); } @Override diff --git a/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/interpolation/TricubicStream.java b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/interpolation/TricubicStream.java new file mode 100644 index 000000000..c7dcd632b --- /dev/null +++ b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/interpolation/TricubicStream.java @@ -0,0 +1,138 @@ +package com.volmit.iris.gen.v2.scaffold.stream.interpolation; + +import com.volmit.iris.gen.v2.scaffold.stream.BasicStream; +import com.volmit.iris.gen.v2.scaffold.stream.ProceduralStream; +import com.volmit.iris.util.IrisInterpolation; + +public class TricubicStream extends BasicStream implements Interpolator +{ + private final int rx; + private final int ry; + private final int rz; + + public TricubicStream(ProceduralStream stream, int rx, int ry, int rz) + { + super(stream); + this.rx = rx; + this.ry = ry; + this.rz = rz; + } + + public T interpolate(double x, double y, double z) + { + int fx = (int) Math.floor(x / rx); + int fy = (int) Math.floor(y / ry); + int fz = (int) Math.floor(z / rz); + int x0 = (int) Math.round((fx - 1) * rx); + int y0 = (int) Math.round((fy - 1) * ry); + int z0 = (int) Math.round((fz - 1) * rz); + int x1 = (int) Math.round(fx * rx); + int y1 = (int) Math.round(fy * ry); + int z1 = (int) Math.round(fz * rz); + int x2 = (int) Math.round((fx + 1) * rx); + int y2 = (int) Math.round((fy + 1) * ry); + int z2 = (int) Math.round((fz + 1) * rz); + int x3 = (int) Math.round((fx + 2) * rx); + int y3 = (int) Math.round((fy + 2) * ry); + int z3 = (int) Math.round((fz + 2) * rz); + double px = IrisInterpolation.rangeScale(0, 1, x1, x2, x); + double py = IrisInterpolation.rangeScale(0, 1, y1, y2, y); + double pz = IrisInterpolation.rangeScale(0, 1, z1, z2, z); + + //@builder + return getTypedSource().fromDouble(IrisInterpolation.tricubic( + getTypedSource().getDouble(x0, y0, z0), + getTypedSource().getDouble(x0, y0,z1), + getTypedSource().getDouble(x0, y0,z2), + getTypedSource().getDouble(x0, y0,z3), + getTypedSource().getDouble(x1, y0,z0), + getTypedSource().getDouble(x1, y0,z1), + getTypedSource().getDouble(x1, y0,z2), + getTypedSource().getDouble(x1, y0,z3), + getTypedSource().getDouble(x2, y0,z0), + getTypedSource().getDouble(x2, y0,z1), + getTypedSource().getDouble(x2, y0,z2), + getTypedSource().getDouble(x2, y0,z3), + getTypedSource().getDouble(x3, y0,z0), + getTypedSource().getDouble(x3, y0,z1), + getTypedSource().getDouble(x3, y0,z2), + getTypedSource().getDouble(x3, y0,z3), + + getTypedSource().getDouble(x0, y1, z0), + getTypedSource().getDouble(x0, y1,z1), + getTypedSource().getDouble(x0, y1,z2), + getTypedSource().getDouble(x0, y1,z3), + getTypedSource().getDouble(x1, y1,z0), + getTypedSource().getDouble(x1, y1,z1), + getTypedSource().getDouble(x1, y1,z2), + getTypedSource().getDouble(x1, y1,z3), + getTypedSource().getDouble(x2, y1,z0), + getTypedSource().getDouble(x2, y1,z1), + getTypedSource().getDouble(x2, y1,z2), + getTypedSource().getDouble(x2, y1,z3), + getTypedSource().getDouble(x3, y1,z0), + getTypedSource().getDouble(x3, y1,z1), + getTypedSource().getDouble(x3, y1,z2), + getTypedSource().getDouble(x3, y1,z3), + + getTypedSource().getDouble(x0, y2, z0), + getTypedSource().getDouble(x0, y2,z1), + getTypedSource().getDouble(x0, y2,z2), + getTypedSource().getDouble(x0, y2,z3), + getTypedSource().getDouble(x1, y2,z0), + getTypedSource().getDouble(x1, y2,z1), + getTypedSource().getDouble(x1, y2,z2), + getTypedSource().getDouble(x1, y2,z3), + getTypedSource().getDouble(x2, y2,z0), + getTypedSource().getDouble(x2, y2,z1), + getTypedSource().getDouble(x2, y2,z2), + getTypedSource().getDouble(x2, y2,z3), + getTypedSource().getDouble(x3, y2,z0), + getTypedSource().getDouble(x3, y2,z1), + getTypedSource().getDouble(x3, y2,z2), + getTypedSource().getDouble(x3, y2,z3), + + getTypedSource().getDouble(x0, y3, z0), + getTypedSource().getDouble(x0, y3,z1), + getTypedSource().getDouble(x0, y3,z2), + getTypedSource().getDouble(x0, y3,z3), + getTypedSource().getDouble(x1, y3,z0), + getTypedSource().getDouble(x1, y3,z1), + getTypedSource().getDouble(x1, y3,z2), + getTypedSource().getDouble(x1, y3,z3), + getTypedSource().getDouble(x2, y3,z0), + getTypedSource().getDouble(x2, y3,z1), + getTypedSource().getDouble(x2, y3,z2), + getTypedSource().getDouble(x2, y3,z3), + getTypedSource().getDouble(x3, y3,z0), + getTypedSource().getDouble(x3, y3,z1), + getTypedSource().getDouble(x3, y3,z2), + getTypedSource().getDouble(x3, y3,z3), + px, pz, py)); + //@done + } + + @Override + public double toDouble(T t) + { + return getTypedSource().toDouble(t); + } + + @Override + public T fromDouble(double d) + { + return getTypedSource().fromDouble(d); + } + + @Override + public T get(double x, double z) + { + return interpolate(x, 0, z); + } + + @Override + public T get(double x, double y, double z) + { + return interpolate(x, y, z); + } +} diff --git a/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/TrilinearStream.java b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/interpolation/TrilinearStream.java similarity index 59% rename from src/main/java/com/volmit/iris/gen/v2/scaffold/stream/TrilinearStream.java rename to src/main/java/com/volmit/iris/gen/v2/scaffold/stream/interpolation/TrilinearStream.java index 39970cfc3..f9faa307b 100644 --- a/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/TrilinearStream.java +++ b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/interpolation/TrilinearStream.java @@ -1,19 +1,18 @@ -package com.volmit.iris.gen.v2.scaffold.stream; +package com.volmit.iris.gen.v2.scaffold.stream.interpolation; -import com.volmit.iris.gen.v2.scaffold.layer.BasicLayer; -import com.volmit.iris.gen.v2.scaffold.layer.ProceduralStream; +import com.volmit.iris.gen.v2.scaffold.stream.BasicStream; +import com.volmit.iris.gen.v2.scaffold.stream.ProceduralStream; import com.volmit.iris.util.IrisInterpolation; -public class TrilinearStream extends BasicLayer implements ProceduralStream, Interpolator +public class TrilinearStream extends BasicStream implements Interpolator { - private final ProceduralStream stream; private final int rx; private final int ry; private final int rz; public TrilinearStream(ProceduralStream stream, int rx, int ry, int rz) { - this.stream = stream; + super(stream); this.rx = rx; this.ry = ry; this.rz = rz; @@ -35,15 +34,15 @@ public class TrilinearStream extends BasicLayer implements ProceduralStream extends BasicLayer implements ProceduralStream @@ -37,6 +37,16 @@ public class CNGStream extends BasicLayer implements ProceduralStream return d; } + @Override + public ProceduralStream getTypedSource() { + return null; + } + + @Override + public ProceduralStream getSource() { + return null; + } + @Override public Double get(double x, double z) { diff --git a/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/FunctionStream.java b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/sources/FunctionStream.java similarity index 74% rename from src/main/java/com/volmit/iris/gen/v2/scaffold/stream/FunctionStream.java rename to src/main/java/com/volmit/iris/gen/v2/scaffold/stream/sources/FunctionStream.java index cceb7e129..87207d338 100644 --- a/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/FunctionStream.java +++ b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/sources/FunctionStream.java @@ -1,11 +1,11 @@ -package com.volmit.iris.gen.v2.scaffold.stream; +package com.volmit.iris.gen.v2.scaffold.stream.sources; -import com.volmit.iris.gen.v2.scaffold.layer.BasicLayer; -import com.volmit.iris.gen.v2.scaffold.layer.ProceduralStream; +import com.volmit.iris.gen.v2.scaffold.stream.BasicStream; +import com.volmit.iris.gen.v2.scaffold.stream.interpolation.Interpolated; import com.volmit.iris.util.Function2; import com.volmit.iris.util.Function3; -public class FunctionStream extends BasicLayer implements ProceduralStream +public class FunctionStream extends BasicStream { private Function2 f2; private Function3 f3; diff --git a/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/CachedStream2D.java b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/utility/CachedStream2D.java similarity index 75% rename from src/main/java/com/volmit/iris/gen/v2/scaffold/stream/CachedStream2D.java rename to src/main/java/com/volmit/iris/gen/v2/scaffold/stream/utility/CachedStream2D.java index 4abbf231b..4cf3ead31 100644 --- a/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/CachedStream2D.java +++ b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/utility/CachedStream2D.java @@ -1,12 +1,12 @@ -package com.volmit.iris.gen.v2.scaffold.stream; +package com.volmit.iris.gen.v2.scaffold.stream.utility; import com.github.benmanes.caffeine.cache.Caffeine; import com.github.benmanes.caffeine.cache.LoadingCache; -import com.volmit.iris.gen.v2.scaffold.layer.BasicLayer; -import com.volmit.iris.gen.v2.scaffold.layer.ProceduralStream; +import com.volmit.iris.gen.v2.scaffold.stream.BasicStream; +import com.volmit.iris.gen.v2.scaffold.stream.ProceduralStream; import com.volmit.iris.util.ChunkPosition; -public class CachedStream2D extends BasicLayer implements ProceduralStream +public class CachedStream2D extends BasicStream implements ProceduralStream { private final ProceduralStream stream; private final LoadingCache cache; diff --git a/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/utility/ProfiledStream.java b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/utility/ProfiledStream.java new file mode 100644 index 000000000..7161a427d --- /dev/null +++ b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/utility/ProfiledStream.java @@ -0,0 +1,179 @@ +package com.volmit.iris.gen.v2.scaffold.stream.utility; + +import com.volmit.iris.gen.v2.scaffold.stream.BasicStream; +import com.volmit.iris.gen.v2.scaffold.stream.ProceduralStream; +import com.volmit.iris.util.Form; +import com.volmit.iris.util.KList; +import com.volmit.iris.util.PrecisionStopwatch; +import com.volmit.iris.util.RollingSequence; +import lombok.Data; + +import java.util.concurrent.atomic.AtomicInteger; +import java.util.function.Consumer; + +public class ProfiledStream extends BasicStream +{ + public static final AtomicInteger ids = new AtomicInteger(); + private final int id; + private final RollingSequence metrics; + + public ProfiledStream(ProceduralStream stream, int memory) + { + super(stream); + this.metrics = new RollingSequence(memory); + this.id = ids.getAndAdd(1); + } + + public int getId() + { + return id; + } + + @Override + public double toDouble(T t) + { + return getTypedSource().toDouble(t); + } + + @Override + public T fromDouble(double d) + { + return getTypedSource().fromDouble(d); + } + + @Override + public T get(double x, double z) + { + PrecisionStopwatch p = PrecisionStopwatch.start(); + T t = getTypedSource().get(x, z); + try + { + metrics.put(p.getMilliseconds()); + } + + catch(Throwable e) + {} + + return t; + } + + @Override + public T get(double x, double y, double z) + { + PrecisionStopwatch p = PrecisionStopwatch.start(); + T t = getTypedSource().get(x, y, z); + try + { + metrics.put(p.getMilliseconds()); + } + + catch(Throwable e) + {} + + return t; + } + + public RollingSequence getMetrics() + { + return metrics; + } + + public static void print(Consumer printer, ProceduralStream stream) { + KList tails = getTails(stream); + int ind = tails.size(); + for(ProfiledTail i : tails) + { + printer.accept(Form.repeat(" ", ind) + i); + ind--; + } + } + + private static KList> getAllChildren(ProceduralStream s) + { + KList> v = new KList<>(); + ProceduralStream cursor = s; + + for(int i = 0; i < 32; i++) + { + v.add(cursor); + cursor = nextChuld(cursor); + + if(cursor == null) + { + break; + } + } + + return v; + } + + private static ProceduralStream nextChuld(ProceduralStream s) + { + ProceduralStream v = s.getTypedSource(); + return v == null ? s.getSource() : v; + } + + private static ProfiledTail getTail(ProceduralStream t) + { + if(t instanceof ProfiledStream) + { + ProfiledStream s = ((ProfiledStream)t); + + return new ProfiledTail(s.getId(), s.getMetrics(), s.getClass().getSimpleName().replaceAll("\\QStream\\E", "")); + } + + return null; + } + + private static KList getTails(ProceduralStream t) { + KList tails = new KList<>(); + + for (ProceduralStream v : getAllChildren(t)) { + ProfiledTail p = getTail(v); + + if (p != null) { + tails.add(p); + } + } + + if (tails.isEmpty()) + { + return null; + } + + ProfiledTail cursor = tails.popLast(); + KList tailx = new KList<>(); + tailx.add(cursor); + + while(tails.isNotEmpty()) + { + tailx.add(cursor); + ProfiledTail parent = tails.popLast(); + parent.setChild(cursor); + cursor = parent; + tailx.add(cursor); + } + + return tailx; + } + + @Data + private static class ProfiledTail + { + private final int id; + private final RollingSequence metrics; + private ProfiledTail child; + private final String name; + + public ProfiledTail(int id, RollingSequence metrics, String name) { + this.id = id; + this.metrics = metrics; + this.name = name; + } + + public String toString() + { + return id + "-" + name + ": " + Form.duration(metrics.getAverage(), 2); + } + } +} diff --git a/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/utility/SemaphoreStream.java b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/utility/SemaphoreStream.java new file mode 100644 index 000000000..a93cb3cfc --- /dev/null +++ b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/utility/SemaphoreStream.java @@ -0,0 +1,47 @@ +package com.volmit.iris.gen.v2.scaffold.stream.utility; + +import com.volmit.iris.gen.v2.scaffold.stream.BasicStream; +import com.volmit.iris.gen.v2.scaffold.stream.ProceduralStream; + +import java.util.concurrent.Semaphore; + +public class SemaphoreStream extends BasicStream +{ + private final Semaphore semaphore; + + public SemaphoreStream(ProceduralStream stream, int permits) + { + super(stream); + this.semaphore = new Semaphore(permits); + } + + @Override + public double toDouble(T t) + { + return getTypedSource().toDouble(t); + } + + @Override + public T fromDouble(double d) + { + return getTypedSource().fromDouble(d); + } + + @Override + public T get(double x, double z) + { + synchronized (getTypedSource()) + { + return getTypedSource().get(x, z); + } + } + + @Override + public T get(double x, double y, double z) + { + synchronized (getTypedSource()) + { + return getTypedSource().get(x, y, z); + } + } +} diff --git a/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/utility/SynchronizedStream.java b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/utility/SynchronizedStream.java new file mode 100644 index 000000000..e7331b965 --- /dev/null +++ b/src/main/java/com/volmit/iris/gen/v2/scaffold/stream/utility/SynchronizedStream.java @@ -0,0 +1,44 @@ +package com.volmit.iris.gen.v2.scaffold.stream.utility; + +import com.volmit.iris.gen.v2.scaffold.stream.BasicStream; +import com.volmit.iris.gen.v2.scaffold.stream.ProceduralStream; +import com.volmit.iris.util.PrecisionStopwatch; +import com.volmit.iris.util.RollingSequence; + +public class SynchronizedStream extends BasicStream +{ + public SynchronizedStream(ProceduralStream stream) + { + super(stream); + } + + @Override + public double toDouble(T t) + { + return getTypedSource().toDouble(t); + } + + @Override + public T fromDouble(double d) + { + return getTypedSource().fromDouble(d); + } + + @Override + public T get(double x, double z) + { + synchronized (getTypedSource()) + { + return getTypedSource().get(x, z); + } + } + + @Override + public T get(double x, double y, double z) + { + synchronized (getTypedSource()) + { + return getTypedSource().get(x, y, z); + } + } +} diff --git a/src/main/java/com/volmit/iris/noise/CNG.java b/src/main/java/com/volmit/iris/noise/CNG.java index b4dc13d3a..c19d8e201 100644 --- a/src/main/java/com/volmit/iris/noise/CNG.java +++ b/src/main/java/com/volmit/iris/noise/CNG.java @@ -3,9 +3,9 @@ package com.volmit.iris.noise; import java.util.List; import com.volmit.iris.Iris; -import com.volmit.iris.gen.v2.scaffold.layer.ProceduralStream; -import com.volmit.iris.gen.v2.scaffold.stream.CNGStream; -import com.volmit.iris.gen.v2.scaffold.stream.FittedStream; +import com.volmit.iris.gen.v2.scaffold.stream.ProceduralStream; +import com.volmit.iris.gen.v2.scaffold.stream.sources.CNGStream; +import com.volmit.iris.gen.v2.scaffold.stream.arithmetic.FittedStream; import com.volmit.iris.util.IRare; import com.volmit.iris.util.IrisInterpolation; import com.volmit.iris.util.KList; @@ -345,8 +345,8 @@ public class CNG double scale = noscale ? 1 : this.bakedScale * this.scale; double f = noscale ? 0 : (fracture != null ? (fracture.noise(dim) - 0.5) * fscale : 0D); double x = dim.length > 0 ? dim[0] + f : 0D; - double y = dim.length > 1 ? dim[1] + f : 0D; - double z = dim.length > 2 ? dim[2] + f : 0D; + double y = dim.length > 1 ? dim[1] + -f : 0D; + double z = dim.length > 2 ? dim[2] + -f : 0D; double n = generator.noise(x * scale, y * scale, z * scale) * opacity; n = power != 1D ? (n < 0 ? -Math.pow(Math.abs(n), power) : Math.pow(n, power)) : n; double m = 1; diff --git a/src/main/java/com/volmit/iris/object/IrisBiome.java b/src/main/java/com/volmit/iris/object/IrisBiome.java index 253e31bd1..899002d06 100644 --- a/src/main/java/com/volmit/iris/object/IrisBiome.java +++ b/src/main/java/com/volmit/iris/object/IrisBiome.java @@ -208,7 +208,7 @@ public class IrisBiome extends IrisRegistrant implements IRare public double getGenLinkMax(String loadKey) { - return genCacheMax.aquire(() -> + Integer v = genCacheMax.aquire(() -> { KMap l = new KMap<>(); @@ -218,12 +218,14 @@ public class IrisBiome extends IrisRegistrant implements IRare } return l; - }).compute(loadKey, (k, v) -> v != null ? v : 0); + }).get(loadKey); + + return v == null ? 0 : v; } public double getGenLinkMin(String loadKey) { - return genCacheMin.aquire(() -> + Integer v = genCacheMin.aquire(() -> { KMap l = new KMap<>(); @@ -233,7 +235,9 @@ public class IrisBiome extends IrisRegistrant implements IRare } return l; - }).compute(loadKey, (k, v) -> v != null ? v : 0); + }).get(loadKey); + + return v == null ? 0 : v; } public IrisBiomeGeneratorLink getGenLink(String loadKey) diff --git a/src/main/java/com/volmit/iris/object/NoiseStyle.java b/src/main/java/com/volmit/iris/object/NoiseStyle.java index 37076eda3..d7edfc904 100644 --- a/src/main/java/com/volmit/iris/object/NoiseStyle.java +++ b/src/main/java/com/volmit/iris/object/NoiseStyle.java @@ -1,6 +1,6 @@ package com.volmit.iris.object; -import com.volmit.iris.gen.v2.scaffold.layer.ProceduralStream; +import com.volmit.iris.gen.v2.scaffold.stream.ProceduralStream; import com.volmit.iris.noise.CNG; import com.volmit.iris.noise.CNGFactory; import com.volmit.iris.noise.NoiseType;