Update to latest Gaea, allow configuration of terrain octaves/frequency

This commit is contained in:
dfsek committed 2020-10-17 16:49:43 -07:00
1 parent 2c49160731
commit 2741a761a0
32 files changed
+136 -111

No files matched your search

Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+2 -2
View File
@@ -111,9 +111,9 @@
<dependency> <dependency>
<groupId>org.polydev</groupId> <groupId>org.polydev</groupId>
<artifactId>gaea</artifactId> <artifactId>gaea</artifactId>
<version>1.11.6</version> <version>1.12.0</version>
<scope>system</scope> <scope>system</scope>
<systemPath>${basedir}/lib/Gaea-1.11.6.jar</systemPath> <systemPath>${basedir}/lib/Gaea-1.12.0.jar</systemPath>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.apache.commons</groupId> <groupId>org.apache.commons</groupId>
+8 -4
View File
@@ -7,6 +7,7 @@ import com.dfsek.terra.config.lang.LangUtil;
import com.dfsek.terra.generation.TerraChunkGenerator; import com.dfsek.terra.generation.TerraChunkGenerator;
import org.bstats.bukkit.Metrics; import org.bstats.bukkit.Metrics;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.World;
import org.bukkit.command.PluginCommand; import org.bukkit.command.PluginCommand;
import org.bukkit.generator.ChunkGenerator; import org.bukkit.generator.ChunkGenerator;
import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.java.JavaPlugin;
@@ -18,12 +19,13 @@ import org.polydev.gaea.lang.Language;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.Map;
import java.util.Objects; import java.util.Objects;
import java.util.Set; import java.util.Set;
public class Terra extends GaeaPlugin { public class Terra extends GaeaPlugin {
private static Terra instance; private static Terra instance;
private static final Set<String> loadedWorlds = new HashSet<>(); private Map<String, TerraChunkGenerator> generatorMap = new HashMap<>();
public static Terra getInstance() { public static Terra getInstance() {
return instance; return instance;
@@ -54,9 +56,11 @@ public class Terra extends GaeaPlugin {
@Override @Override
public @Nullable ChunkGenerator getDefaultWorldGenerator(@NotNull String worldName, @Nullable String id) { public @Nullable ChunkGenerator getDefaultWorldGenerator(@NotNull String worldName, @Nullable String id) {
if(!loadedWorlds.contains(worldName)) TerraWorld.loadWorld(new WorldConfig(worldName, id, this)); return generatorMap.computeIfAbsent(worldName, name -> {
loadedWorlds.add(worldName); // Ensure world config is only loaded once for world. WorldConfig c = new WorldConfig(worldName, id, this);
return new TerraChunkGenerator(); TerraWorld.loadWorld(c);
return new TerraChunkGenerator(c.getConfig());
});
} }
@Override @Override
@@ -6,7 +6,7 @@ import org.bukkit.World;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import org.polydev.gaea.biome.BiomeGrid; import org.polydev.gaea.biome.BiomeGrid;
import org.polydev.gaea.biome.NormalizationUtil; import org.polydev.gaea.biome.NormalizationUtil;
import org.polydev.gaea.math.FastNoise; import org.polydev.gaea.math.FastNoiseLite;
import java.util.Objects; import java.util.Objects;
@@ -15,15 +15,16 @@ import java.util.Objects;
*/ */
public class BiomeZone { public class BiomeZone {
private final BiomeGrid[] grids; private final BiomeGrid[] grids;
private final FastNoise noise; private final FastNoiseLite noise;
@Nullable @Nullable
private final ImageLoader imageLoader; private final ImageLoader imageLoader;
private final boolean useImage; private final boolean useImage;
private final ImageLoader.Channel channel; private final ImageLoader.Channel channel;
public BiomeZone(World w, WorldConfig wc, BiomeGrid[] grids) { public BiomeZone(World w, WorldConfig wc, BiomeGrid[] grids) {
this.noise = new FastNoise((int) w.getSeed()+2); this.noise = new FastNoiseLite((int) w.getSeed()+2);
this.noise.setNoiseType(FastNoise.NoiseType.SimplexFractal); this.noise.setNoiseType(FastNoiseLite.NoiseType.OpenSimplex2);
this.noise.setFractalType(FastNoiseLite.FractalType.FBm);
this.noise.setFractalOctaves(4); this.noise.setFractalOctaves(4);
this.noise.setFrequency(wc.getConfig().zoneFreq); this.noise.setFrequency(wc.getConfig().zoneFreq);
this.grids = grids; this.grids = grids;
@@ -39,7 +40,7 @@ public class BiomeZone {
* @return BiomeGrid at coordinates. * @return BiomeGrid at coordinates.
*/ */
protected BiomeGrid getGrid(int x, int z) { protected BiomeGrid getGrid(int x, int z) {
return grids[NormalizationUtil.normalize(useImage ? Objects.requireNonNull(imageLoader).getNoiseVal(x, z, channel) : noise.getNoise(x, z), grids.length)]; return grids[NormalizationUtil.normalize(useImage ? Objects.requireNonNull(imageLoader).getNoiseVal(x, z, channel) : noise.getNoise(x, z), grids.length, 4)];
} }
/** /**
@@ -57,7 +58,7 @@ public class BiomeZone {
* @return Normalized noise at coordinates * @return Normalized noise at coordinates
*/ */
public int getNoise(int x, int z) { public int getNoise(int x, int z) {
return NormalizationUtil.normalize(useImage ? Objects.requireNonNull(imageLoader).getNoiseVal(x, z, channel) : noise.getNoise(x, z), grids.length); return NormalizationUtil.normalize(useImage ? Objects.requireNonNull(imageLoader).getNoiseVal(x, z, channel) : noise.getNoise(x, z), grids.length, 4);
} }
/** /**
@@ -1,14 +1,14 @@
package com.dfsek.terra.biome; package com.dfsek.terra.biome;
import com.dfsek.terra.procgen.math.Vector2; import com.dfsek.terra.procgen.math.Vector2;
import org.polydev.gaea.math.FastNoise; import org.polydev.gaea.math.FastNoiseLite;
/** /**
* Offset a coordinate pair by an amount. * Offset a coordinate pair by an amount.
*/ */
public class CoordinatePerturb { public class CoordinatePerturb {
private final FastNoise perturbX; private final FastNoiseLite perturbX;
private final FastNoise perturbZ; private final FastNoiseLite perturbZ;
private final int amplitude; private final int amplitude;
/** /**
@@ -18,11 +18,11 @@ public class CoordinatePerturb {
* @param seed Noise seed * @param seed Noise seed
*/ */
public CoordinatePerturb(float frequency, int amplitude, long seed) { public CoordinatePerturb(float frequency, int amplitude, long seed) {
perturbX = new FastNoise((int) seed); perturbX = new FastNoiseLite((int) seed);
perturbX.setNoiseType(FastNoise.NoiseType.Simplex); perturbX.setNoiseType(FastNoiseLite.NoiseType.OpenSimplex2);
perturbX.setFrequency(frequency); perturbX.setFrequency(frequency);
perturbZ = new FastNoise((int) seed+1); perturbZ = new FastNoiseLite((int) seed+1);
perturbZ.setNoiseType(FastNoise.NoiseType.Simplex); perturbZ.setNoiseType(FastNoiseLite.NoiseType.OpenSimplex2);
perturbZ.setFrequency(frequency); perturbZ.setFrequency(frequency);
this.amplitude = amplitude; this.amplitude = amplitude;
} }
@@ -1,16 +1,17 @@
package com.dfsek.terra.biome; package com.dfsek.terra.biome;
import org.polydev.gaea.math.FastNoise; import org.polydev.gaea.math.FastNoiseLite;
/** /**
* Class to hold noise function to determine erosion. * Class to hold noise function to determine erosion.
*/ */
public class ErosionNoise { public class ErosionNoise {
private final double thresh; private final double thresh;
private final FastNoise noise; private final FastNoiseLite noise;
public ErosionNoise(float freq1, double thresh, int octaves, long seed) { public ErosionNoise(float freq1, double thresh, int octaves, long seed) {
FastNoise main = new FastNoise((int) (seed+1)); FastNoiseLite main = new FastNoiseLite((int) (seed+1));
main.setNoiseType(FastNoise.NoiseType.SimplexFractal); main.setNoiseType(FastNoiseLite.NoiseType.OpenSimplex2);
main.setFractalType(FastNoiseLite.FractalType.FBm);
main.setFractalOctaves(octaves); main.setFractalOctaves(octaves);
main.setFrequency(freq1); main.setFrequency(freq1);
this.thresh = thresh; this.thresh = thresh;
@@ -29,7 +29,7 @@ public class UserDefinedGrid extends BiomeGrid {
if(fromImage) { if(fromImage) {
double xi = imageLoader.getNoiseVal(x, z, channelX); double xi = imageLoader.getNoiseVal(x, z, channelX);
double zi = imageLoader.getNoiseVal(x, z, channelZ); double zi = imageLoader.getNoiseVal(x, z, channelZ);
return super.getGrid()[NormalizationUtil.normalize(xi, getSizeX())][NormalizationUtil.normalize(zi, getSizeZ())]; return super.getGrid()[NormalizationUtil.normalize(xi, getSizeX(), 4)][NormalizationUtil.normalize(zi, getSizeZ(), 4)];
} }
return super.getBiome(x, z, phase); return super.getBiome(x, z, phase);
} }
@@ -7,7 +7,7 @@ import com.dfsek.terra.procgen.voxel.VoxelGeometry;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.World; import org.bukkit.World;
import org.bukkit.util.Vector; import org.bukkit.util.Vector;
import org.polydev.gaea.math.FastNoise; import org.polydev.gaea.math.FastNoiseLite;
import org.polydev.gaea.math.MathUtil; import org.polydev.gaea.math.MathUtil;
import org.polydev.gaea.world.carving.CarvingData; import org.polydev.gaea.world.carving.CarvingData;
@@ -26,9 +26,9 @@ public class Cavern {
Vector org = node.getNodeLocation((chunkX << 4)+8, (chunkZ << 4)+8).clone().setY(chunk.nextInt(128)); Vector org = node.getNodeLocation((chunkX << 4)+8, (chunkZ << 4)+8).clone().setY(chunk.nextInt(128));
VoxelGeometry carve = VoxelGeometry.getBlank(); VoxelGeometry carve = VoxelGeometry.getBlank();
FastNoise smpl = new FastNoise((int) seedC); FastNoiseLite smpl = new FastNoiseLite((int) seedC);
smpl.setFrequency(0.01f); smpl.setFrequency(0.01f);
smpl.setNoiseType(FastNoise.NoiseType.Simplex); smpl.setNoiseType(FastNoiseLite.NoiseType.OpenSimplex2);
Bukkit.getLogger().info("Cavern: " + org.toString()); Bukkit.getLogger().info("Cavern: " + org.toString());
carve.merge(new DeformedSphere(org.clone(), chunk.nextInt(4)+3, 0.75, smpl)); carve.merge(new DeformedSphere(org.clone(), chunk.nextInt(4)+3, 0.75, smpl));
@@ -2,7 +2,7 @@ package com.dfsek.terra.carving;
import org.bukkit.World; import org.bukkit.World;
import org.bukkit.util.Vector; import org.bukkit.util.Vector;
import org.polydev.gaea.math.FastNoise; import org.polydev.gaea.math.FastNoiseLite;
import org.polydev.gaea.world.carving.Carver; import org.polydev.gaea.world.carving.Carver;
import org.polydev.gaea.world.carving.CarvingData; import org.polydev.gaea.world.carving.CarvingData;
import org.polydev.gaea.world.carving.Worm; import org.polydev.gaea.world.carving.Worm;
@@ -10,29 +10,31 @@ import org.polydev.gaea.world.carving.Worm;
import java.util.Random; import java.util.Random;
public class SimplexCarver extends Carver { public class SimplexCarver extends Carver {
private final FastNoise noise; private final FastNoiseLite noise;
private final FastNoise height; private final FastNoiseLite height;
private final FastNoise column; private final FastNoiseLite column;
private final FastNoise hasCaves; private final FastNoiseLite hasCaves;
private final double root2inverse = 1D/Math.sqrt(2); private final double root2inverse = 1D/Math.sqrt(2);
public SimplexCarver(int minY, int maxY) { public SimplexCarver(int minY, int maxY) {
super(minY, maxY); super(minY, maxY);
noise = new FastNoise(2403); noise = new FastNoiseLite(2403);
noise.setNoiseType(FastNoise.NoiseType.SimplexFractal); noise.setNoiseType(FastNoiseLite.NoiseType.OpenSimplex2);
noise.setFractalType(FastNoiseLite.FractalType.FBm);
noise.setFractalOctaves(3); noise.setFractalOctaves(3);
noise.setFrequency(0.02f); noise.setFrequency(0.02f);
height = new FastNoise(2404); height = new FastNoiseLite(2404);
height.setNoiseType(FastNoise.NoiseType.Simplex); height.setNoiseType(FastNoiseLite.NoiseType.OpenSimplex2);
height.setFrequency(0.01f); height.setFrequency(0.01f);
column = new FastNoise(2404); column = new FastNoiseLite(2404);
column.setNoiseType(FastNoise.NoiseType.SimplexFractal); column.setNoiseType(FastNoiseLite.NoiseType.OpenSimplex2);
column.setFractalType(FastNoiseLite.FractalType.FBm);
column.setFractalOctaves(5); column.setFractalOctaves(5);
column.setFrequency(0.05f); column.setFrequency(0.05f);
hasCaves = new FastNoise(2405); hasCaves = new FastNoiseLite(2405);
hasCaves.setNoiseType(FastNoise.NoiseType.Simplex); hasCaves.setNoiseType(FastNoiseLite.NoiseType.OpenSimplex2);
hasCaves.setFrequency(0.005f); hasCaves.setFrequency(0.005f);
} }
@@ -9,7 +9,7 @@ import org.bukkit.entity.Player;
import org.bukkit.util.Vector; import org.bukkit.util.Vector;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.polydev.gaea.command.PlayerCommand; import org.polydev.gaea.command.PlayerCommand;
import org.polydev.gaea.math.FastNoise; import org.polydev.gaea.math.FastNoiseLite;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
@@ -43,8 +43,8 @@ public class DeformedSphereCommand extends PlayerCommand {
LangUtil.send("command.geometry.deform.invalid-frequency", sender, args[2]); LangUtil.send("command.geometry.deform.invalid-frequency", sender, args[2]);
return true; return true;
} }
FastNoise n = new FastNoise((int) sender.getWorld().getSeed()); FastNoiseLite n = new FastNoiseLite((int) sender.getWorld().getSeed());
n.setNoiseType(FastNoise.NoiseType.Simplex); n.setNoiseType(FastNoiseLite.NoiseType.OpenSimplex2);
n.setFrequency(freq); n.setFrequency(freq);
DeformedSphere sphere = new DeformedSphere(sender.getLocation().toVector(), radius, deform, n); DeformedSphere sphere = new DeformedSphere(sender.getLocation().toVector(), radius, deform, n);
for(Vector v : sphere.getGeometry()) { for(Vector v : sphere.getGeometry()) {
@@ -68,6 +68,9 @@ public class ConfigPack extends YamlConfiguration {
public final boolean biomeBlend; public final boolean biomeBlend;
public final float blendFreq; public final float blendFreq;
public final int octaves;
public final float frequency;
public ConfigPack(File file) throws IOException, InvalidConfigurationException { public ConfigPack(File file) throws IOException, InvalidConfigurationException {
long l = System.nanoTime(); long l = System.nanoTime();
load(new File(file, "pack.yml")); load(new File(file, "pack.yml"));
@@ -107,6 +110,9 @@ public class ConfigPack extends YamlConfiguration {
erosionThresh = getDouble("erode.threshold", 0.04); erosionThresh = getDouble("erode.threshold", 0.04);
erosionOctaves = getInt("erosion.octaves", 4); erosionOctaves = getInt("erosion.octaves", 4);
octaves = getInt("noise.octaves", 4);
frequency = (float) getDouble("noise.frequency", 1f/96);
erosionName = getString("erode.grid"); erosionName = getString("erode.grid");
// Load BiomeGrids from BiomeZone // Load BiomeGrids from BiomeZone
@@ -1,7 +1,9 @@
package com.dfsek.terra.config.base; package com.dfsek.terra.config.base;
import com.dfsek.terra.Debug;
import com.dfsek.terra.config.exception.ConfigException; import com.dfsek.terra.config.exception.ConfigException;
import com.dfsek.terra.config.lang.LangUtil; import com.dfsek.terra.config.lang.LangUtil;
import com.dfsek.terra.debug.gui.DebugGUI;
import com.dfsek.terra.image.ImageLoader; import com.dfsek.terra.image.ImageLoader;
import org.apache.commons.io.FileUtils; import org.apache.commons.io.FileUtils;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
@@ -47,6 +49,7 @@ public class WorldConfig {
long start = System.nanoTime(); long start = System.nanoTime();
LangUtil.log("world-config.load", Level.INFO, worldID); LangUtil.log("world-config.load", Level.INFO, worldID);
FileConfiguration config = new YamlConfiguration(); FileConfiguration config = new YamlConfiguration();
Debug.info("Loading config " + configID + " for world " + worldID);
try { // Load/create world config file try { // Load/create world config file
if(configID == null || configID.equals("")) throw new ConfigException("Config pack unspecified in bukkit.yml!", worldID); if(configID == null || configID.equals("")) throw new ConfigException("Config pack unspecified in bukkit.yml!", worldID);
File configFile = new File(main.getDataFolder() + File.separator + "worlds", worldID + ".yml"); File configFile = new File(main.getDataFolder() + File.separator + "worlds", worldID + ".yml");
@@ -12,7 +12,7 @@ import org.bukkit.block.Block;
import org.bukkit.block.data.BlockData; import org.bukkit.block.data.BlockData;
import org.bukkit.configuration.InvalidConfigurationException; import org.bukkit.configuration.InvalidConfigurationException;
import org.bukkit.util.Vector; import org.bukkit.util.Vector;
import org.polydev.gaea.math.FastNoise; import org.polydev.gaea.math.FastNoiseLite;
import org.polydev.gaea.population.ChunkCoordinate; import org.polydev.gaea.population.ChunkCoordinate;
import java.io.File; import java.io.File;
@@ -64,8 +64,8 @@ public class OreConfig extends TerraConfig {
return r.nextInt(max-min+1)+min; return r.nextInt(max-min+1)+min;
} }
public void doVein(Vector l, Chunk chunk, Random r) { public void doVein(Vector l, Chunk chunk, Random r) {
FastNoise ore = new FastNoise(r.nextInt()); FastNoiseLite ore = new FastNoiseLite(r.nextInt());
ore.setNoiseType(FastNoise.NoiseType.SimplexFractal); ore.setNoiseType(FastNoiseLite.NoiseType.OpenSimplex2);
ore.setFrequency((float) deformFrequency); ore.setFrequency((float) deformFrequency);
int rad = randomInRange(r); int rad = randomInRange(r);
Map<ChunkCoordinate, Chunk> chunks = new HashMap<>(); // Cache chunks to prevent re-loading chunks every time one is needed. Map<ChunkCoordinate, Chunk> chunks = new HashMap<>(); // Cache chunks to prevent re-loading chunks every time one is needed.
@@ -77,7 +77,7 @@ public class OreConfig extends TerraConfig {
Vector oreLoc = orig.clone().add(new Vector(x, y, z)); Vector oreLoc = orig.clone().add(new Vector(x, y, z));
Vector source = l.clone().add(new Vector(x, y, z)); Vector source = l.clone().add(new Vector(x, y, z));
if(oreLoc.getBlockY() > 255 || oreLoc.getBlockY() < 0) continue; if(oreLoc.getBlockY() > 255 || oreLoc.getBlockY() < 0) continue;
if(source.distance(l) < (rad + 0.5) * ((ore.getSimplexFractal(x, y, z)+1)*deform)) { if(source.distance(l) < (rad + 0.5) * ((ore.getNoise(x, y, z)+1)*deform)) {
ChunkCoordinate coord = new ChunkCoordinate(Math.floorDiv(oreLoc.getBlockX(), 16), Math.floorDiv(oreLoc.getBlockZ(), 16), chunk.getWorld().getUID()); ChunkCoordinate coord = new ChunkCoordinate(Math.floorDiv(oreLoc.getBlockX(), 16), Math.floorDiv(oreLoc.getBlockZ(), 16), chunk.getWorld().getUID());
Block b = chunks.computeIfAbsent(coord, k -> chunk.getWorld().getChunkAt(oreLoc.toLocation(chunk.getWorld()))) Block b = chunks.computeIfAbsent(coord, k -> chunk.getWorld().getChunkAt(oreLoc.toLocation(chunk.getWorld())))
.getBlock(Math.floorMod(source.getBlockX(), 16), source.getBlockY(), Math.floorMod(source.getBlockZ(), 16)); // Chunk caching conditional computation .getBlock(Math.floorMod(source.getBlockX(), 16), source.getBlockY(), Math.floorMod(source.getBlockZ(), 16)); // Chunk caching conditional computation
@@ -88,8 +88,8 @@ public class OreConfig extends TerraConfig {
} }
} }
public void doVeinSingle(Vector l, Chunk chunk, Random r) { public void doVeinSingle(Vector l, Chunk chunk, Random r) {
FastNoise ore = new FastNoise(r.nextInt()); FastNoiseLite ore = new FastNoiseLite(r.nextInt());
ore.setNoiseType(FastNoise.NoiseType.SimplexFractal); ore.setNoiseType(FastNoiseLite.NoiseType.OpenSimplex2);
ore.setFrequency((float) deformFrequency); ore.setFrequency((float) deformFrequency);
int rad = randomInRange(r); int rad = randomInRange(r);
for(int x = -rad; x <= rad; x++) { for(int x = -rad; x <= rad; x++) {
@@ -97,7 +97,7 @@ public class OreConfig extends TerraConfig {
for(int z = -rad; z <= rad; z++) { for(int z = -rad; z <= rad; z++) {
Vector oreLoc = l.clone().add(new Vector(x, y, z)); Vector oreLoc = l.clone().add(new Vector(x, y, z));
if(oreLoc.getBlockX() > 15 || oreLoc.getBlockZ() > 15 || oreLoc.getBlockY() > 255 || oreLoc.getBlockX() < 0 || oreLoc.getBlockZ() < 0 || oreLoc.getBlockY() < 0) continue; if(oreLoc.getBlockX() > 15 || oreLoc.getBlockZ() > 15 || oreLoc.getBlockY() > 255 || oreLoc.getBlockX() < 0 || oreLoc.getBlockZ() < 0 || oreLoc.getBlockY() < 0) continue;
if(oreLoc.distance(l) < (rad + 0.5) * ((ore.getSimplexFractal(x, y, z)+1)*deform)) { if(oreLoc.distance(l) < (rad + 0.5) * ((ore.getNoise(x, y, z)+1)*deform)) {
Block b = chunk.getBlock(oreLoc.getBlockX(), oreLoc.getBlockY(), oreLoc.getBlockZ()); Block b = chunk.getBlock(oreLoc.getBlockX(), oreLoc.getBlockY(), oreLoc.getBlockZ());
if(replaceable.contains(b.getType()) && b.getLocation().getY() >= 0) b.setBlockData(oreData, update); if(replaceable.contains(b.getType()) && b.getLocation().getY() >= 0) b.setBlockData(oreData, update);
} }
@@ -7,7 +7,7 @@ import com.dfsek.terra.config.exception.ConfigException;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.block.data.BlockData; import org.bukkit.block.data.BlockData;
import org.bukkit.configuration.InvalidConfigurationException; import org.bukkit.configuration.InvalidConfigurationException;
import org.polydev.gaea.math.FastNoise; import org.polydev.gaea.math.FastNoiseLite;
import org.polydev.gaea.math.ProbabilityCollection; import org.polydev.gaea.math.ProbabilityCollection;
import org.polydev.gaea.world.palette.Palette; import org.polydev.gaea.world.palette.Palette;
import org.polydev.gaea.world.palette.RandomPalette; import org.polydev.gaea.world.palette.RandomPalette;
@@ -30,8 +30,8 @@ public class PaletteConfig extends TerraConfig {
Palette<BlockData> pal; Palette<BlockData> pal;
if(getBoolean("simplex", false)) { if(getBoolean("simplex", false)) {
useNoise = true; useNoise = true;
FastNoise pNoise = new FastNoise(getInt("seed", 2403)); FastNoiseLite pNoise = new FastNoiseLite(getInt("seed", 2403));
pNoise.setNoiseType(FastNoise.NoiseType.SimplexFractal); pNoise.setNoiseType(FastNoiseLite.NoiseType.OpenSimplex2);
pNoise.setFractalOctaves(4); pNoise.setFractalOctaves(4);
pNoise.setFrequency((float) getDouble("frequency", 0.02)); pNoise.setFrequency((float) getDouble("frequency", 0.02));
pal = new SimplexPalette<>(pNoise); pal = new SimplexPalette<>(pNoise);
@@ -8,7 +8,7 @@ import com.dfsek.terra.config.exception.ConfigException;
import com.dfsek.terra.config.exception.NotFoundException; import com.dfsek.terra.config.exception.NotFoundException;
import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.InvalidConfigurationException; import org.bukkit.configuration.InvalidConfigurationException;
import org.polydev.gaea.math.FastNoise; import org.polydev.gaea.math.FastNoiseLite;
import org.polydev.gaea.math.ProbabilityCollection; import org.polydev.gaea.math.ProbabilityCollection;
import org.polydev.gaea.math.Range; import org.polydev.gaea.math.Range;
import org.polydev.gaea.world.Flora; import org.polydev.gaea.world.Flora;
@@ -23,7 +23,7 @@ public class BiomeFloraConfig extends TerraConfigSection {
private int floraAttempts; private int floraAttempts;
private int floraChance; private int floraChance;
private boolean floraSimplex; private boolean floraSimplex;
private FastNoise floraNoise; private FastNoiseLite floraNoise;
public BiomeFloraConfig(TerraConfig parent) throws InvalidConfigurationException { public BiomeFloraConfig(TerraConfig parent) throws InvalidConfigurationException {
super(parent); super(parent);
ConfigurationSection cfg = parent.getConfigurationSection("flora.items"); ConfigurationSection cfg = parent.getConfigurationSection("flora.items");
@@ -34,8 +34,8 @@ public class BiomeFloraConfig extends TerraConfigSection {
float floraFreq = (float) parent.getDouble("flora.simplex.frequency", 0.1); float floraFreq = (float) parent.getDouble("flora.simplex.frequency", 0.1);
int floraSeed = parent.getInt("flora.simplex.seed", 0); int floraSeed = parent.getInt("flora.simplex.seed", 0);
if(floraSimplex) { if(floraSimplex) {
floraNoise = new FastNoise(floraSeed); floraNoise = new FastNoiseLite(floraSeed);
floraNoise.setNoiseType(FastNoise.NoiseType.Simplex); floraNoise.setNoiseType(FastNoiseLite.NoiseType.OpenSimplex2);
floraNoise.setFrequency(floraFreq); floraNoise.setFrequency(floraFreq);
} }
@@ -74,7 +74,7 @@ public class BiomeFloraConfig extends TerraConfigSection {
return floraHeights; return floraHeights;
} }
public FastNoise getFloraNoise() { public FastNoiseLite getFloraNoise() {
return floraNoise; return floraNoise;
} }
@@ -9,7 +9,7 @@ import com.dfsek.terra.config.exception.NotFoundException;
import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.InvalidConfigurationException; import org.bukkit.configuration.InvalidConfigurationException;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.polydev.gaea.math.FastNoise; import org.polydev.gaea.math.FastNoiseLite;
import org.polydev.gaea.math.ProbabilityCollection; import org.polydev.gaea.math.ProbabilityCollection;
import org.polydev.gaea.math.Range; import org.polydev.gaea.math.Range;
import org.polydev.gaea.world.Flora; import org.polydev.gaea.world.Flora;
@@ -30,7 +30,7 @@ import org.polydev.gaea.generation.GaeaChunkGenerator;
import org.polydev.gaea.generation.GenerationPhase; import org.polydev.gaea.generation.GenerationPhase;
import org.polydev.gaea.generation.GenerationPopulator; import org.polydev.gaea.generation.GenerationPopulator;
import org.polydev.gaea.math.ChunkInterpolator; import org.polydev.gaea.math.ChunkInterpolator;
import org.polydev.gaea.math.FastNoise; import org.polydev.gaea.math.FastNoiseLite;
import org.polydev.gaea.population.PopulationManager; import org.polydev.gaea.population.PopulationManager;
import org.polydev.gaea.world.palette.Palette; import org.polydev.gaea.world.palette.Palette;
@@ -47,19 +47,23 @@ import java.util.logging.Level;
public class TerraChunkGenerator extends GaeaChunkGenerator { public class TerraChunkGenerator extends GaeaChunkGenerator {
private final PopulationManager popMan = new PopulationManager(Terra.getInstance()); private final PopulationManager popMan = new PopulationManager(Terra.getInstance());
private boolean needsLoad = true; private boolean needsLoad = true;
private int octaves;
private float frequency;
private static final Map<World, PopulationManager> popMap = new HashMap<>(); private static final Map<World, PopulationManager> popMap = new HashMap<>();
public TerraChunkGenerator() { public TerraChunkGenerator(ConfigPack c) {
super(ChunkInterpolator.InterpolationType.TRILINEAR); super(ChunkInterpolator.InterpolationType.TRILINEAR);
this.frequency = c.frequency;
this.octaves = c.octaves;
popMan.attach(new FloraPopulator()); popMan.attach(new FloraPopulator());
popMan.attach(new OrePopulator()); popMan.attach(new OrePopulator());
popMan.attach(new SnowPopulator()); popMan.attach(new SnowPopulator());
} }
@Override @Override
public ChunkData generateBase(@NotNull World world, @NotNull Random random, int chunkX, int chunkZ, FastNoise fastNoise) { public ChunkData generateBase(@NotNull World world, @NotNull Random random, int chunkX, int chunkZ, FastNoiseLite fastNoise) {
if(needsLoad) load(world); // Load population data for world. if(needsLoad) load(world); // Load population data for world.
StructureSpawnRequirement.putNoise(world, fastNoise); // Assign noise to world to be used for structures. StructureSpawnRequirement.putNoise(world, fastNoise); // Assign noise to world to be used for structures.
ChunkData chunk = createChunkData(world); ChunkData chunk = createChunkData(world);
@@ -161,11 +165,11 @@ public class TerraChunkGenerator extends GaeaChunkGenerator {
@Override @Override
public int getNoiseOctaves(World world) { public int getNoiseOctaves(World world) {
return 4; return octaves;
} }
@Override @Override
public float getNoiseFrequency(World world) { public float getNoiseFrequency(World world) {
return 1f/96; return frequency;
} }
@Override @Override
@@ -186,7 +190,7 @@ public class TerraChunkGenerator extends GaeaChunkGenerator {
@Override @Override
public boolean shouldGenerateStructures() { public boolean shouldGenerateStructures() {
return true; return false;
} }
@@ -6,7 +6,7 @@ import com.dfsek.terra.util.DataUtil;
import org.bukkit.World; import org.bukkit.World;
import org.bukkit.block.data.BlockData; import org.bukkit.block.data.BlockData;
import org.polydev.gaea.biome.Generator; import org.polydev.gaea.biome.Generator;
import org.polydev.gaea.math.FastNoise; import org.polydev.gaea.math.FastNoiseLite;
import org.polydev.gaea.world.palette.Palette; import org.polydev.gaea.world.palette.Palette;
import parsii.eval.Expression; import parsii.eval.Expression;
import parsii.eval.Parser; import parsii.eval.Parser;
@@ -49,15 +49,15 @@ public class UserDefinedGenerator extends Generator {
this.noiseExp = p.parse(equation, s); this.noiseExp = p.parse(equation, s);
} }
/** /**
* Gets the 2D noise at a pair of coordinates using the provided FastNoise instance. * Gets the 2D noise at a pair of coordinates using the provided FastNoiseLite instance.
* *
* @param gen - The FastNoise instance to use. * @param gen - The FastNoiseLite instance to use.
* @param x - The x coordinate. * @param x - The x coordinate.
* @param z - The z coordinate. * @param z - The z coordinate.
* @return double - Noise value at the specified coordinates. * @return double - Noise value at the specified coordinates.
*/ */
@Override @Override
public double getNoise(FastNoise gen, World w, int x, int z) { public double getNoise(FastNoiseLite gen, World w, int x, int z) {
synchronized(noiseLock) { synchronized(noiseLock) {
xVar.setValue(x); xVar.setValue(x);
yVar.setValue(0); yVar.setValue(0);
@@ -69,16 +69,16 @@ public class UserDefinedGenerator extends Generator {
} }
/** /**
* Gets the 3D noise at a pair of coordinates using the provided FastNoise instance. * Gets the 3D noise at a pair of coordinates using the provided FastNoiseLite instance.
* *
* @param gen - The FastNoise instance to use. * @param gen - The FastNoiseLite instance to use.
* @param x - The x coordinate. * @param x - The x coordinate.
* @param y - The y coordinate. * @param y - The y coordinate.
* @param z - The z coordinate. * @param z - The z coordinate.
* @return double - Noise value at the specified coordinates. * @return double - Noise value at the specified coordinates.
*/ */
@Override @Override
public double getNoise(FastNoise gen, World w, int x, int y, int z) { public double getNoise(FastNoiseLite gen, World w, int x, int y, int z) {
synchronized(noiseLock) { synchronized(noiseLock) {
xVar.setValue(x); xVar.setValue(x);
yVar.setValue(y); yVar.setValue(y);
@@ -54,9 +54,9 @@ public class ImageLoader {
float[] noise; float[] noise;
if(align.equals(Align.CENTER)) noise = tb.getGrid(x - original.getWidth()/2, y - original.getHeight()/2).getRawNoise(x - original.getWidth()/2, y - original.getHeight()/2); if(align.equals(Align.CENTER)) noise = tb.getGrid(x - original.getWidth()/2, y - original.getHeight()/2).getRawNoise(x - original.getWidth()/2, y - original.getHeight()/2);
else noise = tb.getGrid(x, y).getRawNoise(x, y); else noise = tb.getGrid(x, y).getRawNoise(x, y);
newImg.setRGB(x, y, new Color((int) (NormalizationUtil.normalize(noise[0], tb.getGrid(x, y).getSizeX()) * ((double) 255 / tb.getGrid(x, y).getSizeX())), newImg.setRGB(x, y, new Color((int) (NormalizationUtil.normalize(noise[0], tb.getGrid(x, y).getSizeX(), 4) * ((double) 255 / tb.getGrid(x, y).getSizeX())),
(int) (NormalizationUtil.normalize(noise[1], tb.getGrid(x, y).getSizeZ()) * ((double) 255 / tb.getGrid(x, y).getSizeZ())), (int) (NormalizationUtil.normalize(noise[1], tb.getGrid(x, y).getSizeZ(), 4) * ((double) 255 / tb.getGrid(x, y).getSizeZ())),
(int) (NormalizationUtil.normalize(z.getNoise(x, y), z.getSize()) * ((double) 255 / z.getSize()))) (int) (NormalizationUtil.normalize(z.getNoise(x, y), z.getSize(), 4) * ((double) 255 / z.getSize())))
.getRGB()); .getRGB());
} }
} }
@@ -27,9 +27,9 @@ public class WorldImageGenerator {
for(int y = centerZ - (draw.getHeight()/2); y < centerZ + (draw.getHeight()/2); y++) { for(int y = centerZ - (draw.getHeight()/2); y < centerZ + (draw.getHeight()/2); y++) {
int imX = 0; int imX = 0;
for(int x = centerX - (draw.getWidth()/2); x < centerX + (draw.getWidth()/2); x++) { for(int x = centerX - (draw.getWidth()/2); x < centerX + (draw.getWidth()/2); x++) {
int zone = NormalizationUtil.normalize(tw.getZone().getRawNoise(x, y), 256); int zone = NormalizationUtil.normalize(tw.getZone().getRawNoise(x, y), 256, 4);
float[] noise = tb.getGrid(x, y).getRawNoise(x, y); float[] noise = tb.getGrid(x, y).getRawNoise(x, y);
Color c = new Color(NormalizationUtil.normalize(noise[0], 256), NormalizationUtil.normalize(noise[1], 256), zone); Color c = new Color(NormalizationUtil.normalize(noise[0], 256, 4), NormalizationUtil.normalize(noise[1], 256, 4), zone);
draw.setRGB(imX, imY, c.getRGB()); draw.setRGB(imX, imY, c.getRGB());
imX++; imX++;
} }
@@ -1,13 +1,13 @@
package com.dfsek.terra.math; package com.dfsek.terra.math;
import org.polydev.gaea.math.FastNoise; import org.polydev.gaea.math.FastNoiseLite;
import parsii.eval.Expression; import parsii.eval.Expression;
import parsii.eval.Function; import parsii.eval.Function;
import java.util.List; import java.util.List;
public class NoiseFunction2 implements Function { public class NoiseFunction2 implements Function {
private FastNoise gen; private FastNoiseLite gen;
@Override @Override
public int getNumberOfArguments() { public int getNumberOfArguments() {
@@ -16,10 +16,10 @@ public class NoiseFunction2 implements Function {
@Override @Override
public double eval(List<Expression> list) { public double eval(List<Expression> list) {
return gen.getSimplexFractal((float) list.get(0).evaluate(), (float) list.get(1).evaluate()); return gen.getNoise((float) list.get(0).evaluate(), (float) list.get(1).evaluate());
} }
public void setNoise(FastNoise gen) { public void setNoise(FastNoiseLite gen) {
this.gen = gen; this.gen = gen;
} }
@@ -1,13 +1,13 @@
package com.dfsek.terra.math; package com.dfsek.terra.math;
import org.polydev.gaea.math.FastNoise; import org.polydev.gaea.math.FastNoiseLite;
import parsii.eval.Expression; import parsii.eval.Expression;
import parsii.eval.Function; import parsii.eval.Function;
import java.util.List; import java.util.List;
public class NoiseFunction3 implements Function { public class NoiseFunction3 implements Function {
private FastNoise gen; private FastNoiseLite gen;
@Override @Override
public int getNumberOfArguments() { public int getNumberOfArguments() {
return 3; return 3;
@@ -15,10 +15,10 @@ public class NoiseFunction3 implements Function {
@Override @Override
public double eval(List<Expression> list) { public double eval(List<Expression> list) {
return gen.getSimplexFractal((float) list.get(0).evaluate(), (float) list.get(1).evaluate(), (float) list.get(2).evaluate()); return gen.getNoise((float) list.get(0).evaluate(), (float) list.get(1).evaluate(), (float) list.get(2).evaluate());
} }
public void setNoise(FastNoise gen) { public void setNoise(FastNoiseLite gen) {
this.gen = gen; this.gen = gen;
} }
@@ -2,10 +2,10 @@ package com.dfsek.terra.procgen.voxel;
import org.bukkit.block.Block; import org.bukkit.block.Block;
import org.bukkit.util.Vector; import org.bukkit.util.Vector;
import org.polydev.gaea.math.FastNoise; import org.polydev.gaea.math.FastNoiseLite;
public class DeformedSphere extends VoxelGeometry { public class DeformedSphere extends VoxelGeometry {
public DeformedSphere(Vector start, int rad, double deform, FastNoise noise) { public DeformedSphere(Vector start, int rad, double deform, FastNoiseLite noise) {
for(int x = -rad; x <= rad; x++) { for(int x = -rad; x <= rad; x++) {
for(int y = -rad; y <= rad; y++) { for(int y = -rad; y <= rad; y++) {
for(int z = -rad; z <= rad; z++) { for(int z = -rad; z <= rad; z++) {
@@ -1,7 +1,7 @@
package com.dfsek.terra.procgen.voxel; package com.dfsek.terra.procgen.voxel;
import org.bukkit.util.Vector; import org.bukkit.util.Vector;
import org.polydev.gaea.math.FastNoise; import org.polydev.gaea.math.FastNoiseLite;
public class Sphere extends VoxelGeometry { public class Sphere extends VoxelGeometry {
public Sphere(Vector start, int rad) { public Sphere(Vector start, int rad) {
@@ -6,7 +6,7 @@ import com.dfsek.terra.config.genconfig.biome.BiomeConfig;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.World; import org.bukkit.World;
import org.polydev.gaea.generation.GenerationPhase; import org.polydev.gaea.generation.GenerationPhase;
import org.polydev.gaea.math.FastNoise; import org.polydev.gaea.math.FastNoiseLite;
import java.io.Serializable; import java.io.Serializable;
import java.util.HashMap; import java.util.HashMap;
@@ -42,12 +42,12 @@ public enum StructureSpawnRequirement implements Serializable {
} }
}; };
private static final long serialVersionUID = -175639605885943679L; private static final long serialVersionUID = -175639605885943679L;
private static final transient Map<World, FastNoise> noiseMap = new HashMap<>(); private static final transient Map<World, FastNoiseLite> noiseMap = new HashMap<>();
public abstract boolean matches(World w, int x, int y, int z); public abstract boolean matches(World w, int x, int y, int z);
public static void putNoise(World w, FastNoise noise) { public static void putNoise(World w, FastNoiseLite noise) {
noiseMap.putIfAbsent(w, noise); noiseMap.putIfAbsent(w, noise);
} }
private static FastNoise getNoise(World w) { private static FastNoiseLite getNoise(World w) {
return noiseMap.get(w); return noiseMap.get(w);
} }
} }
+15 -9
View File
@@ -1,15 +1,17 @@
import org.polydev.gaea.math.FastNoise; import org.polydev.gaea.biome.NormalizationUtil;
import org.polydev.gaea.math.FastNoiseLite;
public class DistributionTest { public class DistributionTest {
private static final double[] normalMap = new double[] {-0.5522426962852478D, -0.5356624126434326D, -0.5250319838523865D, -0.5172030329704285D, -0.5108230710029602D, -0.5051751136779785D, -0.5003848075866699D, -0.496286541223526D, -0.49219056963920593D, -0.488725870847702D, -0.48548242449760437D, -0.48233601450920105D, -0.4794590473175049D, -0.47680431604385376D, -0.4741802513599396D, -0.4716983437538147D, -0.46938973665237427D, -0.4671768844127655D, -0.46493932604789734D, -0.4628496468067169D, -0.46085309982299805D, -0.45893776416778564D, -0.4571230709552765D, -0.45534923672676086D, -0.4535684585571289D, -0.4518905282020569D, -0.45032820105552673D, -0.44873151183128357D, -0.4472157657146454D, -0.445724755525589D, -0.4442773759365082D, -0.44282811880111694D, -0.44138428568840027D, -0.43998438119888306D, -0.43863797187805176D, -0.4373200237751007D, -0.43603432178497314D, -0.4348065257072449D, -0.4335438907146454D, -0.43234220147132874D, -0.4311666488647461D, -0.42999887466430664D, -0.4288702607154846D, -0.4277186393737793D, -0.42660200595855713D, -0.425540030002594D, -0.42445454001426697D, -0.42338213324546814D, -0.42237231135368347D, -0.4213787317276001D, -0.42034342885017395D, -0.41934314370155334D, -0.41838738322257996D, -0.41747593879699707D, -0.4165368676185608D, -0.41563472151756287D, -0.41473135352134705D, -0.41381341218948364D, -0.412920743227005D, -0.4120390713214874D, -0.41113483905792236D, -0.41027551889419556D, -0.40940171480178833D, -0.4085462987422943D, -0.40771594643592834D, -0.4068986475467682D, -0.4060843288898468D, -0.4052877426147461D, -0.40450364351272583D, -0.40370258688926697D, -0.40295007824897766D, -0.4022042751312256D, -0.40143170952796936D, -0.40068766474723816D, -0.3999272882938385D, -0.39916759729385376D, -0.3984144926071167D, -0.3977096378803253D, -0.3969724774360657D, -0.3962542712688446D, -0.3955434262752533D, -0.39482179284095764D, -0.39413219690322876D, -0.3934393525123596D, -0.39274853467941284D, -0.3920603394508362D, -0.3913818895816803D, -0.3907110095024109D, -0.39001911878585815D, -0.3893643021583557D, -0.38873276114463806D, -0.38809072971343994D, -0.38744935393333435D, -0.38681110739707947D, -0.38617849349975586D, -0.3855555057525635D, -0.3849259316921234D, -0.38428404927253723D, -0.38368701934814453D, -0.38305720686912537D, -0.3824397325515747D, -0.38183310627937317D, -0.3812190294265747D, -0.38061732053756714D, -0.3800400495529175D, -0.37945547699928284D, -0.37887564301490784D, -0.3783135712146759D, -0.3777320683002472D, -0.3771609365940094D, -0.3765930235385895D, -0.3760446608066559D, -0.37546253204345703D, -0.37489989399909973D, -0.37433329224586487D, -0.3737635910511017D, -0.37320101261138916D, -0.37265515327453613D, -0.3721090257167816D, -0.3715764880180359D, -0.3710474967956543D, -0.3705263137817383D, -0.37000274658203125D, -0.36946558952331543D, -0.3689403533935547D, -0.3684338629245758D, -0.3679268956184387D, -0.3674132525920868D, -0.3668895363807678D, -0.36637264490127563D, -0.3658500015735626D, -0.3653477430343628D, -0.3648494482040405D, -0.3643417954444885D, -0.36385640501976013D, -0.36335185170173645D, -0.3628855347633362D, -0.3624073565006256D, -0.3619007468223572D, -0.36142677068710327D, -0.3609183132648468D, -0.3604544401168823D, -0.3599613606929779D, -0.3594810962677002D, -0.3590005338191986D, -0.3585355281829834D, -0.35805660486221313D, -0.35758334398269653D, -0.3571120500564575D, -0.356632798910141D, -0.35616397857666016D, -0.3557022213935852D, -0.35522621870040894D, -0.35475999116897583D, -0.3543040454387665D, -0.3538462817668915D, -0.35339656472206116D, -0.35294967889785767D, -0.3525013029575348D, -0.35205140709877014D, -0.3516044616699219D, -0.3511776924133301D, -0.3507419228553772D, -0.350308358669281D, -0.34987354278564453D, -0.3494442403316498D, -0.34901976585388184D, -0.34858623147010803D, -0.3481590747833252D, -0.3477269113063812D, -0.34729984402656555D, -0.34686949849128723D, -0.34644952416419983D, -0.3460380733013153D, -0.345601350069046D, -0.3451806306838989D, -0.34476256370544434D, -0.3443388342857361D, -0.34393346309661865D, -0.3435156047344208D, -0.34309715032577515D, -0.34269776940345764D, -0.34230056405067444D, -0.34190237522125244D, -0.3415068984031677D, -0.3411085307598114D, -0.3407077193260193D, -0.3403150737285614D, -0.3399060070514679D, -0.3395008146762848D, -0.33910876512527466D, -0.3387194573879242D, -0.3383338451385498D, -0.3379477858543396D, -0.33756473660469055D, -0.33716049790382385D, -0.336769163608551D, -0.33637988567352295D, -0.3360031843185425D, -0.33561065793037415D, -0.33522093296051025D, -0.33484047651290894D, -0.3344566524028778D, -0.3340719938278198D, -0.33369651436805725D, -0.33331871032714844D, -0.3329450190067291D, -0.3325762152671814D, -0.3321962356567383D, -0.3318250775337219D, -0.33146360516548157D, -0.331096351146698D, -0.3307240307331085D, -0.33036690950393677D, -0.3300083577632904D, -0.3296314477920532D, -0.32925838232040405D, -0.3289034366607666D, -0.32853060960769653D, -0.3281768262386322D, -0.3278148Line truncated private static final double[] normalMap = new double[] {-0.8408907651901245D, -0.8200346231460571D, -0.8070776462554932D, -0.7970088720321655D, -0.7890776991844177D, -0.7819743156433105D, -0.7759857773780823D, -0.7706204056739807D, -0.765608549118042D, -0.7611993551254272D, -0.7569039463996887D, -0.7528656125068665D, -0.7492497563362122D, -0.7458332777023315D, -0.7424643039703369D, -0.7392163872718811D, -0.736059844493866D, -0.7332375049591064D, -0.7305010557174683D, -0.7277776598930359D, -0.7251102924346924D, -0.7227165699005127D, -0.7203239798545837D, -0.7179931998252869D, -0.7157421112060547D, -0.7135322690010071D, -0.71131432056427D, -0.7092097997665405D, -0.7071162462234497D, -0.7050217390060425D, -0.703119695186615D, -0.7011850476264954D, -0.6992706060409546D, -0.6974170207977295D, -0.6955324411392212D, -0.6937324404716492D, -0.6919872760772705D, -0.690233588218689D, -0.6885692477226257D, -0.6869722008705139D, -0.6852975487709045D, -0.683682382106781D, -0.6821723580360413D, -0.6806833744049072D, -0.679179310798645D, -0.6776503324508667D, -0.676136314868927D, -0.6746450662612915D, -0.6731522083282471D, -0.6717588305473328D, -0.6702994704246521D, -0.6689524054527283D, -0.6675862073898315D, -0.6662633419036865D, -0.6649606823921204D, -0.6636543273925781D, -0.6623714566230774D, -0.6610865592956543D, -0.6598274111747742D, -0.6585804224014282D, -0.6573819518089294D, -0.6561920642852783D, -0.6549379825592041D, -0.6537073254585266D, -0.6525376439094543D, -0.6513495445251465D, -0.650168240070343D, -0.649040162563324D, -0.6479091048240662D, -0.6467820405960083D, -0.6456737518310547D, -0.6445609331130981D, -0.6434952020645142D, -0.6424031257629395D, -0.6413089632987976D, -0.640256941318512D, -0.6391684412956238D, -0.638137936592102D, -0.6371254324913025D, -0.6361099481582642D, -0.6350630521774292D, -0.6339953541755676D, -0.6330388188362122D, -0.632024347782135D, -0.6310704946517944D, -0.6300620436668396D, -0.6290494799613953D, -0.6280747056007385D, -0.6271024346351624D, -0.6261362433433533D, -0.6251688599586487D, -0.6242944002151489D, -0.6233505606651306D, -0.622406542301178D, -0.6214921474456787D, -0.6205630302429199D, -0.619683563709259D, -0.6187522411346436D, -0.6178513169288635D, -0.6170046925544739D, -0.6161392331123352D, -0.615269660949707D, -0.6144152879714966D, -0.6135557293891907D, -0.6127009391784668D, -0.6117991209030151D, -0.6109536290168762D, -0.6101033091545105D, -0.6092590689659119D, -0.6084139347076416D, -0.6075553894042969D, -0.6067432165145874D, -0.6058894991874695D, -0.6050370335578918D, -0.6042441725730896D, -0.6034530401229858D, -0.6026210784912109D, -0.6018084287643433D, -0.6010326743125916D, -0.6002528071403503D, -0.5994450449943542D, -0.5986629128456116D, -0.5978666543960571D, -0.5971032977104187D, -0.5963031649589539D, -0.5955566167831421D, -0.5947844982147217D, -0.5940142869949341D, -0.5932715535163879D, -0.5925368666648865D, -0.5917928218841553D, -0.591031014919281D, -0.5903055667877197D, -0.5895851850509644D, -0.5888315439224243D, -0.5880893468856812D, -0.5873630046844482D, -0.5866444110870361D, -0.5859208106994629D, -0.5852057933807373D, -0.5844889879226685D, -0.5837893486022949D, -0.5830587148666382D, -0.582359254360199D, -0.5816157460212708D, -0.5809139013290405D, -0.5802302956581116D, -0.5795474052429199D, -0.5788565874099731D, -0.5781614184379578D, -0.5774743556976318D, -0.5767905712127686D, -0.5760961771011353D, -0.5754467248916626D, -0.5747898817062378D, -0.5741211175918579D, -0.5734619498252869D, -0.5728112459182739D, -0.5721414089202881D, -0.5714717507362366D, -0.5708272457122803D, -0.5701769590377808D, -0.5695428252220154D, -0.568885087966919D, -0.5682525038719177D, -0.5675948262214661D, -0.5669249296188354D, -0.5663014054298401D, -0.5656630992889404D, -0.5650165677070618D, -0.5643728971481323D, -0.5637710094451904D, -0.5631371736526489D, -0.562507152557373D, -0.5618733167648315D, -0.5612503290176392D, -0.560631513595581D, -0.5600159168243408D, -0.559416651725769D, -0.5587995052337646D, -0.5581864714622498D, -0.5575871467590332D, -0.556957483291626D, -0.5563494563102722D, -0.555757999420166D, -0.5551457405090332D, -0.5545571446418762D, -0.5539442300796509D, -0.5533522367477417D, -0.5527352094650269D, -0.5521476864814758D, -0.5515644550323486D, -0.5509964823722839D, -0.550428032875061D, -0.5498668551445007D, -0.5492658615112305D, -0.5486577749252319D, -0.5480945110321045D, -0.5475296378135681D, -0.5469772815704346D, -0.5463858246803284D, -0.5458088517189026D, -0.545259952545166D, -0.5447098016738892D, -0.5441542863845825D, -0.5436179041862488D, -0.5430275201797485D, -0.5424584746360779D, -0.5419116616249084D, -0.5413541197776794D, -0.5408090353012085D, -0.5402546525001526D, -0.5396901369094849D, -0.539120078086853D, -0.5385692715644836D, -0.5380025506019592D, -0.5374376773834229D, -0.5369035601615906D, -0.5363785624504089D, -0.5358348488807678D, -0.5352905988693237D, -0.5347356796264648D, -0.5341591238975525D, -0.5336212515830994D, -0.5330695509910583D, -0.53253978490829Line truncated
//private static final List<Double> m = Arrays.asList(normalMap);
public static void main(String[] args) { public static void main(String[] args) {
FastNoise noise = new FastNoise(); FastNoiseLite noise = new FastNoiseLite();
noise.setNoiseType(FastNoise.NoiseType.SimplexFractal); noise.setNoiseType(FastNoiseLite.NoiseType.OpenSimplex2);
noise.setFrequency(0.02f); noise.setFrequency(0.02f);
noise.setFractalType(FastNoiseLite.FractalType.FBm);
noise.setFractalOctaves(4); noise.setFractalOctaves(4);
System.out.println(noise); System.out.println(noise);
int attempts = 8; int attempts = 8;
@@ -26,8 +28,8 @@ public class DistributionTest {
long l = System.nanoTime(); long l = System.nanoTime();
for(int i = 0; i < 1000000; i++) { for(int i = 0; i < 1000000; i++) {
double n = noise.getNoise(0, i); double n = noise.getNoise(0, i);
max = Math.max(max, n-1); max = Math.max(max, n);
min = Math.min(min, n-1); min = Math.min(min, n);
numbers[normalize(n, attempts)]++; numbers[normalize(n, attempts)]++;
} }
long l2 = System.nanoTime()-l; long l2 = System.nanoTime()-l;
@@ -36,8 +38,8 @@ public class DistributionTest {
l = System.nanoTime(); l = System.nanoTime();
for(int i = 0; i < 1000000; i++) { for(int i = 0; i < 1000000; i++) {
double n = noise.getNoise(0, i); double n = noise.getNoise(0, i);
max = Math.max(max, n - 1); max = Math.max(max, n);
min = Math.min(min, n - 1); min = Math.min(min, n);
} }
l2 = System.nanoTime()-l; l2 = System.nanoTime()-l;
System.out.println("Took " + (double)l2/1000000 + "ms (" + ((double)l2/1000000) + "ns per."); System.out.println("Took " + (double)l2/1000000 + "ms (" + ((double)l2/1000000) + "ns per.");
@@ -55,6 +57,10 @@ public class DistributionTest {
System.out.println("max: " + max); System.out.println("max: " + max);
System.out.println("min: " + min); System.out.println("min: " + min);
} }
public static int normal(double d, int max) {
double ranged = Math.max(0, Math.min((d+1)/2D, 1));
return (int) (ranged*max);
}
public static int normalize(double d, int num) { public static int normalize(double d, int num) {
int start = 0; int start = 0;
int end = normalMap.length - 1; int end = normalMap.length - 1;
+8 -10
View File
@@ -1,6 +1,6 @@
import com.dfsek.terra.biome.BiomeZone; import com.dfsek.terra.biome.BiomeZone;
import com.sun.corba.se.spi.orbutil.threadpool.Work; import com.sun.corba.se.spi.orbutil.threadpool.Work;
import org.polydev.gaea.math.FastNoise; import org.polydev.gaea.math.FastNoiseLite;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
@@ -14,10 +14,9 @@ public class LookupGenerator {
int dist = 4096; int dist = 4096;
List<Double> vals = new ArrayList<>(); List<Double> vals = new ArrayList<>();
FastNoise noise = new FastNoise(); FastNoiseLite noise = new FastNoiseLite();
noise.setNoiseType(FastNoise.NoiseType.SimplexFractal); noise.setNoiseType(FastNoiseLite.NoiseType.OpenSimplex2);
noise.setFrequency(0.02f); noise.setFrequency(0.02f);
noise.setFractalOctaves(4);
int[] numbers = new int[dist]; int[] numbers = new int[dist];
double min = Integer.MAX_VALUE; double min = Integer.MAX_VALUE;
double max = Integer.MIN_VALUE; double max = Integer.MIN_VALUE;
@@ -25,13 +24,12 @@ public class LookupGenerator {
numbers[i] = 0; numbers[i] = 0;
} }
int workerAmount = 16; int workerAmount = 16;
List<Worker> workers = new ArrayList<>(); List<Worker> workers = new ArrayList<>();
for(int i = 0; i < workerAmount; i++) { for(int i = 0; i < workerAmount; i++) {
workers.add(new Worker(new ArrayList<>(), 10000000, noise)); workers.add(new Worker(new ArrayList<>(), 5000000, noise));
} }
for(Worker w : workers) { for(Worker w : workers) {
@@ -53,7 +51,7 @@ public class LookupGenerator {
} }
for(int i = 0; i < dist; i++) { for(int i = 0; i < dist; i++) {
System.out.print(i + (String.valueOf(i).length() ==1 ? " " : "") + " |"); System.out.print(i + (String.valueOf(i).length() ==1 ? " " : "") + " |");
for(int j = 0; j < numbers[i]/3000; j++) { for(int j = 0; j < numbers[i]/300; j++) {
System.out.print("-"); System.out.print("-");
} }
System.out.println("|"); System.out.println("|");
@@ -74,7 +72,7 @@ public class LookupGenerator {
s.append("}"); s.append("}");
numbers = new int[dist]; numbers = new int[dist];
vals = new ArrayList<>(); vals = new ArrayList<>();
for(int i = 0; i < 50000000; i++) { for(int i = 0; i < 10000000; i++) {
double n = noise.getNoise(0, i); double n = noise.getNoise(0, i);
vals.add(n); vals.add(n);
numbers[normalizeNew(n)]++; numbers[normalizeNew(n)]++;
@@ -109,8 +107,8 @@ public class LookupGenerator {
private static class Worker extends Thread { private static class Worker extends Thread {
private final List<Double> l; private final List<Double> l;
private final int searches; private final int searches;
private final FastNoise noise; private final FastNoiseLite noise;
public Worker(List<Double> l, int searches, FastNoise noise) { public Worker(List<Double> l, int searches, FastNoiseLite noise) {
this.l = l; this.l = l;
this.searches = searches; this.searches = searches;
this.noise = noise; this.noise = noise;