This commit is contained in:
Daniel Mills 2020-08-17 20:25:01 -04:00
parent 6153b25bc7
commit 522aec1d3a
4 changed files with 80 additions and 39 deletions

View File

@ -1,8 +1,8 @@
package com.volmit.iris.command; package com.volmit.iris.command;
import com.volmit.iris.Iris; import com.volmit.iris.Iris;
import com.volmit.iris.NoiseView;
import com.volmit.iris.gen.IrisChunkGenerator; import com.volmit.iris.gen.IrisChunkGenerator;
import com.volmit.iris.gui.NoiseView;
import com.volmit.iris.util.MortarCommand; import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender; import com.volmit.iris.util.MortarSender;

View File

@ -19,7 +19,8 @@ import lombok.EqualsAndHashCode;
@Data @Data
@EqualsAndHashCode(callSuper = false) @EqualsAndHashCode(callSuper = false)
public class GenLayerBiome extends GenLayer { public class GenLayerBiome extends GenLayer
{
private CNG regionGenerator; private CNG regionGenerator;
private CNG bridgeGenerator; private CNG bridgeGenerator;
private BiomeDataProvider seaProvider; private BiomeDataProvider seaProvider;
@ -30,7 +31,8 @@ public class GenLayerBiome extends GenLayer {
private BiomeDataProvider skylandProvider; private BiomeDataProvider skylandProvider;
private DimensionChunkGenerator iris; private DimensionChunkGenerator iris;
public GenLayerBiome(DimensionChunkGenerator iris, RNG rng) { public GenLayerBiome(DimensionChunkGenerator iris, RNG rng)
{
super(iris, rng); super(iris, rng);
this.iris = iris; this.iris = iris;
seaProvider = new BiomeDataProvider(this, InferredType.SEA, rng); seaProvider = new BiomeDataProvider(this, InferredType.SEA, rng);
@ -39,14 +41,14 @@ public class GenLayerBiome extends GenLayer {
caveProvider = new BiomeDataProvider(this, InferredType.CAVE, rng); caveProvider = new BiomeDataProvider(this, InferredType.CAVE, rng);
islandProvider = new BiomeDataProvider(this, InferredType.ISLAND, rng); islandProvider = new BiomeDataProvider(this, InferredType.ISLAND, rng);
skylandProvider = new BiomeDataProvider(this, InferredType.SKYLAND, rng); skylandProvider = new BiomeDataProvider(this, InferredType.SKYLAND, rng);
regionGenerator = iris.getDimension().getRegionStyle().create(rng.nextParallelRNG(1188519)).bake() regionGenerator = iris.getDimension().getRegionStyle().create(rng.nextParallelRNG(1188519)).bake().scale(1D / iris.getDimension().getRegionZoom());
.scale(1D / iris.getDimension().getRegionZoom()); bridgeGenerator = iris.getDimension().getContinentalStyle().create(rng.nextParallelRNG(1541462)).bake().scale(1D / iris.getDimension().getContinentZoom());
bridgeGenerator = iris.getDimension().getContinentalStyle().create(rng.nextParallelRNG(1541462)).bake()
.scale(1D / iris.getDimension().getContinentZoom());
} }
public IrisRegion getRegion(double bx, double bz) { public IrisRegion getRegion(double bx, double bz)
if (iris.getDimension().getRegions().isEmpty()) { {
if(iris.getDimension().getRegions().isEmpty())
{
Iris.error("NO REGIONS!"); Iris.error("NO REGIONS!");
return null; return null;
} }
@ -57,60 +59,84 @@ public class GenLayerBiome extends GenLayer {
return regionGenerator.fitRarity(iris.getDimension().getAllRegions(iris), x, z); return regionGenerator.fitRarity(iris.getDimension().getAllRegions(iris), x, z);
} }
public BiomeResult generateData(double bx, double bz, int rawX, int rawZ) { public BiomeResult generateData(double bx, double bz, int rawX, int rawZ)
{
return generateRegionData(bx, bz, rawX, rawZ, getRegion(bx, bz)); return generateRegionData(bx, bz, rawX, rawZ, getRegion(bx, bz));
} }
public BiomeResult generateData(InferredType type, double bx, double bz, int rawX, int rawZ, public BiomeResult generateData(InferredType type, double bx, double bz, int rawX, int rawZ, IrisRegion regionData)
IrisRegion regionData) { {
return getProvider(type).generateData(iris, bx, bz, rawX, rawZ, regionData); return getProvider(type).generateData(iris, bx, bz, rawX, rawZ, regionData);
} }
public BiomeDataProvider getProvider(InferredType type) { public BiomeDataProvider getProvider(InferredType type)
if (type.equals(InferredType.SEA)) { {
if(type.equals(InferredType.SEA))
{
return seaProvider; return seaProvider;
} }
else if (type.equals(InferredType.LAND)) { else if(type.equals(InferredType.LAND))
{
return landProvider; return landProvider;
} }
else if (type.equals(InferredType.SHORE)) { else if(type.equals(InferredType.SHORE))
{
return shoreProvider; return shoreProvider;
} }
else if (type.equals(InferredType.CAVE)) { else if(type.equals(InferredType.CAVE))
{
return caveProvider; return caveProvider;
} }
else if (type.equals(InferredType.ISLAND)) { else if(type.equals(InferredType.ISLAND))
{
return islandProvider; return islandProvider;
} }
else if (type.equals(InferredType.SKYLAND)) { else if(type.equals(InferredType.SKYLAND))
{
return skylandProvider; return skylandProvider;
} }
else { else
{
Iris.error("Cannot find a BiomeDataProvider for type " + type.name()); Iris.error("Cannot find a BiomeDataProvider for type " + type.name());
} }
return null; return null;
} }
public BiomeResult generateRegionData(double bx, double bz, int rawX, int rawZ, IrisRegion regionData) { public BiomeResult generateRegionData(double bx, double bz, int rawX, int rawZ, IrisRegion regionData)
{
return generateData(getType(bx, bz, regionData), bx, bz, rawX, rawZ, regionData); return generateData(getType(bx, bz, regionData), bx, bz, rawX, rawZ, regionData);
} }
public InferredType getType(double bx, double bz, IrisRegion regionData) { public InferredType getType(double bx, double bz, IrisRegion regionData)
{
double x = bx; double x = bx;
double z = bz; double z = bz;
return bridgeGenerator.fit(0, 1, x, z) == 0 ? InferredType.LAND : InferredType.SEA; double c = iris.getDimension().getLandChance();
if(c >= 1)
{
return InferredType.LAND;
}
if(c <= 0)
{
return InferredType.SEA;
}
return bridgeGenerator.fitDouble(0, 1, x, z) < c ? InferredType.LAND : InferredType.SEA;
} }
public BiomeResult generateBiomeData(double bx, double bz, IrisRegion regionData, CNG cell, KList<IrisBiome> biomes, public BiomeResult generateBiomeData(double bx, double bz, IrisRegion regionData, CNG cell, KList<IrisBiome> biomes, InferredType inferredType)
InferredType inferredType) { {
if (biomes.isEmpty()) { if(biomes.isEmpty())
{
return new BiomeResult(null, 0); return new BiomeResult(null, 0);
} }
@ -122,16 +148,20 @@ public class GenLayerBiome extends GenLayer {
return implode(bx, bz, regionData, cell, new BiomeResult(biome, 1)); return implode(bx, bz, regionData, cell, new BiomeResult(biome, 1));
} }
public BiomeResult generateImpureData(int rawX, int rawZ, InferredType type, IrisRegion regionData, public BiomeResult generateImpureData(int rawX, int rawZ, InferredType type, IrisRegion regionData, BiomeResult pureResult)
BiomeResult pureResult) { {
for (IrisRegionRidge i : regionData.getRidgeBiomes()) { for(IrisRegionRidge i : regionData.getRidgeBiomes())
if (i.getType().equals(type) && i.isRidge(rng, rawX, rawZ)) { {
if(i.getType().equals(type) && i.isRidge(rng, rawX, rawZ))
{
return new BiomeResult(iris.loadBiome(i.getBiome()).infer(i.getAs(), type), 0.5); return new BiomeResult(iris.loadBiome(i.getBiome()).infer(i.getAs(), type), 0.5);
} }
} }
for (IrisRegionSpot i : regionData.getSpotBiomes()) { for(IrisRegionSpot i : regionData.getSpotBiomes())
if (i.getType().equals(type) && i.isSpot(rng, rawX, rawZ)) { {
if(i.getType().equals(type) && i.isSpot(rng, rawX, rawZ))
{
return new BiomeResult(iris.loadBiome(i.getBiome()).infer(i.getAs(), type), 0.5); return new BiomeResult(iris.loadBiome(i.getBiome()).infer(i.getAs(), type), 0.5);
} }
} }
@ -139,20 +169,23 @@ public class GenLayerBiome extends GenLayer {
return pureResult; return pureResult;
} }
public BiomeResult implode(double bx, double bz, IrisRegion regionData, CNG parentCell, BiomeResult parent) { public BiomeResult implode(double bx, double bz, IrisRegion regionData, CNG parentCell, BiomeResult parent)
{
return implode(bx, bz, regionData, parentCell, parent, 1); return implode(bx, bz, regionData, parentCell, parent, 1);
} }
public BiomeResult implode(double bx, double bz, IrisRegion regionData, CNG parentCell, BiomeResult parent, public BiomeResult implode(double bx, double bz, IrisRegion regionData, CNG parentCell, BiomeResult parent, int hits)
int hits) { {
if (hits > IrisSettings.get().maxBiomeChildDepth) { if(hits > IrisSettings.get().maxBiomeChildDepth)
{
return parent; return parent;
} }
double x = bx / iris.getDimension().getBiomeZoom(); double x = bx / iris.getDimension().getBiomeZoom();
double z = bz / iris.getDimension().getBiomeZoom(); double z = bz / iris.getDimension().getBiomeZoom();
if (!parent.getBiome().getRealChildren(iris).isEmpty()) { if(!parent.getBiome().getRealChildren(iris).isEmpty())
{
CNG childCell = parent.getBiome().getChildrenGenerator(rng, 123, parent.getBiome().getChildShrinkFactor()); CNG childCell = parent.getBiome().getChildrenGenerator(rng, 123, parent.getBiome().getChildShrinkFactor());
KList<IrisBiome> chx = parent.getBiome().getRealChildren(iris).copy(); // TODO Cache KList<IrisBiome> chx = parent.getBiome().getRealChildren(iris).copy(); // TODO Cache
chx.add(parent.getBiome()); chx.add(parent.getBiome());
@ -166,7 +199,8 @@ public class GenLayerBiome extends GenLayer {
} }
@Override @Override
public double generate(double x, double z) { public double generate(double x, double z)
{
return 0; return 0;
} }
} }

View File

@ -1,4 +1,4 @@
package com.volmit.iris; package com.volmit.iris.gui;
import java.awt.Color; import java.awt.Color;
import java.awt.Dimension; import java.awt.Dimension;
@ -24,6 +24,7 @@ import javax.swing.JLayeredPane;
import javax.swing.JPanel; import javax.swing.JPanel;
import javax.swing.JViewport; import javax.swing.JViewport;
import com.volmit.iris.Iris;
import com.volmit.iris.gen.IrisChunkGenerator; import com.volmit.iris.gen.IrisChunkGenerator;
import com.volmit.iris.noise.CNG; import com.volmit.iris.noise.CNG;
import com.volmit.iris.object.NoiseStyle; import com.volmit.iris.object.NoiseStyle;

View File

@ -48,6 +48,12 @@ public class IrisDimension extends IrisRegistrant
@Desc("The version of this dimension. Changing this will stop users from accidentally upgrading (and breaking their worlds).") @Desc("The version of this dimension. Changing this will stop users from accidentally upgrading (and breaking their worlds).")
private int version = 1; private int version = 1;
@MinNumber(0)
@MaxNumber(1)
@DontObfuscate
@Desc("The land chance. Up to 1.0 for total land or 0.0 for total sea")
private double landChance = 0.625;
@DontObfuscate @DontObfuscate
@Desc("The placement style of regions") @Desc("The placement style of regions")
private IrisGeneratorStyle regionStyle = NoiseStyle.CELLULAR_IRIS_DOUBLE.style(); private IrisGeneratorStyle regionStyle = NoiseStyle.CELLULAR_IRIS_DOUBLE.style();