llDetectedGrab

From Second Life Wiki
Revision as of 18:08, 23 July 2011 by Incoherendt Randt (talk | contribs) (spec, example)
Jump to navigation Jump to search

Summary

Function: vector llDetectedGrab( integer number );

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

• integer number Index of detection information

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

Specification

llDetected* functions only work if called from within Detection events (collision, collision_start, collision_end, sensor, touch, touch_start, touch_end) or in functions called by Detection events. They will fail silently and return unusable values if called during other events.

  • 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.

Caveats

  • If number is out of bounds this function returns <0.0, 0.0, 0.0> and the script continues to execute without an error message.
  • Events that enable the llDetected* functions always return at least one detected item.
    • Detection events are not raised if there is nothing detected.[1]
    • The detection event's items detected parameter is initially never less than 1.[2]
All Issues ~ Search JIRA for related Bugs

Examples

<lsl> 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.
   }

} </lsl>

<lsl>/******

Simple llDetectedGrab illustration, rez a prim and add this script. The prim will become a cone that follows mouse grabs.

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 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);
   }
}</lsl>

Notes

llDetectedGrab() is not blocked by STATUS_BLOCK_GRAB or STATUS_BLOCK_GRAB_OBJECT.

See Also

Events

•  touch_start
•  touch
•  touch_end

Functions

•  llPassTouches

Articles

•  Detected
•  Grab

Deep Notes

Search JIRA for related Issues

Footnotes

  1. ^ The exception is no_sensor but it doesn't enable llDetected* functions.
  2. ^ Like all event parameters, the user can overwrite the initial value.

Signature

function vector llDetectedGrab( integer number );