From 308ba887a3c76aba279dbbe3541bad0502c851bb Mon Sep 17 00:00:00 2001 From: dfsek Date: Thu, 7 Jan 2021 17:18:38 -0700 Subject: [PATCH] add getOrigin functions --- .../structures/script/StructureScript.java | 5 ++ .../builders/ZeroArgFunctionBuilder.java | 51 +++++++++++++++++++ 2 files changed, 56 insertions(+) create mode 100644 common/src/main/java/com/dfsek/terra/api/structures/script/builders/ZeroArgFunctionBuilder.java diff --git a/common/src/main/java/com/dfsek/terra/api/structures/script/StructureScript.java b/common/src/main/java/com/dfsek/terra/api/structures/script/StructureScript.java index 5aa7d3734..70826823a 100644 --- a/common/src/main/java/com/dfsek/terra/api/structures/script/StructureScript.java +++ b/common/src/main/java/com/dfsek/terra/api/structures/script/StructureScript.java @@ -6,6 +6,7 @@ import com.dfsek.terra.api.platform.world.Chunk; import com.dfsek.terra.api.structures.parser.Parser; import com.dfsek.terra.api.structures.parser.exceptions.ParseException; import com.dfsek.terra.api.structures.parser.lang.Block; +import com.dfsek.terra.api.structures.parser.lang.Returnable; import com.dfsek.terra.api.structures.script.builders.BinaryNumberFunctionBuilder; import com.dfsek.terra.api.structures.script.builders.BiomeFunctionBuilder; import com.dfsek.terra.api.structures.script.builders.BlockFunctionBuilder; @@ -22,6 +23,7 @@ import com.dfsek.terra.api.structures.script.builders.StateFunctionBuilder; import com.dfsek.terra.api.structures.script.builders.StructureFunctionBuilder; import com.dfsek.terra.api.structures.script.builders.UnaryNumberFunctionBuilder; import com.dfsek.terra.api.structures.script.builders.UnaryStringFunctionBuilder; +import com.dfsek.terra.api.structures.script.builders.ZeroArgFunctionBuilder; import com.dfsek.terra.api.structures.structure.Rotation; import com.dfsek.terra.api.structures.structure.buffer.Buffer; import com.dfsek.terra.api.structures.structure.buffer.DirectBuffer; @@ -68,6 +70,9 @@ public class StructureScript { .registerFunction("getBiome", new BiomeFunctionBuilder(main)) .registerFunction("getBlock", new CheckBlockFunctionBuilder()) .registerFunction("state", new StateFunctionBuilder(main)) + .registerFunction("originX", new ZeroArgFunctionBuilder(arguments -> arguments.getBuffer().getOrigin().getX(), Returnable.ReturnType.NUMBER)) + .registerFunction("originY", new ZeroArgFunctionBuilder(arguments -> arguments.getBuffer().getOrigin().getY(), Returnable.ReturnType.NUMBER)) + .registerFunction("originZ", new ZeroArgFunctionBuilder(arguments -> arguments.getBuffer().getOrigin().getZ(), Returnable.ReturnType.NUMBER)) .registerFunction("print", new UnaryStringFunctionBuilder(string -> Debug.info("[" + tempID + "] " + string))) .registerFunction("abs", new UnaryNumberFunctionBuilder(number -> FastMath.abs(number.doubleValue()))) .registerFunction("pow", new BinaryNumberFunctionBuilder((number, number2) -> FastMath.pow(number.doubleValue(), number2.doubleValue()))) diff --git a/common/src/main/java/com/dfsek/terra/api/structures/script/builders/ZeroArgFunctionBuilder.java b/common/src/main/java/com/dfsek/terra/api/structures/script/builders/ZeroArgFunctionBuilder.java new file mode 100644 index 000000000..ef96b451b --- /dev/null +++ b/common/src/main/java/com/dfsek/terra/api/structures/script/builders/ZeroArgFunctionBuilder.java @@ -0,0 +1,51 @@ +package com.dfsek.terra.api.structures.script.builders; + +import com.dfsek.terra.api.structures.parser.lang.ImplementationArguments; +import com.dfsek.terra.api.structures.parser.lang.Returnable; +import com.dfsek.terra.api.structures.parser.lang.functions.Function; +import com.dfsek.terra.api.structures.parser.lang.functions.FunctionBuilder; +import com.dfsek.terra.api.structures.script.TerraImplementationArguments; +import com.dfsek.terra.api.structures.tokenizer.Position; + +import java.util.List; + +public class ZeroArgFunctionBuilder implements FunctionBuilder> { + private final java.util.function.Function function; + private final Returnable.ReturnType type; + + public ZeroArgFunctionBuilder(java.util.function.Function function, Returnable.ReturnType type) { + this.function = function; + this.type = type; + } + + @Override + public Function build(List> argumentList, Position position) { + return new Function() { + @Override + public ReturnType returnType() { + return type; + } + + @Override + public T apply(ImplementationArguments implementationArguments) { + return function.apply((TerraImplementationArguments) implementationArguments); + } + + @Override + public Position getPosition() { + return position; + } + }; + } + + @Override + public int argNumber() { + return 1; + } + + @Override + public Returnable.ReturnType getArgument(int position) { + if(position == 0) return type; + return null; + } +}