<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.secondlife.com/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Euler2Rot+Resident</id>
	<title>Second Life Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.secondlife.com/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Euler2Rot+Resident"/>
	<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/wiki/Special:Contributions/Euler2Rot_Resident"/>
	<updated>2026-07-28T04:25:10Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Touch&amp;diff=1200159</id>
		<title>Touch</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Touch&amp;diff=1200159"/>
		<updated>2016-05-20T22:30:46Z</updated>

		<summary type="html">&lt;p&gt;Euler2Rot Resident: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Event|event_id=3|event_delay|event=touch&lt;br /&gt;
|p1_type=integer|p1_name=num_detected|p1_desc&lt;br /&gt;
|event_desc=Triggered whilst an agent is clicking the task. It will continue to be triggered until the the prim/object is stopped being clicked (it triggers multiple times).&lt;br /&gt;
Triggered on touch start, each minimum event delay while held, and touch end.&lt;br /&gt;
|constants&lt;br /&gt;
|spec&lt;br /&gt;
|caveats=* If a prim [[face]] has [[Navigating Shared Media|Shared Media]] enabled and the avatar&#039;s viewer supports this feature, LSL scripts will not detect touches on that face. Touches from older clients will be detected.&lt;br /&gt;
|notes=*On clicking a prim with touch events we trigger touch_start (on first contact), touch (during) and touch_end (as released). &lt;br /&gt;
&lt;br /&gt;
|examples=You can use numbers 0 through (num_detected-1) with the various llDetected... functions to get detected agent keys etc. For most purposes, it is adequate to bother only with the first detected toucher e.g. llDetectedKey(0). It is rare (but not impossible) for num_detected to be other than 1.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;default&lt;br /&gt;
{&lt;br /&gt;
     touch(integer num_detected)&lt;br /&gt;
     {&lt;br /&gt;
          llOwnerSay(&amp;quot;I am being touched by &amp;quot; + llDetectedName(0) + &amp;quot;.&amp;quot;);&lt;br /&gt;
     }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This next example demonstrates detecting when the owner of the object clicks-and-holds on the object for 1 second in order perhaps to access a management menu or similar, Normal brief clicks are distinguished.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    touch_start(integer num_detected)&lt;br /&gt;
    {&lt;br /&gt;
	llResetTime();&lt;br /&gt;
    }&lt;br /&gt;
    touch(integer num_detected)&lt;br /&gt;
    {&lt;br /&gt;
	if (llDetectedKey(0) == llGetOwner() &amp;amp;&amp;amp; llGetTime() &amp;gt; 1.0)&lt;br /&gt;
	{&lt;br /&gt;
	    // The owner has touched this object for longer than 1 second&lt;br /&gt;
	    // execute some special feature such as issuing a management dialog&lt;br /&gt;
	    // ...&lt;br /&gt;
	}&lt;br /&gt;
    }&lt;br /&gt;
    touch_end(integer num_detected)&lt;br /&gt;
    {&lt;br /&gt;
	if (llGetTime() &amp;lt;= 1.0)&lt;br /&gt;
	{&lt;br /&gt;
	    // The user did a normal quick click on the object&lt;br /&gt;
	    // execute actions for normal clicks&lt;br /&gt;
	    // ...&lt;br /&gt;
	}&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Clicking and holding can&#039;t be used to call a menu since the menu will pop out continuosly.&lt;br /&gt;
Use a flag to avoid this.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
integer touched;  &lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
    touch_start(integer n)&lt;br /&gt;
    {&lt;br /&gt;
        touched = FALSE;//HERE, before llResetTime() otherwise it doesn&#039;t run        &lt;br /&gt;
        llResetTime();&lt;br /&gt;
    }    &lt;br /&gt;
            &lt;br /&gt;
    touch(integer n)&lt;br /&gt;
    {&lt;br /&gt;
        if (llGetTime() &amp;gt; 1.0 &amp;amp;&amp;amp; touched == FALSE)&lt;br /&gt;
            {     &lt;br /&gt;
                //Call here the menu&lt;br /&gt;
                touched = TRUE;                &lt;br /&gt;
            }        &lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    touch_end(integer n)&lt;br /&gt;
    {&lt;br /&gt;
        if (llGetTime() &amp;lt;= 1.0)&lt;br /&gt;
            {        &lt;br /&gt;
	        //Do something&lt;br /&gt;
            }                  &lt;br /&gt;
    }    &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|helpers&lt;br /&gt;
|also_header&lt;br /&gt;
|also_events=&lt;br /&gt;
{{LSL DefineRow||[[touch_start]]|}}&lt;br /&gt;
{{LSL DefineRow||[[touch_end]]|}}&lt;br /&gt;
|also_functions=&lt;br /&gt;
{{LSL DefineRow||[[llSetTouchText]]|Set the pie menu&#039;s text for touch-action}}&lt;br /&gt;
{{LSL DefineRow||[[llPassTouches]]|Allows clicks captured by a child prim to be passed to the root as well}}&lt;br /&gt;
|also_articles&lt;br /&gt;
|also_footer&lt;br /&gt;
|notes&lt;br /&gt;
|mode&lt;br /&gt;
|deprecated&lt;br /&gt;
|cat1=Touch&lt;br /&gt;
|cat2=Detected&lt;br /&gt;
|cat3=Grab&lt;br /&gt;
|cat4=Passable&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Euler2Rot Resident</name></author>
	</entry>
</feed>