mirror of
https://github.com/VolmitSoftware/Iris.git
synced 2025-07-19 02:36:59 +00:00
Ravines & Caves
This commit is contained in:
parent
bd5ca76ef4
commit
8b720e103f
@ -49,7 +49,6 @@ public class IrisComplex implements DataProvider
|
|||||||
private ProceduralStream<BlockData> rockStream;
|
private ProceduralStream<BlockData> rockStream;
|
||||||
private ProceduralStream<BlockData> fluidStream;
|
private ProceduralStream<BlockData> fluidStream;
|
||||||
private ProceduralStream<BlockData> glassStream;
|
private ProceduralStream<BlockData> glassStream;
|
||||||
private ProceduralStream<KList<CaveResult>> caveStream;
|
|
||||||
|
|
||||||
public ProceduralStream<IrisBiome> getBiomeStream(InferredType type)
|
public ProceduralStream<IrisBiome> getBiomeStream(InferredType type)
|
||||||
{
|
{
|
||||||
@ -170,7 +169,6 @@ public class IrisComplex implements DataProvider
|
|||||||
.convertAware2D((b, xx,zz) -> decorateFor(b, xx, zz, DecorationPart.SHORE_LINE));
|
.convertAware2D((b, xx,zz) -> decorateFor(b, xx, zz, DecorationPart.SHORE_LINE));
|
||||||
seaSurfaceDecoration = trueBiomeStream
|
seaSurfaceDecoration = trueBiomeStream
|
||||||
.convertAware2D((b, xx,zz) -> decorateFor(b, xx, zz, DecorationPart.SEA_SURFACE));
|
.convertAware2D((b, xx,zz) -> decorateFor(b, xx, zz, DecorationPart.SEA_SURFACE));
|
||||||
caveStream = ProceduralStream.of((x, z) -> engine.getFramework().getCaveModifier().genCaves(x, z, x.intValue() & 15, z.intValue() & 15, null), Interpolated.CAVE_RESULTS);
|
|
||||||
//@done
|
//@done
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -37,26 +37,14 @@ public class IrisEngine implements Engine
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void generate(int x, int z, Hunk<BlockData> blocks, Hunk<Biome> biomes) {
|
public void generate(int x, int z, Hunk<BlockData> blocks, Hunk<Biome> biomes) {
|
||||||
MultiBurst.burst.burst(
|
getFramework().getEngineParallax().generateParallaxArea(x, z);
|
||||||
() -> getFramework().getEngineParallax().generateParallaxArea(x, z),
|
getFramework().getBiomeActuator().actuate(x, z, biomes);
|
||||||
() -> Hunk.computeDual2D(getParallelism(), blocks, biomes, (xx,yy,zz,ha,hb) -> {
|
getFramework().getTerrainActuator().actuate(x, z, blocks);
|
||||||
getFramework().getTerrainActuator().actuate(x+xx, z+zz, ha);
|
getFramework().getCaveModifier().modify(x, z, blocks);
|
||||||
getFramework().getBiomeActuator().actuate(x+xx, z+zz, hb);
|
|
||||||
})
|
|
||||||
);
|
|
||||||
getFramework().getRavineModifier().modify(x, z, blocks);
|
getFramework().getRavineModifier().modify(x, z, blocks);
|
||||||
getFramework().getDepositModifier().modify(x, z, blocks);
|
getFramework().getDepositModifier().modify(x, z, blocks);
|
||||||
blocks.compute2D(getParallelism(), (xx,yy,zz,ha) -> {
|
getFramework().getDecorantActuator().actuate(x, z, blocks);
|
||||||
getFramework().getDecorantActuator().actuate(x+xx, z+zz, ha);
|
getFramework().getEngineParallax().insertParallax(x, z, blocks);
|
||||||
getFramework().getEngineParallax().insertParallax(x, z, ha);
|
getFramework().recycle();
|
||||||
});
|
|
||||||
|
|
||||||
if(M.r(0.1))
|
|
||||||
{
|
|
||||||
MultiBurst.burst.lazy(() -> {
|
|
||||||
getParallax().cleanup();
|
|
||||||
getData().getObjectLoader().clean();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,14 +1,9 @@
|
|||||||
package com.volmit.iris.v2.generator;
|
package com.volmit.iris.v2.generator;
|
||||||
|
|
||||||
import com.volmit.iris.Iris;
|
|
||||||
import com.volmit.iris.manager.IrisDataManager;
|
|
||||||
import com.volmit.iris.object.IrisBiome;
|
|
||||||
import com.volmit.iris.object.IrisObjectPlacement;
|
|
||||||
import com.volmit.iris.util.B;
|
|
||||||
import com.volmit.iris.util.IObjectPlacer;
|
|
||||||
import com.volmit.iris.util.RNG;
|
|
||||||
import com.volmit.iris.v2.generator.actuator.*;
|
import com.volmit.iris.v2.generator.actuator.*;
|
||||||
import com.volmit.iris.v2.generator.modifier.IrisCaveModifier;
|
import com.volmit.iris.v2.generator.modifier.IrisCaveModifier;
|
||||||
|
import com.volmit.iris.v2.generator.modifier.IrisDepositModifier;
|
||||||
|
import com.volmit.iris.v2.generator.modifier.IrisRavineModifier;
|
||||||
import com.volmit.iris.v2.scaffold.engine.*;
|
import com.volmit.iris.v2.scaffold.engine.*;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import org.bukkit.block.Biome;
|
import org.bukkit.block.Biome;
|
||||||
@ -19,8 +14,6 @@ public class IrisEngineFramework implements EngineFramework {
|
|||||||
@Getter
|
@Getter
|
||||||
private final Engine engine;
|
private final Engine engine;
|
||||||
|
|
||||||
@Getter
|
|
||||||
private final IrisCaveModifier caveModifier;
|
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
private final IrisComplex complex;
|
private final IrisComplex complex;
|
||||||
@ -34,19 +27,21 @@ public class IrisEngineFramework implements EngineFramework {
|
|||||||
@Getter
|
@Getter
|
||||||
private final EngineActuator<BlockData> decorantActuator;
|
private final EngineActuator<BlockData> decorantActuator;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
private final EngineActuator<Biome> biomeActuator;
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
private final EngineModifier<BlockData> depositModifier;
|
private final EngineModifier<BlockData> depositModifier;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
private final EngineModifier<BlockData> caveModifier;
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
private final EngineModifier<BlockData> ravineModifier;
|
private final EngineModifier<BlockData> ravineModifier;
|
||||||
|
|
||||||
@Getter
|
|
||||||
private final EngineActuator<Biome> biomeActuator;
|
|
||||||
|
|
||||||
public IrisEngineFramework(Engine engine)
|
public IrisEngineFramework(Engine engine)
|
||||||
{
|
{
|
||||||
this.engine = engine;
|
this.engine = engine;
|
||||||
this.caveModifier = new IrisCaveModifier(engine);
|
|
||||||
this.complex = new IrisComplex(getEngine());
|
this.complex = new IrisComplex(getEngine());
|
||||||
this.engineParallax = new IrisEngineParallax(getEngine());
|
this.engineParallax = new IrisEngineParallax(getEngine());
|
||||||
this.terrainActuator = new IrisTerrainActuator(getEngine());
|
this.terrainActuator = new IrisTerrainActuator(getEngine());
|
||||||
@ -54,5 +49,6 @@ public class IrisEngineFramework implements EngineFramework {
|
|||||||
this.biomeActuator = new IrisBiomeActuator(getEngine());
|
this.biomeActuator = new IrisBiomeActuator(getEngine());
|
||||||
this.depositModifier = new IrisDepositModifier(getEngine());
|
this.depositModifier = new IrisDepositModifier(getEngine());
|
||||||
this.ravineModifier = new IrisRavineModifier(getEngine());
|
this.ravineModifier = new IrisRavineModifier(getEngine());
|
||||||
|
this.caveModifier = new IrisCaveModifier(engine);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
package com.volmit.iris.v2.generator.modifier;
|
package com.volmit.iris.v2.generator.modifier;
|
||||||
|
|
||||||
|
import com.volmit.iris.Iris;
|
||||||
import com.volmit.iris.noise.FastNoiseDouble;
|
import com.volmit.iris.noise.FastNoiseDouble;
|
||||||
|
import com.volmit.iris.object.IrisBiome;
|
||||||
import com.volmit.iris.object.IrisCaveLayer;
|
import com.volmit.iris.object.IrisCaveLayer;
|
||||||
import com.volmit.iris.util.B;
|
import com.volmit.iris.util.B;
|
||||||
import com.volmit.iris.util.CaveResult;
|
import com.volmit.iris.util.CaveResult;
|
||||||
@ -36,7 +38,40 @@ public class IrisCaveModifier extends EngineAssignedModifier<BlockData>
|
|||||||
{
|
{
|
||||||
for(int j = 0; j < a.getDepth(); j++)
|
for(int j = 0; j < a.getDepth(); j++)
|
||||||
{
|
{
|
||||||
genCaves(x + i, z + j, i, j, a);
|
KList<CaveResult> caves = genCaves(x + i, z + j, i, j, a);
|
||||||
|
int he = (int) Math.round(getComplex().getHeightStream().get(x+i, z+j));
|
||||||
|
if(caves != null && caves.isNotEmpty())
|
||||||
|
{
|
||||||
|
IrisBiome cave = getComplex().getCaveBiomeStream().get(x + i, z + j);
|
||||||
|
|
||||||
|
if(cave == null)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
for(CaveResult cl : caves)
|
||||||
|
{
|
||||||
|
if(cl.getFloor() < 0 || cl.getFloor() > getEngine().getHeight() || cl.getCeiling() > getEngine().getHeight() || cl.getCeiling() < 0)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
KList<BlockData> floor = cave.generateLayers(x + i, z + j, rng, cl.getFloor(), cl.getFloor(), getData());
|
||||||
|
KList<BlockData> ceiling = cave.generateLayers(x + i + 656, z + j - 656, rng,
|
||||||
|
he - cl.getCeiling(),
|
||||||
|
he - cl.getCeiling(), getData());
|
||||||
|
|
||||||
|
for(int g = 0; g < floor.size(); g++)
|
||||||
|
{
|
||||||
|
a.set(i, cl.getFloor() - g, j, floor.get(g));
|
||||||
|
}
|
||||||
|
|
||||||
|
for(int g = ceiling.size() - 1; g > 0; g--)
|
||||||
|
{
|
||||||
|
a.set(i, cl.getCeiling() + g, j, ceiling.get(g));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
package com.volmit.iris.v2.generator.actuator;
|
package com.volmit.iris.v2.generator.modifier;
|
||||||
|
|
||||||
import com.volmit.iris.gen.TopographicTerrainProvider;
|
import com.volmit.iris.gen.TopographicTerrainProvider;
|
||||||
import com.volmit.iris.gen.scaffold.TerrainChunk;
|
import com.volmit.iris.gen.scaffold.TerrainChunk;
|
@ -1,4 +1,4 @@
|
|||||||
package com.volmit.iris.v2.generator.actuator;
|
package com.volmit.iris.v2.generator.modifier;
|
||||||
|
|
||||||
import com.volmit.iris.gen.atomics.AtomicSliverMap;
|
import com.volmit.iris.gen.atomics.AtomicSliverMap;
|
||||||
import com.volmit.iris.gen.scaffold.TerrainChunk;
|
import com.volmit.iris.gen.scaffold.TerrainChunk;
|
@ -1,8 +1,8 @@
|
|||||||
package com.volmit.iris.v2.scaffold.engine;
|
package com.volmit.iris.v2.scaffold.engine;
|
||||||
|
|
||||||
import com.volmit.iris.v2.generator.IrisEngine;
|
import com.volmit.iris.util.M;
|
||||||
import com.volmit.iris.v2.generator.actuator.IrisRavineModifier;
|
|
||||||
import com.volmit.iris.v2.generator.modifier.IrisCaveModifier;
|
import com.volmit.iris.v2.generator.modifier.IrisCaveModifier;
|
||||||
|
import com.volmit.iris.v2.scaffold.parallel.MultiBurst;
|
||||||
import org.bukkit.block.Biome;
|
import org.bukkit.block.Biome;
|
||||||
import org.bukkit.block.data.BlockData;
|
import org.bukkit.block.data.BlockData;
|
||||||
|
|
||||||
@ -22,13 +22,24 @@ public interface EngineFramework extends DataProvider
|
|||||||
return getComplex().getData();
|
return getComplex().getData();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
default void recycle()
|
||||||
|
{
|
||||||
|
if(M.r(0.1))
|
||||||
|
{
|
||||||
|
MultiBurst.burst.lazy(() -> {
|
||||||
|
getEngine().getParallax().cleanup();
|
||||||
|
getData().getObjectLoader().clean();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public EngineActuator<BlockData> getTerrainActuator();
|
public EngineActuator<BlockData> getTerrainActuator();
|
||||||
|
|
||||||
public EngineActuator<BlockData> getDecorantActuator();
|
public EngineActuator<BlockData> getDecorantActuator();
|
||||||
|
|
||||||
public EngineActuator<Biome> getBiomeActuator();
|
public EngineActuator<Biome> getBiomeActuator();
|
||||||
|
|
||||||
public IrisCaveModifier getCaveModifier();
|
public EngineModifier<BlockData> getCaveModifier();
|
||||||
|
|
||||||
public EngineModifier<BlockData> getRavineModifier();
|
public EngineModifier<BlockData> getRavineModifier();
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user