Add RandomFunction and seed variable

This commit is contained in:
dfsek 2020-11-24 16:04:25 -07:00
parent 4ddb3a294e
commit b43b9ee7b9
3 changed files with 35 additions and 0 deletions

Binary file not shown.

View File

@ -3,6 +3,7 @@ package com.dfsek.terra.generation.config;
import com.dfsek.terra.config.genconfig.noise.NoiseConfig; import com.dfsek.terra.config.genconfig.noise.NoiseConfig;
import com.dfsek.terra.math.NoiseFunction2; import com.dfsek.terra.math.NoiseFunction2;
import com.dfsek.terra.math.NoiseFunction3; import com.dfsek.terra.math.NoiseFunction3;
import com.dfsek.terra.math.RandomFunction;
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;
@ -36,12 +37,15 @@ public class WorldGenerator extends Generator {
@SuppressWarnings({"rawtypes", "unchecked"}) @SuppressWarnings({"rawtypes", "unchecked"})
public WorldGenerator(long seed, String equation, String elevateEquation, Scope vScope, Map<String, NoiseConfig> noiseBuilders, Palette[] palettes, Palette[] slantPalettes, boolean preventSmooth) { public WorldGenerator(long seed, String equation, String elevateEquation, Scope vScope, Map<String, NoiseConfig> noiseBuilders, Palette[] palettes, Palette[] slantPalettes, boolean preventSmooth) {
Parser p = new Parser(); Parser p = new Parser();
p.registerFunction("rand", new RandomFunction());
Parser ep = new Parser(); Parser ep = new Parser();
ep.registerFunction("rand", new RandomFunction());
Scope s = new Scope().withParent(vScope); Scope s = new Scope().withParent(vScope);
xVar = s.create("x"); xVar = s.create("x");
yVar = s.create("y"); yVar = s.create("y");
zVar = s.create("z"); zVar = s.create("z");
s.create("seed").setValue(seed);
this.preventSmooth = preventSmooth; this.preventSmooth = preventSmooth;
@ -63,6 +67,7 @@ public class WorldGenerator extends Generator {
this.noiseExp = p.parse(equation, s).simplify(); this.noiseExp = p.parse(equation, s).simplify();
if(elevateEquation != null) { if(elevateEquation != null) {
Scope es = new Scope().withParent(vScope); Scope es = new Scope().withParent(vScope);
es.create("seed").setValue(seed);
this.elevationXVar = es.create("x"); this.elevationXVar = es.create("x");
this.elevationZVar = es.create("z"); this.elevationZVar = es.create("z");
this.elevationExp = ep.parse(elevateEquation, es).simplify(); this.elevationExp = ep.parse(elevateEquation, es).simplify();

View File

@ -0,0 +1,30 @@
package com.dfsek.terra.math;
import org.polydev.gaea.util.FastRandom;
import parsii.eval.Expression;
import parsii.eval.Function;
import java.util.List;
/**
* Provides access to a PRNG ({@link org.polydev.gaea.util.FastRandom})
* <p>
* Takes 1 argument, which sets the seed
*/
public class RandomFunction implements Function {
@Override
public int getNumberOfArguments() {
return 1;
}
@Override
public double eval(List<Expression> list) {
long seed = (long) list.get(0).evaluate();
return new FastRandom(seed).nextDouble();
}
@Override
public boolean isNaturalFunction() {
return true;
}
}