Merge branch 'master' into 1.17
This commit is contained in:
commit
407c117c29
5 files changed
+43
-5
No files matched your search
@@ -589,6 +589,12 @@ Changes entity's location in the specified direction.
|
|||||||
|
|
||||||
Changes entity's pitch or yaw angle.
|
Changes entity's pitch or yaw angle.
|
||||||
|
|
||||||
|
### `modify(e, 'look', x, y, z), modify(e, 'look', [x,y,z] )`
|
||||||
|
|
||||||
|
Sets entity's 3d vector where the entity is looking.
|
||||||
|
For cases where the vector has a length of 0, yaw and pitch won't get changed.
|
||||||
|
When pointing straight up or down, yaw will stay the same.
|
||||||
|
|
||||||
### `modify(e, 'head_yaw', angle)`, `modify(e, 'body_yaw', angle)`
|
### `modify(e, 'head_yaw', angle)`, `modify(e, 'body_yaw', angle)`
|
||||||
|
|
||||||
For living entities, controls their head and body yaw angle.
|
For living entities, controls their head and body yaw angle.
|
||||||
|
|||||||
@@ -143,6 +143,9 @@ in the output map.
|
|||||||
Functional forms of `-` and `/` have less intuitive multi-nary interpretation, but they might be useful in some situations.
|
Functional forms of `-` and `/` have less intuitive multi-nary interpretation, but they might be useful in some situations.
|
||||||
`x-y-z` resolves to `difference(x, y, z)`.
|
`x-y-z` resolves to `difference(x, y, z)`.
|
||||||
|
|
||||||
|
`/` always produces a properly accurate result, fully reversible with `*` operator. To obtain a integer 'div' result, use
|
||||||
|
`floor(x/y)`.
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
|
|
||||||
<pre>
|
<pre>
|
||||||
@@ -160,11 +163,15 @@ b = [100,63,100]; b+[10,0,10] => [110,63,110]
|
|||||||
|
|
||||||
### Just Operators `%`, `^`
|
### Just Operators `%`, `^`
|
||||||
|
|
||||||
The modulo and exponent (power) operators work only if both operands are numbers
|
The modulo and exponent (power) operators work only if both operands are numbers. `%` is a proper (and useful) 'modulus' operator,
|
||||||
|
not a useless 'reminder' operator that you would expect from anything that touches Java. While typically modulus is reserved
|
||||||
|
to integer numbers, scarpet expands them to floats with as much sense as possible.
|
||||||
|
|
||||||
<pre>pi^pi%euler => 1.124....
|
<pre>pi^pi%euler => 1.124....
|
||||||
-9 % 4 => -1
|
-9 % 4 => 3
|
||||||
9 % -4 => 0 ¯\_(ツ)_/¯ Java
|
9 % -4 => -3
|
||||||
|
9.1 % -4.2 => -3.5
|
||||||
|
9.1 % 4.2 => 0.7
|
||||||
-3 ^ 2 => 9
|
-3 ^ 2 => 9
|
||||||
-3 ^ pi => // Error
|
-3 ^ pi => // Error
|
||||||
</pre>
|
</pre>
|
||||||
|
|||||||
@@ -80,7 +80,7 @@ public class Operators {
|
|||||||
expression.addFunctionalEquivalence("/", "quotient");
|
expression.addFunctionalEquivalence("/", "quotient");
|
||||||
|
|
||||||
expression.addBinaryOperator("%", precedence.get("multiplication*/%"), true, (v1, v2) ->
|
expression.addBinaryOperator("%", precedence.get("multiplication*/%"), true, (v1, v2) ->
|
||||||
new NumericValue(NumericValue.asNumber(v1).getDouble() % NumericValue.asNumber(v2).getDouble()));
|
NumericValue.asNumber(v1).mod(NumericValue.asNumber(v2)));
|
||||||
expression.addBinaryOperator("^", precedence.get("exponent^"), false, (v1, v2) ->
|
expression.addBinaryOperator("^", precedence.get("exponent^"), false, (v1, v2) ->
|
||||||
new NumericValue(java.lang.Math.pow(NumericValue.asNumber(v1).getDouble(), NumericValue.asNumber(v2).getDouble())));
|
new NumericValue(java.lang.Math.pow(NumericValue.asNumber(v1).getDouble(), NumericValue.asNumber(v2).getDouble())));
|
||||||
|
|
||||||
|
|||||||
@@ -1050,7 +1050,22 @@ public class EntityValue extends Value
|
|||||||
updatePosition(e, e.getX(), e.getY(), e.getZ(), e.getYaw(), MathHelper.clamp((float)NumericValue.asNumber(v).getDouble(), -90, 90));
|
updatePosition(e, e.getX(), e.getY(), e.getZ(), e.getYaw(), MathHelper.clamp((float)NumericValue.asNumber(v).getDouble(), -90, 90));
|
||||||
});
|
});
|
||||||
|
|
||||||
//"look"
|
put("look", (e, v) -> {
|
||||||
|
if (!(v instanceof ListValue)) throw new InternalExpressionException("Expected a list of 3 parameters as a second argument");
|
||||||
|
List<Value> vec = ((ListValue)v).getItems();
|
||||||
|
float x = NumericValue.asNumber(vec.get(0)).getFloat();
|
||||||
|
float y = NumericValue.asNumber(vec.get(1)).getFloat();
|
||||||
|
float z = NumericValue.asNumber(vec.get(2)).getFloat();
|
||||||
|
float l = MathHelper.sqrt(x*x + y*y + z*z);
|
||||||
|
if(l==0) return;
|
||||||
|
x /= l;
|
||||||
|
y /= l;
|
||||||
|
z /= l;
|
||||||
|
float pitch = (float) -Math.asin(y) / 0.017453292F;
|
||||||
|
float yaw = (float) (x==0 && z==0 ? e.yaw : MathHelper.atan2(-x,z) / 0.017453292F);
|
||||||
|
updatePosition(e, e.getX(), e.getY(), e.getZ(), yaw, pitch);
|
||||||
|
});
|
||||||
|
|
||||||
//"turn"
|
//"turn"
|
||||||
//"nod"
|
//"nod"
|
||||||
|
|
||||||
|
|||||||
@@ -313,4 +313,14 @@ public class NumericValue extends Value
|
|||||||
{
|
{
|
||||||
return longValue!= null || getDouble() == (double)getLong();
|
return longValue!= null || getDouble() == (double)getLong();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Value mod(NumericValue n2)
|
||||||
|
{
|
||||||
|
if (this.longValue != null && n2.longValue != null)
|
||||||
|
return new NumericValue(Math.floorMod(longValue, n2.longValue));
|
||||||
|
double x = value;
|
||||||
|
double y = n2.value;
|
||||||
|
if (y == 0) throw new ArithmeticException("Division by zero");
|
||||||
|
return new NumericValue( x - Math.floor(x / y) * y);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Reference in new issue
Block a user