This commit is contained in:
Daniel Mills 2020-10-24 03:44:45 -04:00
parent ed40dc34cf
commit 27694036a5
13 changed files with 168 additions and 67 deletions

View File

@ -31,6 +31,7 @@ import com.volmit.iris.gen.scaffold.Provisioned;
import com.volmit.iris.gen.scaffold.TerrainChunk;
import com.volmit.iris.gen.scaffold.TerrainProvider;
import com.volmit.iris.gen.scaffold.TerrainTarget;
import com.volmit.iris.gen.v2.DataProvider;
import com.volmit.iris.manager.IrisDataManager;
import com.volmit.iris.noise.CNG;
import com.volmit.iris.object.IrisBiome;
@ -54,7 +55,7 @@ import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public abstract class ContextualTerrainProvider implements TerrainProvider, Listener
public abstract class ContextualTerrainProvider implements TerrainProvider, Listener, DataProvider
{
private Provisioned provisioner;
private KList<BlockPosition> noLoot;

View File

@ -0,0 +1,8 @@
package com.volmit.iris.gen.v2;
import com.volmit.iris.manager.IrisDataManager;
public interface DataProvider
{
public IrisDataManager getData();
}

View File

@ -1,25 +1,31 @@
package com.volmit.iris.gen.v2;
import com.volmit.iris.Iris;
import com.volmit.iris.gen.v2.scaffold.layer.ProceduralStream;
import com.volmit.iris.manager.IrisDataManager;
import com.volmit.iris.object.InferredType;
import com.volmit.iris.object.IrisBiome;
import com.volmit.iris.object.IrisBiomeGeneratorLink;
import com.volmit.iris.object.IrisDimension;
import com.volmit.iris.object.IrisRegion;
import com.volmit.iris.object.NoiseStyle;
import com.volmit.iris.util.M;
import com.volmit.iris.util.RNG;
import lombok.Data;
@Data
public class IrisComplex
public class IrisComplex implements DataProvider
{
private IrisDataManager data;
private ProceduralStream<IrisRegion> regionStream;
private ProceduralStream<InferredType> bridgeStream;
private ProceduralStream<IrisBiome> landBiomeStream;
private ProceduralStream<IrisBiome> seaBiomeStream;
private ProceduralStream<IrisBiome> shoreBiomeStream;
private ProceduralStream<IrisBiome> baseBiomeStream;
private ProceduralStream<Double> heightStream;
private ProceduralStream<Double> heightMinStream;
public IrisComplex()
{
@ -53,6 +59,7 @@ public class IrisComplex
public void flash(long seed, IrisDimension dimension, IrisDataManager data)
{
this.data = data;
RNG rng = new RNG(seed);
//@builder
regionStream = NoiseStyle.CELLULAR.stream(rng.nextRNG())
@ -81,6 +88,25 @@ public class IrisComplex
.convert((v) -> v >= dimension.getLandChance() ? InferredType.SEA : InferredType.LAND);
baseBiomeStream = bridgeStream.convertAware2D((t, x, z) -> t.equals(InferredType.SEA)
? seaBiomeStream.get(x, z) : landBiomeStream.get(x, z));
heightStream = baseBiomeStream.convertAware2D((b, x, z) -> {
double h = 0;
for(IrisBiomeGeneratorLink i : b.getGenerators())
{
// TODO Use gen interp ..... or
// try trilerp again....
try
{
h += i.getHeight(this, x, z, seed);
}
catch(Throwable e)
{
e.printStackTrace();
}
}
return h+63;
}).forceDouble().interpolate().starcast9(12).into().bihermite(4, 0.01, 0);
//@done
}
}

View File

@ -1,34 +0,0 @@
package com.volmit.iris.gen.v2;
import org.bukkit.block.Biome;
import org.bukkit.block.data.BlockData;
import com.volmit.iris.gen.v2.scaffold.Hunk;
import com.volmit.iris.manager.IrisDataManager;
import com.volmit.iris.object.IrisDimension;
import com.volmit.iris.util.RNG;
public class IrisGenerator
{
private long seed;
private IrisDataManager data;
private IrisDimension dimension;
private IrisComplex complex;
public IrisGenerator(long seed, IrisDimension dimension, IrisDataManager data)
{
this.seed = seed;
flash();
}
public void flash()
{
complex.flash(seed, dimension, data);
}
public void generate(int x, int z, Hunk<BlockData> blocks, Hunk<Biome> biomes)
{
RNG rng = new RNG((((long) x) << 32) | (z & 0xffffffffL));
}
}

View File

@ -0,0 +1,51 @@
package com.volmit.iris.gen.v2;
import org.bukkit.Material;
import org.bukkit.block.Biome;
import org.bukkit.block.data.BlockData;
import com.volmit.iris.gen.v2.scaffold.Hunk;
import com.volmit.iris.gen.v2.scaffold.layer.ProceduralStream;
import com.volmit.iris.manager.IrisDataManager;
import com.volmit.iris.object.IrisDimension;
import com.volmit.iris.object.NoiseStyle;
import com.volmit.iris.util.RNG;
public class IrisTerrainGenerator
{
private long seed;
private IrisDataManager data;
private IrisDimension dimension;
private IrisComplex complex;
public IrisTerrainGenerator(long seed, IrisDimension dimension, IrisDataManager data)
{
this.seed = seed;
complex = new IrisComplex();
this.data = data;
this.dimension = dimension;
flash();
}
public void flash()
{
complex.flash(seed, dimension, data);
}
public ProceduralStream<Double> height = NoiseStyle.CELLULAR
.stream(69)
.fit(1, 69)
.interpolate().starcast9(4).into().bilinear(4)
;
public ProceduralStream<BlockData> rock = NoiseStyle.STATIC
.stream(88)
.select(Material.STONE, Material.ANDESITE)
.convertCached((mat) -> mat.createBlockData());
public void generate(int x, int z, Hunk<BlockData> blocks, Hunk<Biome> biomes)
{
RNG rng = new RNG((((long) x) << 32) | (z & 0xffffffffL));
complex.getHeightStream().fill2D(blocks, x * 16, z * 16, Material.STONE.createBlockData());
}
}

View File

@ -12,6 +12,7 @@ import org.bukkit.block.data.BlockData;
import org.bukkit.entity.Player;
import org.bukkit.generator.ChunkGenerator;
import com.volmit.iris.Iris;
import com.volmit.iris.gen.v2.scaffold.Hunk;
import com.volmit.iris.gen.v2.scaffold.layer.ProceduralStream;
import com.volmit.iris.object.NoiseStyle;
@ -22,27 +23,13 @@ public class TestGen
{
p.teleport(new WorldCreator("t/" + UUID.randomUUID().toString()).generator(new ChunkGenerator()
{
//@builder
ProceduralStream<BlockData> rock = NoiseStyle.STATIC.stream(1337)
.select(new Material[] {
Material.STONE,
Material.ANDESITE
}).convertCached((m) -> m.createBlockData());
ProceduralStream<Double> terrain = NoiseStyle.CELLULAR.stream(1337)
.fit(1, 32)
.zoom(1.75)
.interpolate().bilinear(4)
.into().starcast(4, 9);
//@done
IrisTerrainGenerator tg = new IrisTerrainGenerator(1337, Iris.globaldata.getDimensionLoader().load("overworld"), Iris.globaldata);
@Override
public ChunkData generateChunkData(World world, Random random, int x, int z, BiomeGrid biome)
{
ChunkData c = createChunkData(world);
Hunk<BlockData> data = Hunk.view(c);
terrain.fill2D(data, x * 16, z * 16, rock);
tg.generate(x, z, Hunk.view(c), null);
return c;
}
}).createWorld().getSpawnLocation());

View File

@ -11,6 +11,7 @@ import com.volmit.iris.gen.v2.scaffold.stream.CachedStream2D;
import com.volmit.iris.gen.v2.scaffold.stream.ClampedStream;
import com.volmit.iris.gen.v2.scaffold.stream.ConversionStream;
import com.volmit.iris.gen.v2.scaffold.stream.FittedStream;
import com.volmit.iris.gen.v2.scaffold.stream.ForceDoubleStream;
import com.volmit.iris.gen.v2.scaffold.stream.Interpolated;
import com.volmit.iris.gen.v2.scaffold.stream.OffsetStream;
import com.volmit.iris.gen.v2.scaffold.stream.RoundingStream;
@ -26,6 +27,11 @@ public interface ProceduralStream<T> extends ProceduralLayer, Interpolated<T>
return new RoundingStream(this);
}
default ProceduralStream<T> forceDouble()
{
return new ForceDoubleStream<T>(this);
}
default ProceduralStream<T> cache2D(int maxSize)
{
return new CachedStream2D<T>(this, maxSize);
@ -115,7 +121,7 @@ public interface ProceduralStream<T> extends ProceduralLayer, Interpolated<T>
}
}
default <V> void fillUp2D(Hunk<V> h, double x, double z, V v)
default <V> void fill2D(Hunk<V> h, double x, double z, V v)
{
for(int i = 0; i < h.getWidth(); i++)
{
@ -131,7 +137,7 @@ public interface ProceduralStream<T> extends ProceduralLayer, Interpolated<T>
}
}
default <V> void fillUp3D(Hunk<V> h, double x, int y, double z, V v)
default <V> void fill3D(Hunk<V> h, double x, int y, double z, V v)
{
for(int i = 0; i < h.getWidth(); i++)
{

View File

@ -19,6 +19,11 @@ public class AwareConversionStream2D<T, V> extends BasicLayer implements Procedu
@Override
public double toDouble(V t)
{
if(t instanceof Double)
{
return (double) t;
}
return 0;
}

View File

@ -19,6 +19,11 @@ public class AwareConversionStream3D<T, V> extends BasicLayer implements Procedu
@Override
public double toDouble(V t)
{
if(t instanceof Double)
{
return (double) t;
}
return 0;
}

View File

@ -20,6 +20,11 @@ public class ConversionStream<T, V> extends BasicLayer implements ProceduralStre
@Override
public double toDouble(V t)
{
if(t instanceof Double)
{
return (double) t;
}
return 0;
}

View File

@ -0,0 +1,41 @@
package com.volmit.iris.gen.v2.scaffold.stream;
import com.volmit.iris.gen.v2.scaffold.layer.BasicLayer;
import com.volmit.iris.gen.v2.scaffold.layer.ProceduralStream;
public class ForceDoubleStream<T> extends BasicLayer implements ProceduralStream<T>
{
private final ProceduralStream<T> stream;
public ForceDoubleStream(ProceduralStream<T> 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);
}
}

View File

@ -1,8 +1,8 @@
package com.volmit.iris.object;
import com.volmit.iris.Iris;
import com.volmit.iris.gen.ContextualTerrainProvider;
import com.volmit.iris.gen.atomics.AtomicCache;
import com.volmit.iris.gen.v2.DataProvider;
import com.volmit.iris.util.DependsOn;
import com.volmit.iris.util.Desc;
import com.volmit.iris.util.DontObfuscate;
@ -48,11 +48,11 @@ public class IrisBiomeGeneratorLink
private final transient AtomicCache<IrisGenerator> gen = new AtomicCache<>();
public IrisGenerator getCachedGenerator(ContextualTerrainProvider g)
public IrisGenerator getCachedGenerator(DataProvider g)
{
return gen.aquire(() ->
{
IrisGenerator gen = g != null ? g.loadGenerator(getGenerator()) : Iris.globaldata.getGeneratorLoader().load(getGenerator());
IrisGenerator gen = g != null ? g.getData().getGeneratorLoader().load(getGenerator()) : Iris.globaldata.getGeneratorLoader().load(getGenerator());
if(gen == null)
{
@ -63,7 +63,7 @@ public class IrisBiomeGeneratorLink
});
}
public double getHeight(ContextualTerrainProvider xg, double x, double z, long seed)
public double getHeight(DataProvider xg, double x, double z, long seed)
{
double g = getCachedGenerator(xg).getHeight(x, z, seed);
g = g < 0 ? 0 : g;

View File

@ -1,8 +1,8 @@
package com.volmit.iris.object;
import com.volmit.iris.Iris;
import com.volmit.iris.gen.ContextualTerrainProvider;
import com.volmit.iris.gen.atomics.AtomicCache;
import com.volmit.iris.gen.v2.DataProvider;
import com.volmit.iris.noise.CNG;
import com.volmit.iris.util.ArrayType;
import com.volmit.iris.util.Desc;
@ -382,7 +382,7 @@ public class IrisRegion extends IrisRegistrant implements IRare
return getShoreHeightGenerator().fitDouble(shoreHeightMin, shoreHeightMax, x / shoreHeightZoom, z / shoreHeightZoom);
}
public KList<IrisBiome> getAllBiomes(ContextualTerrainProvider g)
public KList<IrisBiome> getAllBiomes(DataProvider g)
{
KMap<String, IrisBiome> b = new KMap<>();
KSet<String> names = new KSet<>();
@ -422,7 +422,7 @@ public class IrisRegion extends IrisRegistrant implements IRare
return b.v();
}
public KList<IrisBiome> getBiomes(ContextualTerrainProvider g, InferredType type)
public KList<IrisBiome> getBiomes(DataProvider g, InferredType type)
{
if(type.equals(InferredType.LAND))
{
@ -457,7 +457,7 @@ public class IrisRegion extends IrisRegistrant implements IRare
return new KList<>();
}
public KList<IrisBiome> getRealCaveBiomes(ContextualTerrainProvider g)
public KList<IrisBiome> getRealCaveBiomes(DataProvider g)
{
return realCaveBiomes.aquire(() ->
{
@ -472,7 +472,7 @@ public class IrisRegion extends IrisRegistrant implements IRare
});
}
public KList<IrisBiome> getRealLakeBiomes(ContextualTerrainProvider g)
public KList<IrisBiome> getRealLakeBiomes(DataProvider g)
{
return realLakeBiomes.aquire(() ->
{
@ -487,7 +487,7 @@ public class IrisRegion extends IrisRegistrant implements IRare
});
}
public KList<IrisBiome> getRealRiverBiomes(ContextualTerrainProvider g)
public KList<IrisBiome> getRealRiverBiomes(DataProvider g)
{
return realRiverBiomes.aquire(() ->
{
@ -502,7 +502,7 @@ public class IrisRegion extends IrisRegistrant implements IRare
});
}
public KList<IrisBiome> getRealShoreBiomes(ContextualTerrainProvider g)
public KList<IrisBiome> getRealShoreBiomes(DataProvider g)
{
return realShoreBiomes.aquire(() ->
{
@ -517,7 +517,7 @@ public class IrisRegion extends IrisRegistrant implements IRare
});
}
public KList<IrisBiome> getRealSeaBiomes(ContextualTerrainProvider g)
public KList<IrisBiome> getRealSeaBiomes(DataProvider g)
{
return realSeaBiomes.aquire(() ->
{
@ -532,7 +532,7 @@ public class IrisRegion extends IrisRegistrant implements IRare
});
}
public KList<IrisBiome> getRealLandBiomes(ContextualTerrainProvider g)
public KList<IrisBiome> getRealLandBiomes(DataProvider g)
{
return realLandBiomes.aquire(() ->
{