This commit is contained in:
Daniel Mills 2020-08-03 22:30:23 -04:00
parent 4304cad029
commit 086bb764a5
6 changed files with 129 additions and 28 deletions

View File

@ -110,7 +110,15 @@ public abstract class PostBlockChunkGenerator extends ParallaxChunkGenerator imp
{
while(f.getQueue().size() > 0)
{
f.getQueue().pop().run();
try
{
f.getQueue().pop().run();
}
catch(Throwable e)
{
}
}
}
}

View File

@ -162,9 +162,11 @@ public class GenLayerCave extends GenLayer
Material e = data.getType(y + 3);
Material f = data.getType(y - 1);
if(can(a) && canAir(c) && canAir(f) && canWater(d) && canWater(e))
if(can(a) && canAir(c) && canAir(f) && canWater(d) && canAir(d) && canWater(e))
{
data.set(y, CAVE_AIR);
data.set(y + 1, CAVE_AIR);
data.set(y + 2, CAVE_AIR);
return true;
}
@ -173,7 +175,7 @@ public class GenLayerCave extends GenLayer
public boolean canAir(Material m)
{
return (m.isSolid() || m.equals(Material.AIR) || m.equals(Material.CAVE_AIR)) && !m.equals(Material.BEDROCK);
return (m.isSolid() || (BlockDataTools.isDecorant(m)) || m.equals(Material.AIR) || m.equals(Material.CAVE_AIR)) && !m.equals(Material.BEDROCK);
}
public boolean canWater(Material m)

View File

@ -1,10 +1,13 @@
package com.volmit.iris.object;
import com.volmit.iris.Iris;
import com.volmit.iris.gen.atomics.AtomicCache;
import com.volmit.iris.util.CellGenerator;
import com.volmit.iris.util.Desc;
import com.volmit.iris.util.DontObfuscate;
import com.volmit.iris.util.IrisInterpolation;
import com.volmit.iris.util.KList;
import com.volmit.iris.util.RNG;
import lombok.Data;
import lombok.EqualsAndHashCode;
@ -22,6 +25,22 @@ public class IrisGenerator extends IrisRegistrant
@Desc("The opacity, essentially a multiplier on the output.")
private double opacity = 1;
@DontObfuscate
@Desc("The size of the cell fractures")
private double cellFractureZoom = 1D;
@DontObfuscate
@Desc("Cell Fracture Coordinate Shuffling")
private double cellFractureShuffle = 12D;
@DontObfuscate
@Desc("The height of fracture cells. Set to 0 to disable")
private double cellFractureHeight = 0D;
@DontObfuscate
@Desc("How big are the cells (X,Z) relative to the veins that touch them. Between 0 and 1. 0.1 means thick veins, small cells.")
private double cellPercentSize = 0.75D;
@DontObfuscate
@Desc("The offset to shift this noise x")
private double offsetX = 0;
@ -58,6 +77,8 @@ public class IrisGenerator extends IrisRegistrant
@Desc("The noise gen for cliff height.")
private IrisNoiseGenerator cliffHeightGenerator = new IrisNoiseGenerator();
private transient AtomicCache<CellGenerator> cellGen = new AtomicCache<>();
public double getMax()
{
return opacity;
@ -68,6 +89,11 @@ public class IrisGenerator extends IrisRegistrant
return cliffHeightMax > 0;
}
public CellGenerator getCellGenerator(long seed)
{
return cellGen.aquire(() -> new CellGenerator(new RNG(seed + 239466)));
}
public double getHeight(double rx, double rz, long superSeed)
{
if(composite.isEmpty())
@ -93,7 +119,21 @@ public class IrisGenerator extends IrisRegistrant
Iris.warn("Nan value on gen: " + getLoadKey() + ": H = " + h + " TP = " + tp + " OPACITY = " + opacity + " ZOOM = " + zoom);
}
return hasCliffs() ? cliff(rx, rz, v, superSeed + 294596 + hc) : v;
v = hasCliffs() ? cliff(rx, rz, v, superSeed + 294596 + hc) : v;
v = hasCellCracks() ? cell(rx, rz, v, superSeed + 48622 + hc) : v;
return v;
}
public double cell(double rx, double rz, double v, double superSeed)
{
getCellGenerator(seed + 46222).setShuffle(getCellFractureShuffle());
return getCellGenerator(seed + 46222).getDistance(rx / getCellFractureZoom(), rz / getCellFractureZoom()) > getCellPercentSize() ? (v * getCellFractureHeight()) : v;
}
private boolean hasCellCracks()
{
return getCellFractureHeight() != 0;
}
public double getCliffHeight(double rx, double rz, double superSeed)

View File

@ -18,6 +18,10 @@ public class IrisNoiseGenerator
@Desc("The coordinate input zoom")
private double zoom = 1;
@DontObfuscate
@Desc("Reverse the output. So that noise = -noise + opacity")
private boolean negative = false;
@DontObfuscate
@Desc("The output multiplier")
private double opacity = 1;
@ -115,6 +119,7 @@ public class IrisNoiseGenerator
}
double n = getGenerator(superSeed).fitDoubleD(0, opacity, (x / zoom) + offsetX, (z / zoom) + offsetZ);
n = negative ? (-n + opacity) : n;
n = (exponent != 1 ? n < 0 ? -Math.pow(-n, exponent) : Math.pow(n, exponent) : n) + offsetY;
n = parametric ? IrisInterpolation.parametric(n, 1) : n;
n = bezier ? IrisInterpolation.bezier(n) : n;

View File

@ -13,14 +13,14 @@ public class BlockDataTools
private static final KList<String> nulls = new KList<>();
public static BlockData getBlockData(String bd)
{try
{
if(bdc.containsKey(bd))
try
{
return bdc.get(bd).clone();
}
if(bdc.containsKey(bd))
{
return bdc.get(bd).clone();
}
BlockData bdx = parseBlockData(bd);
if(bdx == null)
@ -96,6 +96,11 @@ public class BlockDataTools
public static boolean canPlaceOnto(Material mat, Material onto)
{
if(onto.equals(Material.AIR) || onto.equals(Material.CAVE_AIR))
{
return false;
}
if(onto.equals(Material.GRASS_BLOCK) && mat.equals(Material.DEAD_BUSH))
{
return false;
@ -127,4 +132,62 @@ public class BlockDataTools
return true;
}
public static boolean isDecorant(Material m)
{
//@builder
return m.equals(Material.GRASS)
|| m.equals(Material.TALL_GRASS)
|| m.equals(Material.CORNFLOWER)
|| m.equals(Material.SUNFLOWER)
|| m.equals(Material.CHORUS_FLOWER)
|| m.equals(Material.POPPY)
|| m.equals(Material.DANDELION)
|| m.equals(Material.OXEYE_DAISY)
|| m.equals(Material.ORANGE_TULIP)
|| m.equals(Material.PINK_TULIP)
|| m.equals(Material.RED_TULIP)
|| m.equals(Material.WHITE_TULIP)
|| m.equals(Material.LILAC)
|| m.equals(Material.DEAD_BUSH)
|| m.equals(Material.SWEET_BERRY_BUSH)
|| m.equals(Material.ROSE_BUSH)
|| m.equals(Material.WITHER_ROSE)
|| m.equals(Material.ALLIUM)
|| m.equals(Material.BLUE_ORCHID)
|| m.equals(Material.LILY_OF_THE_VALLEY)
|| m.equals(Material.CRIMSON_FUNGUS)
|| m.equals(Material.WARPED_FUNGUS)
|| m.equals(Material.RED_MUSHROOM)
|| m.equals(Material.BROWN_MUSHROOM)
|| m.equals(Material.CRIMSON_ROOTS)
|| m.equals(Material.AZURE_BLUET)
|| m.equals(Material.WEEPING_VINES)
|| m.equals(Material.WEEPING_VINES_PLANT)
|| m.equals(Material.WARPED_ROOTS)
|| m.equals(Material.NETHER_SPROUTS)
|| m.equals(Material.TWISTING_VINES)
|| m.equals(Material.TWISTING_VINES_PLANT)
|| m.equals(Material.SUGAR_CANE)
|| m.equals(Material.WHEAT)
|| m.equals(Material.POTATOES)
|| m.equals(Material.CARROTS)
|| m.equals(Material.BEETROOTS)
|| m.equals(Material.NETHER_WART)
|| m.equals(Material.SEA_PICKLE)
|| m.equals(Material.SEAGRASS)
|| m.equals(Material.ACACIA_BUTTON)
|| m.equals(Material.BIRCH_BUTTON)
|| m.equals(Material.CRIMSON_BUTTON)
|| m.equals(Material.DARK_OAK_BUTTON)
|| m.equals(Material.JUNGLE_BUTTON)
|| m.equals(Material.OAK_BUTTON)
|| m.equals(Material.POLISHED_BLACKSTONE_BUTTON)
|| m.equals(Material.SPRUCE_BUTTON)
|| m.equals(Material.STONE_BUTTON)
|| m.equals(Material.WARPED_BUTTON)
|| m.equals(Material.TORCH)
|| m.equals(Material.SOUL_TORCH);
//@done
}
}

View File

@ -17,7 +17,7 @@ public abstract class IrisPostBlockFilter implements IPostBlockAccess
public PostBlockChunkGenerator gen;
private int phase;
private String key;
private KList<Runnable> queue;
private KList<Runnable> queue = new KList<>();
public IrisPostBlockFilter(PostBlockChunkGenerator gen, int phase)
{
@ -67,24 +67,7 @@ public abstract class IrisPostBlockFilter implements IPostBlockAccess
public boolean hasGravity(int x, int y, int z)
{
BlockData d = getPostBlock(x, y, z);
return d.getMaterial().equals(Material.SAND)
|| d.getMaterial().equals(Material.RED_SAND)
|| d.getMaterial().equals(Material.BLACK_CONCRETE_POWDER)
|| d.getMaterial().equals(Material.BLUE_CONCRETE_POWDER)
|| d.getMaterial().equals(Material.BROWN_CONCRETE_POWDER)
|| d.getMaterial().equals(Material.CYAN_CONCRETE_POWDER)
|| d.getMaterial().equals(Material.GRAY_CONCRETE_POWDER)
|| d.getMaterial().equals(Material.GREEN_CONCRETE_POWDER)
|| d.getMaterial().equals(Material.LIGHT_BLUE_CONCRETE_POWDER)
|| d.getMaterial().equals(Material.LIGHT_GRAY_CONCRETE_POWDER)
|| d.getMaterial().equals(Material.LIME_CONCRETE_POWDER)
|| d.getMaterial().equals(Material.MAGENTA_CONCRETE_POWDER)
|| d.getMaterial().equals(Material.ORANGE_CONCRETE_POWDER)
|| d.getMaterial().equals(Material.PINK_CONCRETE_POWDER)
|| d.getMaterial().equals(Material.PURPLE_CONCRETE_POWDER)
|| d.getMaterial().equals(Material.RED_CONCRETE_POWDER)
|| d.getMaterial().equals(Material.WHITE_CONCRETE_POWDER)
|| d.getMaterial().equals(Material.YELLOW_CONCRETE_POWDER);
return d.getMaterial().equals(Material.SAND) || d.getMaterial().equals(Material.RED_SAND) || d.getMaterial().equals(Material.BLACK_CONCRETE_POWDER) || d.getMaterial().equals(Material.BLUE_CONCRETE_POWDER) || d.getMaterial().equals(Material.BROWN_CONCRETE_POWDER) || d.getMaterial().equals(Material.CYAN_CONCRETE_POWDER) || d.getMaterial().equals(Material.GRAY_CONCRETE_POWDER) || d.getMaterial().equals(Material.GREEN_CONCRETE_POWDER) || d.getMaterial().equals(Material.LIGHT_BLUE_CONCRETE_POWDER) || d.getMaterial().equals(Material.LIGHT_GRAY_CONCRETE_POWDER) || d.getMaterial().equals(Material.LIME_CONCRETE_POWDER) || d.getMaterial().equals(Material.MAGENTA_CONCRETE_POWDER) || d.getMaterial().equals(Material.ORANGE_CONCRETE_POWDER) || d.getMaterial().equals(Material.PINK_CONCRETE_POWDER) || d.getMaterial().equals(Material.PURPLE_CONCRETE_POWDER) || d.getMaterial().equals(Material.RED_CONCRETE_POWDER) || d.getMaterial().equals(Material.WHITE_CONCRETE_POWDER) || d.getMaterial().equals(Material.YELLOW_CONCRETE_POWDER);
}
public boolean isSolid(int x, int y, int z)