Surface decorators (including bisected blocks)

This commit is contained in:
Daniel Mills 2020-07-17 18:56:12 -04:00
parent 58dcb72adc
commit 27ce6ad5ba
4 changed files with 47 additions and 4 deletions

View File

@ -19,7 +19,6 @@ import ninja.bytecode.iris.util.IrisInterpolation;
import ninja.bytecode.iris.util.RNG;
import ninja.bytecode.shuriken.collections.KList;
import ninja.bytecode.shuriken.collections.KMap;
import ninja.bytecode.shuriken.logging.L;
import ninja.bytecode.shuriken.math.M;
@Data

View File

@ -2,11 +2,14 @@ package ninja.bytecode.iris.generator;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.block.data.Bisected;
import org.bukkit.block.data.BlockData;
import org.bukkit.block.data.Bisected.Half;
import lombok.Data;
import lombok.EqualsAndHashCode;
import ninja.bytecode.iris.object.IrisBiome;
import ninja.bytecode.iris.object.IrisBiomeDecorator;
import ninja.bytecode.iris.object.IrisRegion;
import ninja.bytecode.iris.object.atomics.AtomicSliver;
import ninja.bytecode.iris.util.BiomeMap;
@ -68,7 +71,38 @@ public abstract class TerrainChunkGenerator extends ParallelChunkGenerator
block = layers.hasIndex(depth) ? layers.get(depth) : STONE;
depth++;
}
sliver.set(k, block);
if(k == Math.max(height, fluidHeight) && block.getMaterial().isSolid() && k < 255)
{
int j = 0;
for(IrisBiomeDecorator i : biome.getDecorators())
{
BlockData d = i.getBlockData(getMasterRandom().nextParallelRNG(biome.hashCode() + j++), wx, wz);
if(d != null)
{
if(d instanceof Bisected && k < 254)
{
Bisected t = ((Bisected) d.clone());
t.setHalf(Half.TOP);
Bisected b = ((Bisected) d.clone());
b.setHalf(Half.BOTTOM);
sliver.set(k + 1, b);
sliver.set(k + 2, t);
}
else
{
sliver.set(k + 1, d);
}
break;
}
}
}
}
}

View File

@ -12,9 +12,11 @@ import ninja.bytecode.shuriken.collections.KMap;
@Data
public class IrisBiomeDecorator
{
private Dispersion variance = Dispersion.SCATTER;
private Dispersion dispersion = Dispersion.SCATTER;
private int iterations = 5;
private double zoom = 1;
private double chance = 0.1;
private KList<String> palette = new KList<String>().qadd("GRASS");
private transient KMap<Long, CNG> layerGenerators;
@ -40,10 +42,19 @@ public class IrisBiomeDecorator
public KList<String> add(String b)
{
palette.add(b);
return palette;
}
public BlockData getBlockData(RNG rng, double x, double z)
{
if(getGenerator(rng).fitDoubleD(0D, 1D, x * (dispersion.equals(Dispersion.SCATTER) ? 1000D : 1D), z * (dispersion.equals(Dispersion.SCATTER) ? 1000D : 1D)) <= chance)
{
return getBlockData().get(getGenerator(rng.nextParallelRNG(53)).fit(0, getBlockData().size() - 1, x * (dispersion.equals(Dispersion.SCATTER) ? 1000D : 1D), z * (dispersion.equals(Dispersion.SCATTER) ? 1000D : 1D)));
}
return null;
}
public KList<BlockData> getBlockData()
{
if(blockData == null)

View File

@ -6,7 +6,6 @@ import org.bukkit.util.BlockVector;
import ninja.bytecode.iris.Iris;
import ninja.bytecode.iris.object.IrisObject;
import ninja.bytecode.shuriken.logging.L;
public class ObjectResourceLoader extends ResourceLoader<IrisObject>
{