Modify look (#848)

* Added modify(e,'look',...

* Added modify(e,'look',...

* Not change yaw and pitch if vector length is 0 or straight up/down

* Added to docs

* Update docs/scarpet/api/Entities.md

Co-authored-by: gnembon <41132274+gnembon@users.noreply.github.com>
This commit is contained in:
replaceitemandgnembon authored and GitHub committed 2021-05-09 15:14:05 -03:00
1 parent 47f8e0d26b
commit 6a06b0fb61
2 files changed
+22 -1

No files matched your search

+6
View File
@@ -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.
@@ -1034,7 +1034,22 @@ public class EntityValue extends Value
updatePosition(e, e.getX(), e.getY(), e.getZ(), e.yaw, MathHelper.clamp((float)NumericValue.asNumber(v).getDouble(), -90, 90)); updatePosition(e, e.getX(), e.getY(), e.getZ(), e.yaw, 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"