mirror of
https://github.com/PolyhedralDev/Terra.git
synced 2026-04-16 21:30:08 +00:00
Terrascript refactor
This commit is contained in:
@@ -1,28 +1,28 @@
|
||||
package com.dfsek.terra.addons.terrascript.sampler;
|
||||
|
||||
import com.dfsek.terra.addons.terrascript.parser.lang.ImplementationArguments;
|
||||
import com.dfsek.terra.addons.terrascript.parser.lang.Returnable;
|
||||
import com.dfsek.terra.addons.terrascript.parser.lang.Expression;
|
||||
import com.dfsek.terra.addons.terrascript.parser.lang.Scope;
|
||||
import com.dfsek.terra.addons.terrascript.parser.lang.functions.Function;
|
||||
import com.dfsek.terra.addons.terrascript.script.TerraImplementationArguments;
|
||||
import com.dfsek.terra.addons.terrascript.tokenizer.Position;
|
||||
import com.dfsek.terra.addons.terrascript.tokenizer.SourcePosition;
|
||||
import com.dfsek.terra.api.noise.NoiseSampler;
|
||||
|
||||
|
||||
public class ConstantSamplerFunction implements Function<Number> {
|
||||
private final Returnable<Number> x, y, z;
|
||||
private final Expression<Number> x, y, z;
|
||||
private final NoiseSampler sampler;
|
||||
|
||||
|
||||
private final boolean twoD;
|
||||
private final Position position;
|
||||
private final SourcePosition position;
|
||||
|
||||
public ConstantSamplerFunction(NoiseSampler sampler,
|
||||
Returnable<Number> x,
|
||||
Returnable<Number> y,
|
||||
Returnable<Number> z,
|
||||
Expression<Number> x,
|
||||
Expression<Number> y,
|
||||
Expression<Number> z,
|
||||
boolean twoD,
|
||||
Position position) {
|
||||
SourcePosition position) {
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
this.z = z;
|
||||
@@ -32,22 +32,22 @@ public class ConstantSamplerFunction implements Function<Number> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Number apply(ImplementationArguments implementationArguments, Scope scope) {
|
||||
public Number invoke(ImplementationArguments implementationArguments, Scope scope) {
|
||||
TerraImplementationArguments arguments = (TerraImplementationArguments) implementationArguments;
|
||||
double x = this.x.apply(implementationArguments, scope).doubleValue();
|
||||
double x = this.x.invoke(implementationArguments, scope).doubleValue();
|
||||
|
||||
double z = this.z.apply(implementationArguments, scope).doubleValue();
|
||||
double z = this.z.invoke(implementationArguments, scope).doubleValue();
|
||||
|
||||
if(twoD) {
|
||||
return sampler.noise(arguments.getWorld().getSeed(), x, z);
|
||||
} else {
|
||||
double y = this.y.apply(implementationArguments, scope).doubleValue();
|
||||
double y = this.y.invoke(implementationArguments, scope).doubleValue();
|
||||
return sampler.noise(arguments.getWorld().getSeed(), x, y, z);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Position getPosition() {
|
||||
public SourcePosition getPosition() {
|
||||
return position;
|
||||
}
|
||||
|
||||
|
||||
@@ -3,30 +3,30 @@ package com.dfsek.terra.addons.terrascript.sampler;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
import com.dfsek.terra.addons.terrascript.parser.lang.ImplementationArguments;
|
||||
import com.dfsek.terra.addons.terrascript.parser.lang.Returnable;
|
||||
import com.dfsek.terra.addons.terrascript.parser.lang.Expression;
|
||||
import com.dfsek.terra.addons.terrascript.parser.lang.Scope;
|
||||
import com.dfsek.terra.addons.terrascript.parser.lang.functions.Function;
|
||||
import com.dfsek.terra.addons.terrascript.script.TerraImplementationArguments;
|
||||
import com.dfsek.terra.addons.terrascript.tokenizer.Position;
|
||||
import com.dfsek.terra.addons.terrascript.tokenizer.SourcePosition;
|
||||
import com.dfsek.terra.api.noise.NoiseSampler;
|
||||
|
||||
|
||||
public class SamplerFunction implements Function<Number> {
|
||||
private final Returnable<Number> x, y, z;
|
||||
private final Returnable<String> function;
|
||||
private final Expression<Number> x, y, z;
|
||||
private final Expression<String> function;
|
||||
|
||||
private final java.util.function.Function<Supplier<String>, NoiseSampler> samplerFunction;
|
||||
|
||||
private final boolean twoD;
|
||||
private final Position position;
|
||||
private final SourcePosition position;
|
||||
|
||||
public SamplerFunction(Returnable<String> function,
|
||||
Returnable<Number> x,
|
||||
Returnable<Number> y,
|
||||
Returnable<Number> z,
|
||||
public SamplerFunction(Expression<String> function,
|
||||
Expression<Number> x,
|
||||
Expression<Number> y,
|
||||
Expression<Number> z,
|
||||
java.util.function.Function<Supplier<String>, NoiseSampler> samplerFunction,
|
||||
boolean twoD,
|
||||
Position position) {
|
||||
SourcePosition position) {
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
this.z = z;
|
||||
@@ -37,23 +37,23 @@ public class SamplerFunction implements Function<Number> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Number apply(ImplementationArguments implementationArguments, Scope scope) {
|
||||
public Number invoke(ImplementationArguments implementationArguments, Scope scope) {
|
||||
TerraImplementationArguments arguments = (TerraImplementationArguments) implementationArguments;
|
||||
double x = this.x.apply(implementationArguments, scope).doubleValue();
|
||||
double x = this.x.invoke(implementationArguments, scope).doubleValue();
|
||||
|
||||
double z = this.z.apply(implementationArguments, scope).doubleValue();
|
||||
double z = this.z.invoke(implementationArguments, scope).doubleValue();
|
||||
|
||||
NoiseSampler sampler = samplerFunction.apply(() -> function.apply(implementationArguments, scope));
|
||||
NoiseSampler sampler = samplerFunction.apply(() -> function.invoke(implementationArguments, scope));
|
||||
if(twoD) {
|
||||
return sampler.noise(arguments.getWorld().getSeed(), x, z);
|
||||
} else {
|
||||
double y = this.y.apply(implementationArguments, scope).doubleValue();
|
||||
double y = this.y.invoke(implementationArguments, scope).doubleValue();
|
||||
return sampler.noise(arguments.getWorld().getSeed(), x, y, z);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Position getPosition() {
|
||||
public SourcePosition getPosition() {
|
||||
return position;
|
||||
}
|
||||
|
||||
|
||||
@@ -6,12 +6,12 @@ import java.util.Map;
|
||||
import java.util.Objects;
|
||||
|
||||
import com.dfsek.terra.addons.noise.config.DimensionApplicableNoiseSampler;
|
||||
import com.dfsek.terra.addons.terrascript.parser.lang.Returnable;
|
||||
import com.dfsek.terra.addons.terrascript.parser.lang.Returnable.ReturnType;
|
||||
import com.dfsek.terra.addons.terrascript.parser.lang.Expression;
|
||||
import com.dfsek.terra.addons.terrascript.parser.lang.Expression.ReturnType;
|
||||
import com.dfsek.terra.addons.terrascript.parser.lang.constants.NumericConstant;
|
||||
import com.dfsek.terra.addons.terrascript.parser.lang.constants.StringConstant;
|
||||
import com.dfsek.terra.addons.terrascript.parser.lang.functions.FunctionBuilder;
|
||||
import com.dfsek.terra.addons.terrascript.tokenizer.Position;
|
||||
import com.dfsek.terra.addons.terrascript.tokenizer.SourcePosition;
|
||||
|
||||
|
||||
public class SamplerFunctionBuilder implements FunctionBuilder<com.dfsek.terra.addons.terrascript.parser.lang.functions.Function<Number>> {
|
||||
@@ -33,25 +33,25 @@ public class SamplerFunctionBuilder implements FunctionBuilder<com.dfsek.terra.a
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public com.dfsek.terra.addons.terrascript.parser.lang.functions.Function<Number> build(List<Returnable<?>> argumentList,
|
||||
Position position) {
|
||||
Returnable<String> arg = (Returnable<String>) argumentList.get(0);
|
||||
public com.dfsek.terra.addons.terrascript.parser.lang.functions.Function<Number> build(List<Expression<?>> argumentList,
|
||||
SourcePosition position) {
|
||||
Expression<String> arg = (Expression<String>) argumentList.get(0);
|
||||
|
||||
if(argumentList.size() == 3) { // 2D
|
||||
if(arg instanceof StringConstant constant) {
|
||||
return new ConstantSamplerFunction(Objects.requireNonNull(samplers2d.get(constant.getConstant()),
|
||||
"No such 2D noise function " + constant.getConstant())
|
||||
.getSampler(),
|
||||
(Returnable<Number>) argumentList.get(1),
|
||||
(Expression<Number>) argumentList.get(1),
|
||||
new NumericConstant(0, position),
|
||||
(Returnable<Number>) argumentList.get(2),
|
||||
(Expression<Number>) argumentList.get(2),
|
||||
true,
|
||||
position);
|
||||
} else {
|
||||
return new SamplerFunction((Returnable<String>) argumentList.get(0),
|
||||
(Returnable<Number>) argumentList.get(1),
|
||||
return new SamplerFunction((Expression<String>) argumentList.get(0),
|
||||
(Expression<Number>) argumentList.get(1),
|
||||
new NumericConstant(0, position),
|
||||
(Returnable<Number>) argumentList.get(2),
|
||||
(Expression<Number>) argumentList.get(2),
|
||||
s -> Objects.requireNonNull(samplers2d.get(s.get()), "No such 2D noise function " + s.get())
|
||||
.getSampler(),
|
||||
true,
|
||||
@@ -63,16 +63,16 @@ public class SamplerFunctionBuilder implements FunctionBuilder<com.dfsek.terra.a
|
||||
return new ConstantSamplerFunction(Objects.requireNonNull(samplers3d.get(constant.getConstant()),
|
||||
"No such 3D noise function " + constant.getConstant())
|
||||
.getSampler(),
|
||||
(Returnable<Number>) argumentList.get(1),
|
||||
(Returnable<Number>) argumentList.get(2),
|
||||
(Returnable<Number>) argumentList.get(3),
|
||||
(Expression<Number>) argumentList.get(1),
|
||||
(Expression<Number>) argumentList.get(2),
|
||||
(Expression<Number>) argumentList.get(3),
|
||||
true,
|
||||
position);
|
||||
} else {
|
||||
return new SamplerFunction((Returnable<String>) argumentList.get(0),
|
||||
(Returnable<Number>) argumentList.get(1),
|
||||
(Returnable<Number>) argumentList.get(2),
|
||||
(Returnable<Number>) argumentList.get(3),
|
||||
return new SamplerFunction((Expression<String>) argumentList.get(0),
|
||||
(Expression<Number>) argumentList.get(1),
|
||||
(Expression<Number>) argumentList.get(2),
|
||||
(Expression<Number>) argumentList.get(3),
|
||||
s -> Objects.requireNonNull(samplers3d.get(s.get()), "No such 3D noise function " + s.get())
|
||||
.getSampler(),
|
||||
true,
|
||||
|
||||
Reference in New Issue
Block a user