LlDetectedTouchST
Looking for the current API? Open the llDetectedTouchST reference →
Function notes
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.
Return value notes
Returns a vector that is the surface coordinates for where the prim was touched. The
x & y vector positions contain the horizontal (s) & vertical (t) face coordinates respectively (<s, t, 0.0>). Each component is usually in the interval [0.0, 1.0] with the origin in the bottom left corner. With some mesh objects, values of less than 0.0 and higher than 1.0 have been observed.TOUCH_INVALID_TEXCOORD is returned when the surface coordinates cannot be determined. See Caveats for further details.
Caveats
- TOUCH_INVALID_TEXCOORD is returned when...
- The avatar's viewer does not support face touch detection.
- To check if face touch detection is supported check the return of llDetectedTouchFace.
- The touch has moved off the surface of the prim.
- The touch happened too close to the edge of the face to determine a location.
- The event triggered is not a touch event.
- The avatar's viewer does not support face touch detection.
- The vertical coordinate is flipped on a glTF mesh.
Examples
default
{
touch_start(integer total_number)
{
integer touchFace = llDetectedTouchFace(0);
vector touchST = llDetectedTouchST(0);
// ZERO_VECTOR (<0.0, 0.0, 0.0> ... the origin) is in the bottom left corner of the face
// touchST.x goes across the face from the left to the right
// touchST.y goes up the face from the bottom to the top
if (touchFace == -1)
llWhisper(PUBLIC_CHANNEL, "Sorry, your viewer doesn't support touched faces.");
else if (touchST == TOUCH_INVALID_TEXCOORD)
llWhisper(PUBLIC_CHANNEL, "Sorry, the touch position upon the face could not be determined.");
else
llSay(PUBLIC_CHANNEL, "llDetectedTouchST(0) = " + (string)touchST
+ "\ntouchST.x = " + (string)touchST.x
+ "\ntouchST.y = " + (string)touchST.y);
}
}The following script will assume an (imaginary) 12x12 grid over the face, and identify which square was touched by the user.
integer numberOfRows = 12;
integer numberOfColumns = 12;
default
{
touch_start(integer total_number)
{
vector touchST = llDetectedTouchST(0);
// ZERO_VECTOR (<0.0, 0.0, 0.0> ... the origin) is in the bottom left corner of the face
// touchST.x goes across the face from the left to the right
// touchST.y goes up the face from the bottom to the top
integer columnIndex = (integer) (touchST.x * numberOfColumns);
integer rowIndex = (integer) (touchST.y * numberOfRows);
integer cellIndex = (rowIndex * numberOfColumns) + columnIndex;
llSay(PUBLIC_CHANNEL, "ST grid (" + (string)columnIndex + ", " + (string)rowIndex
+ ") --> cell " + (string)cellIndex);
}
}// with friendly permission of Supremius Maximus
// who made the texture used in this script
//
// click & hold the mouse while dragging across
// the face of the prim
default
{
touch(integer num_detected)
{
integer link = llDetectedLinkNumber(0);
integer face = llDetectedTouchFace(0);
vector touchST = llDetectedTouchST(0);
// ZERO_VECTOR (<0.0, 0.0, 0.0> ... the origin) is in the bottom left corner of the face
// touchST.x goes across the face from the left to the right
// touchST.y goes across the face from the bottom to the top
string uuid = "23badbe7-6d8c-639b-0131-bb321f8e9db5";
llSetLinkPrimitiveParamsFast(link, [
PRIM_TEXTURE, face, uuid, <1.0, 1.0, 0.0>, touchST, 0,
PRIM_FULLBRIGHT, ALL_SIDES, TRUE]);
}
}See also: functions
See also: events
History
- Introduced in Viewer SVN:870 r92872 Branch:Release Wednesday, 23 July 2008, Supported by Beta Server 1.24.0.93754 (Wenesday 6th August 2008), and viewer binary 1.20.15 (93532).
- Date of Release Server 29-08-2008
- Date of Release Client 16-10-2008
Shared wiki helpers
The original page also injects shared parameter notes, caveats or issue information through these helpers. Their conditional MediaWiki logic is not reproduced here; inspect the preserved helper source for additional material.
Template:LSL Function/detected
Original shared helper source (conditional wiki logic is not evaluated)
{{LSL Injection Test}}{{#if:
{{#vardefine:p_{{{1|none}}}_desc|Index of detection information}}
{{#vardefine:p_{{{1|none}}}_hover|Index of detection information}}
{{LSL_Function/negative_index|false|{{{1|none}}}|oob-return={{{error|}}}}}
{{#vardefine:also_articles|{{#var:also_articles}}
{{LSL DefineRow||{{LSLGC|Detected}}|}}}}
{{#vardefine:spec|{{#if:{{{simple|}}}|{{#var:spec}}|{{#if:{{#var:spec}}|{{#var:spec}}{{PBR}}}}
{{LSLGC|Detected|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:{{{simple|}}}||{{#vardefine:caveats|{{#var:caveats}}
*Events that enable the {{LSLGC|Detected|llDetected*}} functions always return at least one detected item.
**Detection events are not raised if there is nothing detected.{{Footnote|The exception is [[no_sensor]] but it doesn't enable {{LSLGC|Detected|llDetected*}} functions.|The exception is no_sensor but it doesn't enable llDetected* functions.}}
**The detection event's items detected parameter is initially never less than 1.{{Footnote|Like all event parameters, the user can overwrite the initial value.}}}}}}
<includeonly>
{{#ifeq:{{#var:article-type}}|event||{{#if:{{#pos:{{#var:moded}}|r}}{{#pos:{{#var:moded}}|u}}||{{#vardefine:hidden-text|{{#var:hidden-text}}
{{LSLC|Detected|{{{2}}}|{{#var:lang}}}}
}}}}}}
</includeonly>
}}<includeonly></includeonly><noinclude>
{| {{Prettytable}}
|-{{Hl2}}
! #var
! value
|-
{{VarPair|header_footnote}}
|-
{{VarPair|constants_nb}}
|-
{{VarPairTable|also_articles}}
|-
{{VarPair|p_{{{1|none}}}_desc}}
|-
{{VarPair|p_{{{1|none}}}_hover}}
|-
{{VarPair|spec}}
|-
{{VarPair|caveats}}
|}
</noinclude>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.