mirror of
https://github.com/VolmitSoftware/Iris.git
synced 2025-07-19 18:55:18 +00:00
Engine impl
This commit is contained in:
parent
f79a3d15d1
commit
4c0e918559
@ -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();
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
@ -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());
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user