mirror of
https://github.com/luanti-org/luanti.git
synced 2025-07-22 17:18:39 +00:00
Allow rotating entity selectionboxes (#12379)
This commit is contained in:
parent
b829231992
commit
077627181e
18 changed files with 271 additions and 58 deletions
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue