Move terrascript 2 to separate module

This commit is contained in:
Astrash committed 2023-10-23 13:28:26 +11:00
1 parent 375f0ba60f
commit 1623a4f958
156 files changed
+1441 -1495

No files matched your search

@@ -1,29 +1,28 @@
package com.dfsek.terra.addons.terrascript.sampler;
import com.dfsek.terra.addons.terrascript.Type;
import com.dfsek.terra.addons.terrascript.legacy.parser.lang.ImplementationArguments;
import com.dfsek.terra.addons.terrascript.legacy.parser.lang.Expression;
import com.dfsek.terra.addons.terrascript.legacy.parser.lang.Scope;
import com.dfsek.terra.addons.terrascript.legacy.parser.lang.functions.Function;
import com.dfsek.terra.addons.terrascript.legacy.script.TerraImplementationArguments;
import com.dfsek.terra.addons.terrascript.lexer.SourcePosition;
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.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.api.noise.NoiseSampler;
public class ConstantSamplerFunction implements Function<Number> {
private final Expression<Number> x, y, z;
private final Returnable<Number> x, y, z;
private final NoiseSampler sampler;
private final boolean twoD;
private final SourcePosition position;
private final Position position;
public ConstantSamplerFunction(NoiseSampler sampler,
Expression<Number> x,
Expression<Number> y,
Expression<Number> z,
Returnable<Number> x,
Returnable<Number> y,
Returnable<Number> z,
boolean twoD,
SourcePosition position) {
Position position) {
this.x = x;
this.y = y;
this.z = z;
@@ -33,27 +32,27 @@ public class ConstantSamplerFunction implements Function<Number> {
}
@Override
public Number evaluate(ImplementationArguments implementationArguments, Scope scope) {
public Number apply(ImplementationArguments implementationArguments, Scope scope) {
TerraImplementationArguments arguments = (TerraImplementationArguments) implementationArguments;
double x = this.x.evaluate(implementationArguments, scope).doubleValue();
double x = this.x.apply(implementationArguments, scope).doubleValue();
double z = this.z.evaluate(implementationArguments, scope).doubleValue();
double z = this.z.apply(implementationArguments, scope).doubleValue();
if(twoD) {
return sampler.noise(arguments.getWorld().getSeed(), x, z);
} else {
double y = this.y.evaluate(implementationArguments, scope).doubleValue();
double y = this.y.apply(implementationArguments, scope).doubleValue();
return sampler.noise(arguments.getWorld().getSeed(), x, y, z);
}
}
@Override
public SourcePosition getPosition() {
public Position getPosition() {
return position;
}
@Override
public Type returnType() {
return Type.NUMBER;
public ReturnType returnType() {
return ReturnType.NUMBER;
}
}
@@ -2,32 +2,31 @@ package com.dfsek.terra.addons.terrascript.sampler;
import java.util.function.Supplier;
import com.dfsek.terra.addons.terrascript.Type;
import com.dfsek.terra.addons.terrascript.legacy.parser.lang.ImplementationArguments;
import com.dfsek.terra.addons.terrascript.legacy.parser.lang.Expression;
import com.dfsek.terra.addons.terrascript.legacy.parser.lang.Scope;
import com.dfsek.terra.addons.terrascript.legacy.parser.lang.functions.Function;
import com.dfsek.terra.addons.terrascript.legacy.script.TerraImplementationArguments;
import com.dfsek.terra.addons.terrascript.lexer.SourcePosition;
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.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.api.noise.NoiseSampler;
public class SamplerFunction implements Function<Number> {
private final Expression<Number> x, y, z;
private final Expression<String> function;
private final Returnable<Number> x, y, z;
private final Returnable<String> function;
private final java.util.function.Function<Supplier<String>, NoiseSampler> samplerFunction;
private final boolean twoD;
private final SourcePosition position;
private final Position position;
public SamplerFunction(Expression<String> function,
Expression<Number> x,
Expression<Number> y,
Expression<Number> z,
public SamplerFunction(Returnable<String> function,
Returnable<Number> x,
Returnable<Number> y,
Returnable<Number> z,
java.util.function.Function<Supplier<String>, NoiseSampler> samplerFunction,
boolean twoD,
SourcePosition position) {
Position position) {
this.x = x;
this.y = y;
this.z = z;
@@ -38,28 +37,28 @@ public class SamplerFunction implements Function<Number> {
}
@Override
public Number evaluate(ImplementationArguments implementationArguments, Scope scope) {
public Number apply(ImplementationArguments implementationArguments, Scope scope) {
TerraImplementationArguments arguments = (TerraImplementationArguments) implementationArguments;
double x = this.x.evaluate(implementationArguments, scope).doubleValue();
double x = this.x.apply(implementationArguments, scope).doubleValue();
double z = this.z.evaluate(implementationArguments, scope).doubleValue();
double z = this.z.apply(implementationArguments, scope).doubleValue();
NoiseSampler sampler = samplerFunction.apply(() -> function.evaluate(implementationArguments, scope));
NoiseSampler sampler = samplerFunction.apply(() -> function.apply(implementationArguments, scope));
if(twoD) {
return sampler.noise(arguments.getWorld().getSeed(), x, z);
} else {
double y = this.y.evaluate(implementationArguments, scope).doubleValue();
double y = this.y.apply(implementationArguments, scope).doubleValue();
return sampler.noise(arguments.getWorld().getSeed(), x, y, z);
}
}
@Override
public SourcePosition getPosition() {
public Position getPosition() {
return position;
}
@Override
public Type returnType() {
return Type.NUMBER;
public ReturnType returnType() {
return ReturnType.NUMBER;
}
}
@@ -6,16 +6,15 @@ import java.util.Map;
import java.util.Objects;
import com.dfsek.terra.addons.noise.config.DimensionApplicableNoiseSampler;
import com.dfsek.terra.addons.terrascript.legacy.parser.lang.functions.Function;
import com.dfsek.terra.addons.terrascript.legacy.parser.lang.Expression;
import com.dfsek.terra.addons.terrascript.Type;
import com.dfsek.terra.addons.terrascript.legacy.parser.lang.constants.NumericConstant;
import com.dfsek.terra.addons.terrascript.legacy.parser.lang.constants.StringConstant;
import com.dfsek.terra.addons.terrascript.legacy.parser.lang.functions.FunctionBuilder;
import com.dfsek.terra.addons.terrascript.lexer.SourcePosition;
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.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;
public class SamplerFunctionBuilder implements FunctionBuilder<Function<Number>> {
public class SamplerFunctionBuilder implements FunctionBuilder<com.dfsek.terra.addons.terrascript.parser.lang.functions.Function<Number>> {
private final Map<String, DimensionApplicableNoiseSampler> samplers2d;
private final Map<String, DimensionApplicableNoiseSampler> samplers3d;
@@ -34,25 +33,25 @@ public class SamplerFunctionBuilder implements FunctionBuilder<Function<Number>>
@SuppressWarnings("unchecked")
@Override
public Function<Number> build(List<Expression<?>> argumentList,
SourcePosition position) {
Expression<String> arg = (Expression<String>) argumentList.get(0);
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);
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(),
(Expression<Number>) argumentList.get(1),
(Returnable<Number>) argumentList.get(1),
new NumericConstant(0, position),
(Expression<Number>) argumentList.get(2),
(Returnable<Number>) argumentList.get(2),
true,
position);
} else {
return new SamplerFunction((Expression<String>) argumentList.get(0),
(Expression<Number>) argumentList.get(1),
return new SamplerFunction((Returnable<String>) argumentList.get(0),
(Returnable<Number>) argumentList.get(1),
new NumericConstant(0, position),
(Expression<Number>) argumentList.get(2),
(Returnable<Number>) argumentList.get(2),
s -> Objects.requireNonNull(samplers2d.get(s.get()), "No such 2D noise function " + s.get())
.getSampler(),
true,
@@ -64,16 +63,16 @@ public class SamplerFunctionBuilder implements FunctionBuilder<Function<Number>>
return new ConstantSamplerFunction(Objects.requireNonNull(samplers3d.get(constant.getConstant()),
"No such 3D noise function " + constant.getConstant())
.getSampler(),
(Expression<Number>) argumentList.get(1),
(Expression<Number>) argumentList.get(2),
(Expression<Number>) argumentList.get(3),
(Returnable<Number>) argumentList.get(1),
(Returnable<Number>) argumentList.get(2),
(Returnable<Number>) argumentList.get(3),
true,
position);
} else {
return new SamplerFunction((Expression<String>) argumentList.get(0),
(Expression<Number>) argumentList.get(1),
(Expression<Number>) argumentList.get(2),
(Expression<Number>) argumentList.get(3),
return new SamplerFunction((Returnable<String>) argumentList.get(0),
(Returnable<Number>) argumentList.get(1),
(Returnable<Number>) argumentList.get(2),
(Returnable<Number>) argumentList.get(3),
s -> Objects.requireNonNull(samplers3d.get(s.get()), "No such 3D noise function " + s.get())
.getSampler(),
true,
@@ -88,10 +87,10 @@ public class SamplerFunctionBuilder implements FunctionBuilder<Function<Number>>
}
@Override
public Type getArgument(int position) {
public ReturnType getArgument(int position) {
return switch(position) {
case 0 -> Type.STRING;
case 1, 2, 3 -> Type.NUMBER;
case 0 -> ReturnType.STRING;
case 1, 2, 3 -> ReturnType.NUMBER;
default -> null;
};
}
@@ -2,7 +2,7 @@ package com.dfsek.terra.addons.terrascript.sampler;
import com.dfsek.terra.addons.manifest.api.AddonInitializer;
import com.dfsek.terra.addons.noise.NoiseConfigPackTemplate;
import com.dfsek.terra.addons.terrascript.legacy.parser.lang.functions.FunctionBuilder;
import com.dfsek.terra.addons.terrascript.parser.lang.functions.FunctionBuilder;
import com.dfsek.terra.api.Platform;
import com.dfsek.terra.api.addon.BaseAddon;
import com.dfsek.terra.api.event.events.config.pack.ConfigPackPreLoadEvent;