De DigiWiki.
default {
touch_start(integer num_detected) {
integer i = 0;
for(; i < num_detected; ++i ) {
vector touchedpos = llDetectedTouchST(i);
if (llDetectedTouchFace(i) == -1) {
llWhisper(0, "Sorry, your viewer doesn't support touched faces.");
}
else if ( touchedpos == TOUCH_INVALID_TEXCOORD ) {
llWhisper(0, "Sorry, the surface touch position could not be determined.");
}
else {
llWhisper(0, (string) touchedpos);
}
} // while ...
} // touch_start
}
vector touchedLoc;
default {
//Draws a cross-hair at the detected Location on the detected face.
touch(integer num_detected) {
integer i;
for (i = 0; i < num_detected; i++) {
touchedLoc = llDetectedTouchST(i); //What location has been touched?
llSetPrimitiveParams([PRIM_TEXTURE, llDetectedTouchFace(i), "5ac7995c-4c24-8b60-ae61-6a837619dc75",
<1.0,1.0,0.0>, touchedLoc, 180*DEG_TO_RAD]); //Set the Texture Location at the touched location
}
}
}
// Sets a grid of WIDTH by HEIGHT and returns a unique number.
// The cases of the grid are numbered line by line, left to right,
// starting from the bottom.
integer WIDTH = 12;
integer HEIGHT = 12;
// With a grid of 12x12 (144 cases), you get a number from 0 to 143.
default
{
touch_start(integer total_number)
{
vector st = llDetectedTouchST(0);
integer x = llFloor(st.x * WIDTH);
integer y = llFloor(st.y * HEIGHT);
integer button = (y * WIDTH) + x;
llOwnerSay("(" + (string)x + "," + (string)y + ") --> " + (string)button);
}
}