diff options
Diffstat (limited to 'doc/lua_api.txt')
-rw-r--r-- | doc/lua_api.txt | 34 |
1 files changed, 29 insertions, 5 deletions
diff --git a/doc/lua_api.txt b/doc/lua_api.txt index fd4e2d3e5..9872f09ac 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -1609,6 +1609,8 @@ Exact pointing location (currently only `Raycast` supports these fields): * `pointed_thing.intersection_normal`: Unit vector, points outwards of the selected selection box. This specifies which face is pointed at. Is a null vector `vector.zero()` when the pointer is inside the selection box. + For entities with rotated selection boxes, this will be rotated properly + by the entity's rotation - it will always be in absolute world space. @@ -7075,6 +7077,8 @@ child will follow movement and rotation of that bone. * `set_rotation(rot)` * `rot` is a vector (radians). X is pitch (elevation), Y is yaw (heading) and Z is roll (bank). + * Does not reset rotation incurred through `automatic_rotate`. + Remove & readd your objects to force a certain rotation. * `get_rotation()`: returns the rotation, a vector (radians) * `set_yaw(yaw)`: sets the yaw in radians (heading). * `get_yaw()`: returns number in radians @@ -7554,6 +7558,22 @@ It can be created via `Raycast(pos1, pos2, objects, liquids)` or * `liquids`: if false, liquid nodes (`liquidtype ~= "none"`) won't be returned. Default is false. +### Limitations + +Raycasts don't always work properly for attached objects as the server has no knowledge of models & bones. + +**Rotated selectionboxes paired with `automatic_rotate` are not reliable** either since the server +can't reliably know the total rotation of the objects on different clients (which may differ on a per-client basis). +The server calculates the total rotation incurred through `automatic_rotate` as a "best guess" +assuming the object was active & rotating on the client all the time since its creation. +This may be significantly out of sync with what clients see. +Additionally, network latency and delayed property sending may create a mismatch of client- & server rotations. + +In singleplayer mode, raycasts on objects with rotated selectionboxes & automatic rotate will usually only be slightly off; +toggling automatic rotation may however cause errors to add up. + +In multiplayer mode, the error may be arbitrarily large. + ### Methods * `next()`: returns a `pointed_thing` with exact pointing location @@ -7670,11 +7690,15 @@ Player properties need to be saved manually. collide_with_objects = true, -- Collide with other objects if physical = true - collisionbox = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5}, - selectionbox = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5}, - -- Selection box uses collision box dimensions when not set. - -- For both boxes: {xmin, ymin, zmin, xmax, ymax, zmax} in nodes from - -- object position. + collisionbox = { -0.5, -0.5, -0.5, 0.5, 0.5, 0.5 }, -- default + selectionbox = { -0.5, -0.5, -0.5, 0.5, 0.5, 0.5, rotate = false }, + -- { xmin, ymin, zmin, xmax, ymax, zmax } in nodes from object position. + -- Collision boxes cannot rotate, setting `rotate = true` on it has no effect. + -- If not set, the selection box copies the collision box, and will also not rotate. + -- If `rotate = false`, the selection box will not rotate with the object itself, remaining fixed to the axes. + -- If `rotate = true`, it will match the object's rotation and any attachment rotations. + -- Raycasts use the selection box and object's rotation, but do *not* obey attachment rotations. + pointable = true, -- Whether the object can be pointed at |