Difference between revisions of "LlDetectedTouchPos"

From Second Life Wiki
Jump to navigation Jump to search
Line 23: Line 23:
             llWhisper(0, "Pos clicked: " + (string)llDetectedTouchPos(i));
             llWhisper(0, "Pos clicked: " + (string)llDetectedTouchPos(i));
     }
     }
}
</lsl>
<lsl>
vector GetRealTouchPos(vector pos)
{
    //By Ariu Arai for free use to anyone
    //Returns a useful HUD Position Vector from the llDetectedTouchPos(); function
    //USE: vector pos = GetRealTouchPos(llDetectedTouchPos(0)); .. Etc.
    //Only works on child prims
   
    integer point = llGetAttached();
    vector offset;
   
    if(point == ATTACH_HUD_TOP_RIGHT)offset = <-.933,0,.5>;
    else if(point == ATTACH_HUD_TOP_CENTER)offset = <0,0,.5>;
    else if(point == ATTACH_HUD_TOP_LEFT)offset = <.933,0,.5>;
    else if(point == ATTACH_HUD_BOTTOM_LEFT)offset = <.933,0,-.5>;
    else if(point == ATTACH_HUD_BOTTOM)offset = <0,0,-.5>;
    else if(point == ATTACH_HUD_BOTTOM_RIGHT)offset = <-.933,0,-.5>;
   
    return ((pos - llGetLocalPos()) / llGetLocalRot()) - offset;
}
}
</lsl>
</lsl>

Revision as of 09:03, 5 August 2010

Summary

Function: vector llDetectedTouchPos( integer index );
0.0 Forced Delay
10.0 Energy

Returns a vector that is the position where the object was touched in region coordinates, unless it is attached to the HUD, in which case it returns the position in screen space coordinates.

• integer index Index of detection information

index does not support negative indexes. For the touch category of events only. The prim that was touched may not be the prim receiving the event, use llDetectedLinkNumber to check for this; likewise you can use llDetectedTouchFace to determine which face was touched.

Caveats

  • HUD attachments currently return coordinates relative to the center of the screen rather than the attachment point. SVC-3425
  • If index is out of bounds the script continues to execute without an error message.
  • TOUCH_INVALID_VECTOR is returned when...
    • The avatar's viewer does not support face touch detection.
    • The touch has moved off the surface of the prim.
    • The event triggered is not a touch event.

Examples

<lsl> default {

   touch_start(integer pos_detected)
   {
       integer i = 0;
       for(; i<pos_detected; ++i)
           llWhisper(0, "Pos clicked: " + (string)llDetectedTouchPos(i));
   }

} </lsl> <lsl> vector GetRealTouchPos(vector pos) {

   //By Ariu Arai for free use to anyone
   //Returns a useful HUD Position Vector from the llDetectedTouchPos(); function
   //USE: vector pos = GetRealTouchPos(llDetectedTouchPos(0)); .. Etc.
   //Only works on child prims
   
   integer point = llGetAttached();
   vector offset;
   
   if(point == ATTACH_HUD_TOP_RIGHT)offset = <-.933,0,.5>;
   else if(point == ATTACH_HUD_TOP_CENTER)offset = <0,0,.5>;
   else if(point == ATTACH_HUD_TOP_LEFT)offset = <.933,0,.5>;
   else if(point == ATTACH_HUD_BOTTOM_LEFT)offset = <.933,0,-.5>;
   else if(point == ATTACH_HUD_BOTTOM)offset = <0,0,-.5>;
   else if(point == ATTACH_HUD_BOTTOM_RIGHT)offset = <-.933,0,-.5>;
   
   return ((pos - llGetLocalPos()) / llGetLocalRot()) - offset;

}

</lsl>

See Also

Deep Notes

History

Signature

function vector llDetectedTouchPos( integer index );