mirror of
https://github.com/VolmitSoftware/Iris.git
synced 2025-07-19 02:36:59 +00:00
Engine actuators
This commit is contained in:
parent
a319314d04
commit
f2b44d8f99
@ -0,0 +1,19 @@
|
|||||||
|
package com.volmit.iris.gen.v2.generator.actuator;
|
||||||
|
|
||||||
|
import com.volmit.iris.gen.v2.scaffold.engine.Engine;
|
||||||
|
import com.volmit.iris.gen.v2.scaffold.engine.EngineAssignedActuator;
|
||||||
|
import com.volmit.iris.gen.v2.scaffold.hunk.Hunk;
|
||||||
|
import org.bukkit.block.Biome;
|
||||||
|
import org.bukkit.block.data.BlockData;
|
||||||
|
|
||||||
|
public class IrisBiomeActuator extends EngineAssignedActuator<Biome>
|
||||||
|
{
|
||||||
|
public IrisBiomeActuator(Engine engine) {
|
||||||
|
super(engine);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void actuate(int x, int z, Hunk<Biome> output) {
|
||||||
|
getComplex().getMaxHeightStream().fill2DYLocked(output, x, z, getComplex().getTrueBiomeDerivativeStream(), getParallelism());
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,96 @@
|
|||||||
|
package com.volmit.iris.gen.v2.generator.actuator;
|
||||||
|
|
||||||
|
import com.volmit.iris.gen.v2.scaffold.engine.Engine;
|
||||||
|
import com.volmit.iris.gen.v2.scaffold.engine.EngineAssignedActuator;
|
||||||
|
import com.volmit.iris.gen.v2.scaffold.hunk.Hunk;
|
||||||
|
import com.volmit.iris.object.IrisBiome;
|
||||||
|
import com.volmit.iris.object.IrisDecorator;
|
||||||
|
import com.volmit.iris.util.RNG;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.block.data.BlockData;
|
||||||
|
|
||||||
|
import java.util.function.Predicate;
|
||||||
|
|
||||||
|
public class IrisDecorantActuator extends EngineAssignedActuator<BlockData>
|
||||||
|
{
|
||||||
|
private static final Predicate<BlockData> PREDICATE_SOLID = (b) -> b != null && !b.getMaterial().isAir() && !b.getMaterial().equals(Material.WATER) && !b.getMaterial().equals(Material.LAVA);
|
||||||
|
private final RNG rng;
|
||||||
|
|
||||||
|
public IrisDecorantActuator(Engine engine) {
|
||||||
|
super(engine);
|
||||||
|
this.rng = new RNG(engine.getTarget().getWorld().getSeed());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void actuate(int x, int z, Hunk<BlockData> output) {
|
||||||
|
output.iterateSurfaces2D(getParallelism(), PREDICATE_SOLID, (hunkRelativeX, hunkRelativeZ, hunkOffsetX, hunkOffsetZ, top, bottom, lastBottom, h) ->
|
||||||
|
{
|
||||||
|
int realX = x + hunkOffsetX + hunkRelativeX;
|
||||||
|
int realZ = z + hunkOffsetZ + hunkRelativeZ;
|
||||||
|
RNG g = rng.nextParallelRNG(realX).nextParallelRNG(realZ); //TODO: Technically incorrect! Use chunkX & chunkZ
|
||||||
|
IrisBiome b = getComplex().getTrueBiomeStream().get(realX, realZ);
|
||||||
|
boolean surface = lastBottom == -1;
|
||||||
|
int floor = top + 1;
|
||||||
|
int ceiling = lastBottom == -1 ? floor < getDimension().getFluidHeight() ? getDimension().getFluidHeight() : output.getHeight() : lastBottom - 1;
|
||||||
|
int height = ceiling - floor;
|
||||||
|
|
||||||
|
if(height < 2)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
IrisDecorator deco = getComplex().getTerrainSurfaceDecoration().get(realX, realZ);
|
||||||
|
|
||||||
|
if(deco != null)
|
||||||
|
{
|
||||||
|
if(deco.isStacking())
|
||||||
|
{
|
||||||
|
int stack = Math.min(g.i(deco.getStackMin(), deco.getStackMax()), height);
|
||||||
|
|
||||||
|
for(int i = 0; i < stack; i++)
|
||||||
|
{
|
||||||
|
h.set(hunkRelativeX, i + floor, hunkRelativeZ, deco.getBlockData100(b, rng, realX - i, realZ + i, getData()));
|
||||||
|
}
|
||||||
|
|
||||||
|
if(deco.getTopPalette().isNotEmpty())
|
||||||
|
{
|
||||||
|
h.set(hunkRelativeX, stack + floor - 1, hunkRelativeZ, deco.getBlockDataForTop(b, rng, realX - stack, realZ + stack, getData()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
else
|
||||||
|
{
|
||||||
|
h.set(hunkRelativeX, floor, hunkRelativeZ, deco.getBlockData100(b, rng, realX, realZ, getData()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!surface)
|
||||||
|
{
|
||||||
|
IrisDecorator cdeco = getComplex().getTerrainCeilingDecoration().get(realX, realZ);
|
||||||
|
|
||||||
|
if(cdeco != null)
|
||||||
|
{
|
||||||
|
if(cdeco.isStacking())
|
||||||
|
{
|
||||||
|
int stack = Math.min(g.i(cdeco.getStackMin(), cdeco.getStackMax()), height);
|
||||||
|
|
||||||
|
for(int i = 0; i < stack; i++)
|
||||||
|
{
|
||||||
|
h.set(hunkRelativeX, -i + ceiling, hunkRelativeZ, cdeco.getBlockData100(b, rng, realX - i, realZ + i, getData()));
|
||||||
|
}
|
||||||
|
|
||||||
|
if(cdeco.getTopPalette().isNotEmpty())
|
||||||
|
{
|
||||||
|
h.set(hunkRelativeX, -stack + ceiling - 1, hunkRelativeZ, cdeco.getBlockDataForTop(b, rng, realX - stack, realZ + stack, getData()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
else
|
||||||
|
{
|
||||||
|
h.set(hunkRelativeX, ceiling, hunkRelativeZ, cdeco.getBlockData100(b, rng, realX, realZ, getData()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,18 @@
|
|||||||
|
package com.volmit.iris.gen.v2.generator.actuator;
|
||||||
|
|
||||||
|
import com.volmit.iris.gen.v2.scaffold.engine.Engine;
|
||||||
|
import com.volmit.iris.gen.v2.scaffold.engine.EngineAssignedActuator;
|
||||||
|
import com.volmit.iris.gen.v2.scaffold.hunk.Hunk;
|
||||||
|
import org.bukkit.block.data.BlockData;
|
||||||
|
|
||||||
|
public class IrisTerrainActuator extends EngineAssignedActuator<BlockData>
|
||||||
|
{
|
||||||
|
public IrisTerrainActuator(Engine engine) {
|
||||||
|
super(engine);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void actuate(int x, int z, Hunk<BlockData> output) {
|
||||||
|
getComplex().getHeightFluidStream().fill2D(output, x, z, getComplex().getTerrainStream(), getParallelism());
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user