Skip to content
lsl.devlsl.devLSL Dev

llDetectedGrab

function
Function syntax
vector llDetectedGrab(
  1. integer number// Index of the detection information.
);
Returns
vector
Energy
10

Returns <0.0, 0.0, 0.0> if number is out of range or if called from an event other than the touch event.

Returns a vector that is the grab offset of the user touching the object; only works in the touch event.

How to use
vector result = llDetectedGrab(0);
  • If the object is physical, grabs are detected if the avatar has permission to move the object and the object is not locked.
  • If the object is nonphysical, grabs from all avatars are detected.
  • When called in HUD attachments, values returned are affected by the wearer’s position and rotation.
Example 1
default
{
state_entry()
{
llSetStatus(PRIM_PHYSICS,TRUE);//This allows the object to be "grabbed" and dragged
}
touch(integer num_detected)
{
llSay(0,(string)llDetectedGrab(0));//Be prepared for a great amount of chatted info.
//The faster you move the mouse while grabbing the object the greater the offset becomes.
//This is not due to the speed but the reaction time of the turn around of the physical prim,
//thus an offset (distance from grab to prim center) is created and measured by this function.
}
}
Example 2
/******
Simple llDetectedGrab illustration, rez a prim and add this script.
The prim will become a cone that follows mouse grabs.
20 collapsed lines
Click and hold the mouse button down on the object, then:
- Drag left and right to move parallel to the camera focal plane.
- Drag up and down to move to and from the camera.
- Hold down Ctrl, then drag up and down to move vertically.
******/
default
{
state_entry()
{
llMinEventDelay(0.25);
llSetStatus(STATUS_PHYSICS, FALSE); // make the object static for simplicity
llSetPrimitiveParams([
PRIM_SIZE, <0.5, 0.5, 0.5>,
PRIM_TYPE, PRIM_TYPE_CYLINDER, PRIM_HOLE_DEFAULT, <0.0, 1.0, 0.0>,
0.0, ZERO_VECTOR, ZERO_VECTOR, ZERO_VECTOR
]); // a cone that can follow the mouse pointer
}
touch(integer total_number)
{
llLookAt(llGetPos() + llDetectedGrab(0), 1.0, 1.0);
}
}

llDetectedGrab() is not blocked by STATUS_BLOCK_GRAB or STATUS_BLOCK_GRAB_OBJECT.

Original wiki source

Some wiki templates and tables need their original context. View this article on the Second Life Wiki. Technical wording and examples are retained from the source; historical guidance may differ from current behavior.