Engine impl

This commit is contained in:
Daniel Mills 2020-10-29 05:25:58 -04:00
parent f79a3d15d1
commit 4c0e918559
3 changed files with 87 additions and 28 deletions

View File

@ -1,5 +1,7 @@
package com.volmit.iris.gen.v2; package com.volmit.iris.gen.v2.generator;
import com.volmit.iris.gen.v2.DataProvider;
import com.volmit.iris.gen.v2.scaffold.engine.Engine;
import com.volmit.iris.util.B; import com.volmit.iris.util.B;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.block.Biome; import org.bukkit.block.Biome;
@ -57,11 +59,6 @@ public class IrisComplex implements DataProvider
private ProceduralStream<BlockData> fluidStream; private ProceduralStream<BlockData> fluidStream;
private ProceduralStream<BlockData> glassStream; private ProceduralStream<BlockData> glassStream;
public IrisComplex()
{
}
public ProceduralStream<IrisBiome> getBiomeStream(InferredType type) public ProceduralStream<IrisBiome> getBiomeStream(InferredType type)
{ {
switch(type) switch(type)
@ -87,47 +84,46 @@ public class IrisComplex implements DataProvider
return null; return null;
} }
public void flash(long seed, IrisDimension dimension, IrisDataManager data) public IrisComplex(Engine engine)
{ {
int cacheSize = 8192; int cacheSize = 8192;
BlockData glass = B.getBlockData("GLASS"); BlockData glass = B.getBlockData("GLASS");
this.rng = new RNG(seed); this.rng = new RNG(engine.getWorld().getSeed());
this.data = data; this.data = data;
fluidHeight = dimension.getFluidHeight(); fluidHeight = engine.getDimension().getFluidHeight();
generators = new KList<>(); generators = new KList<>();
RNG rng = new RNG(seed); RNG rng = new RNG(engine.getWorld().getSeed());
glassStream = ProceduralStream.of((x,y,z) -> glass, Interpolated.BLOCK_DATA); glassStream = ProceduralStream.of((x,y,z) -> glass, Interpolated.BLOCK_DATA);
//@builder //@builder
dimension.getRegions().forEach((i) -> data.getRegionLoader().load(i) engine.getDimension().getRegions().forEach((i) -> data.getRegionLoader().load(i)
.getAllBiomes(this).forEach((b) -> b .getAllBiomes(this).forEach((b) -> b
.getGenerators() .getGenerators()
.forEach((c) -> registerGenerator(c.getCachedGenerator(this))))); .forEach((c) -> registerGenerator(c.getCachedGenerator(this)))));
overlayStream = ProceduralStream.ofDouble((x, z) -> 0D); overlayStream = ProceduralStream.ofDouble((x, z) -> 0D);
dimension.getOverlayNoise().forEach((i) -> overlayStream.add((x, z) -> i.get(rng, x, z))); engine.getDimension().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)) rngStream = ProceduralStream.of((x, z) -> new RNG(((x.longValue()) << 32) | (z.longValue() & 0xffffffffL))
.nextParallelRNG(seed), Interpolated.RNG) .nextParallelRNG(engine.getWorld().getSeed()), Interpolated.RNG)
.cache2D(64); .cache2D(64);
chunkRngStream = rngStream.blockToChunkCoords(); chunkRngStream = rngStream.blockToChunkCoords();
rockStream = dimension.getRockPalette().getLayerGenerator(rng.nextRNG(), data).stream() rockStream = engine.getDimension().getRockPalette().getLayerGenerator(rng.nextRNG(), data).stream()
.select(dimension.getRockPalette().getBlockData(data)); .select(engine.getDimension().getRockPalette().getBlockData(data));
fluidStream = dimension.getFluidPalette().getLayerGenerator(rng.nextRNG(), data).stream() fluidStream = engine.getDimension().getFluidPalette().getLayerGenerator(rng.nextRNG(), data).stream()
.select(dimension.getFluidPalette().getBlockData(data)); .select(engine.getDimension().getFluidPalette().getBlockData(data));
regionStream = dimension.getRegionStyle().create(rng.nextRNG()).stream() regionStream = engine.getDimension().getRegionStyle().create(rng.nextRNG()).stream()
.zoom(dimension.getRegionZoom()) .zoom(engine.getDimension().getRegionZoom())
.selectRarity(dimension.getRegions()) .selectRarity(engine.getDimension().getRegions())
.convertCached((s) -> data.getRegionLoader().load(s)) .convertCached((s) -> data.getRegionLoader().load(s))
.cache2D(cacheSize); .cache2D(cacheSize);
caveBiomeStream = regionStream.convertCached((r) caveBiomeStream = regionStream.convertCached((r)
-> dimension.getCaveBiomeStyle().create(rng.nextRNG()).stream() -> engine.getDimension().getCaveBiomeStyle().create(rng.nextRNG()).stream()
.zoom(r.getCaveBiomeZoom()) .zoom(r.getCaveBiomeZoom())
.selectRarity(r.getCaveBiomes()) .selectRarity(r.getCaveBiomes())
.convertCached((s) -> data.getBiomeLoader().load(s) .convertCached((s) -> data.getBiomeLoader().load(s)
.setInferredType(InferredType.CAVE)) .setInferredType(InferredType.CAVE))
).convertAware2D(ProceduralStream::get) ).convertAware2D(ProceduralStream::get)
.cache2D(cacheSize); .cache2D(cacheSize);
landBiomeStream = regionStream.convertCached((r) landBiomeStream = regionStream.convertCached((r)
-> dimension.getLandBiomeStyle().create(rng.nextRNG()).stream() -> engine.getDimension().getLandBiomeStyle().create(rng.nextRNG()).stream()
.zoom(r.getLandBiomeZoom()) .zoom(r.getLandBiomeZoom())
.selectRarity(r.getLandBiomes()) .selectRarity(r.getLandBiomes())
.convertCached((s) -> data.getBiomeLoader().load(s) .convertCached((s) -> data.getBiomeLoader().load(s)
@ -135,7 +131,7 @@ public class IrisComplex implements DataProvider
).convertAware2D(ProceduralStream::get) ).convertAware2D(ProceduralStream::get)
.cache2D(cacheSize); .cache2D(cacheSize);
seaBiomeStream = regionStream.convertCached((r) seaBiomeStream = regionStream.convertCached((r)
-> dimension.getSeaBiomeStyle().create(rng.nextRNG()).stream() -> engine.getDimension().getSeaBiomeStyle().create(rng.nextRNG()).stream()
.zoom(r.getSeaBiomeZoom()) .zoom(r.getSeaBiomeZoom())
.selectRarity(r.getSeaBiomes()) .selectRarity(r.getSeaBiomes())
.convertCached((s) -> data.getBiomeLoader().load(s) .convertCached((s) -> data.getBiomeLoader().load(s)
@ -143,19 +139,19 @@ public class IrisComplex implements DataProvider
).convertAware2D(ProceduralStream::get) ).convertAware2D(ProceduralStream::get)
.cache2D(cacheSize); .cache2D(cacheSize);
shoreBiomeStream = regionStream.convertCached((r) shoreBiomeStream = regionStream.convertCached((r)
-> dimension.getShoreBiomeStyle().create(rng.nextRNG()).stream() -> engine.getDimension().getShoreBiomeStyle().create(rng.nextRNG()).stream()
.zoom(r.getShoreBiomeZoom()) .zoom(r.getShoreBiomeZoom())
.selectRarity(r.getShoreBiomes()) .selectRarity(r.getShoreBiomes())
.convertCached((s) -> data.getBiomeLoader().load(s) .convertCached((s) -> data.getBiomeLoader().load(s)
.setInferredType(InferredType.SHORE)) .setInferredType(InferredType.SHORE))
).convertAware2D(ProceduralStream::get) ).convertAware2D(ProceduralStream::get)
.cache2D(cacheSize); .cache2D(cacheSize);
bridgeStream = dimension.getContinentalStyle().create(rng.nextRNG()).stream() bridgeStream = engine.getDimension().getContinentalStyle().create(rng.nextRNG()).stream()
.convert((v) -> v >= dimension.getLandChance() ? InferredType.SEA : InferredType.LAND); .convert((v) -> v >= engine.getDimension().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)) ? seaBiomeStream.get(x, z) : landBiomeStream.get(x, z))
.convertAware2D(this::implode).cache2D(cacheSize); .convertAware2D(this::implode).cache2D(cacheSize);
heightStream = baseBiomeStream.convertAware2D((b, x, z) -> getHeight(b, x, z, seed)) heightStream = baseBiomeStream.convertAware2D((b, x, z) -> getHeight(b, x, z, engine.getWorld().getSeed()))
.roundDouble() .roundDouble()
.cache2D(cacheSize); .cache2D(cacheSize);
slopeStream = heightStream.slope(); slopeStream = heightStream.slope();

View File

@ -0,0 +1,26 @@
package com.volmit.iris.gen.v2.generator;
import com.volmit.iris.gen.v2.scaffold.engine.Engine;
import com.volmit.iris.gen.v2.scaffold.engine.EngineFramework;
import com.volmit.iris.gen.v2.scaffold.engine.EngineTarget;
import lombok.Getter;
import lombok.Setter;
public class IrisEngine implements Engine
{
@Getter
private final EngineTarget target;
@Getter
private final EngineFramework framework;
@Setter
@Getter
private volatile int parallelism;
public IrisEngine(EngineTarget target)
{
this.target = target;
this.framework = new IrisEngineFramework(this);
}
}

View File

@ -0,0 +1,37 @@
package com.volmit.iris.gen.v2.generator;
import com.volmit.iris.gen.v2.generator.actuator.IrisBiomeActuator;
import com.volmit.iris.gen.v2.generator.actuator.IrisDecorantActuator;
import com.volmit.iris.gen.v2.generator.actuator.IrisTerrainActuator;
import com.volmit.iris.gen.v2.scaffold.engine.Engine;
import com.volmit.iris.gen.v2.scaffold.engine.EngineActuator;
import com.volmit.iris.gen.v2.scaffold.engine.EngineFramework;
import lombok.Getter;
import org.bukkit.block.Biome;
import org.bukkit.block.data.BlockData;
public class IrisEngineFramework implements EngineFramework {
@Getter
private final Engine engine;
@Getter
private final IrisComplex complex;
@Getter
private final EngineActuator<BlockData> terrainActuator;
@Getter
private final EngineActuator<BlockData> decorantActuator;
@Getter
private final EngineActuator<Biome> biomeActuator;
public IrisEngineFramework(Engine engine)
{
this.engine = engine;
this.complex = new IrisComplex(getEngine());
terrainActuator = new IrisTerrainActuator(getEngine());
decorantActuator = new IrisDecorantActuator(getEngine());
biomeActuator = new IrisBiomeActuator(getEngine());
}
}