Difference between revisions of "LlDetectedTouchPos"

From Second Life Wiki
Jump to navigation Jump to search
m
m
 
(12 intermediate revisions by 6 users not shown)
Line 1: Line 1:
{{Issues/SVC-3425}}{{LSL_Function/detected|index|TouchPos|simple=*}}{{LSL_Function
{{LSL_Function
|inject-2={{Issues/SVC-3425}}{{LSL_Function/detected|index|touchPos|simple=*}}
|func_id=339|func_sleep=0.0|func_energy=10.0
|func_id=339|func_sleep=0.0|func_energy=10.0
|func=llDetectedTouchPos
|func=llDetectedTouchPos
|return_type=vector|return_text=that is the position where the object was touched in {{HoverLink|Viewer coordinate frames#Region|Origin is the origin of the region which "owns" the object.|region coordinates}}, unless it is [[llGetAttached|attached]] to the HUD, in which case it returns the position relative to the [[Viewer coordinate frames#Attachments|attach point]].
|return_type=vector|Return_text=position where the object was touched in {{HoverLink|Viewer coordinate frames#Region|Origin is the origin of the region which "owns" the object.|region coordinates}}, unless it is [[llGetAttached|attached]] to the HUD, in which case it returns the position in screen space coordinates.
|p1_type=integer|p1_name=index
|p1_type=integer|p1_name=index
|func_footnote=For the {{LSLGC|Touch|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.
|func_footnote=For the {{LSLGC|Touch|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.
Line 14: Line 15:
** The event triggered is not a {{LSLGC|Touch|touch}} event.
** The event triggered is not a {{LSLGC|Touch|touch}} event.
|examples=
|examples=
<lsl>
<source lang="lsl2">
default
default
{
{
     touch_start(integer pos_detected)
     touch_start(integer num_detected)
     {
     {
         integer i = 0;
         llWhisper(0, "Pos clicked: " + (string)llDetectedTouchPos(0));
        for(; i<pos_detected; ++i)
            llWhisper(0, "Pos clicked: " + (string)llDetectedTouchPos(i));
     }
     }
}
}
</lsl>
</source>
<source lang="lsl2">
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.
//  This function is intended to be used to move child prims to where the user clicks. This does not work on the root prim.
 
    integer point = llGetAttached();
    vector offset;
 
    if      (point == ATTACH_HUD_TOP_RIGHT)    offset = <1.0, 0.933,-0.5>;
    else if (point == ATTACH_HUD_TOP_CENTER)  offset = <1.0, 0.000,-0.5>;
    else if (point == ATTACH_HUD_TOP_LEFT)    offset = <1.0,-0.933,-0.5>;
    else if (point == ATTACH_HUD_BOTTOM_LEFT)  offset = <1.0,-0.933, 0.5>;
    else if (point == ATTACH_HUD_BOTTOM)      offset = <1.0, 0.000, 0.5>;
    else if (point == ATTACH_HUD_BOTTOM_RIGHT) offset = <1.0, 0.933, 0.5>;
 
    //return (pos - llGetLocalPos()) + (offset * llGetLocalRot());
    return ((offset - llGetLocalPos()) + pos) / llGetLocalRot();
}
</source>
|helpers
|helpers
|related
|related
Line 41: Line 62:
|notes
|notes
|history=*Introduced in Viewer {{SVN|870|rev=92872|branch=Release|anchor=file14|date=Wednesday, 23 July 2008}}.
|history=*Introduced in Viewer {{SVN|870|rev=92872|branch=Release|anchor=file14|date=Wednesday, 23 July 2008}}.
*Server support available in Second Life Server 1.24.7.98039, client support in Release Candidate viewer 1.21.4 (98167).
*Server support available in [[Release_Notes/Second_Life_Server/1.24#Release_Notes_for_Second_Life_Server_1.24.7_.2898039.29_.28October_2nd.2C_2008.29:|Second Life Server 1.24.7.98039]], client support in [[Release_Notes/Second_Life_Release_Candidate/1.21#Release_Notes_for_Second_Life_1.21.284.29_Oct_1st.2C_2008|Release Candidate viewer 1.21.4 (98167)]].
*Date of Release Server [[ Release_Notes/Second_Life_Beta_Server/1.24#Release_Notes_for_Second_Life_Beta_Server_1.24.3_.28August_29th.2C_2008.29 | 29-08-2008 ]]
*Date of Release Client  [[ Release_Notes/Second_Life_Release/1.21 | 16-10-2008 ]]
|cat1=Touch
|cat1=Touch
|cat2
|cat2

Latest revision as of 01:00, 22 January 2015

Summary

Function: vector llDetectedTouchPos( integer index );

Returns the vector 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.

Important Issues

~ All Issues ~ Search JIRA for related Bugs
   For HUDs llDetectedTouchPos does not return positions relative to attach point, position is relative to screen center?

Examples

default
{
    touch_start(integer num_detected)
    {
        llWhisper(0, "Pos clicked: " + (string)llDetectedTouchPos(0));
    }
}
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.
//  This function is intended to be used to move child prims to where the user clicks. This does not work on the root prim.

    integer point = llGetAttached();
    vector offset;

    if      (point == ATTACH_HUD_TOP_RIGHT)    offset = <1.0, 0.933,-0.5>;
    else if (point == ATTACH_HUD_TOP_CENTER)   offset = <1.0, 0.000,-0.5>;
    else if (point == ATTACH_HUD_TOP_LEFT)     offset = <1.0,-0.933,-0.5>;
    else if (point == ATTACH_HUD_BOTTOM_LEFT)  offset = <1.0,-0.933, 0.5>;
    else if (point == ATTACH_HUD_BOTTOM)       offset = <1.0, 0.000, 0.5>;
    else if (point == ATTACH_HUD_BOTTOM_RIGHT) offset = <1.0, 0.933, 0.5>;

    //return (pos - llGetLocalPos()) + (offset * llGetLocalRot());
    return ((offset - llGetLocalPos()) + pos) / llGetLocalRot();
}

See Also

Deep Notes

History

All Issues

~ Search JIRA for related Issues
   For HUDs llDetectedTouchPos does not return positions relative to attach point, position is relative to screen center?

Signature

function vector llDetectedTouchPos( integer index );