Difference between revisions of "LlSensorRemove"
Jump to navigation
Jump to search
(Removed redundant no_sensor event) |
|||
Line 9: | Line 9: | ||
|caveats=*If called within the [[sensor]] event then it also removes all of the sensor data that is accessed by the {{LSLGC|Detected|detection}} functions. | |caveats=*If called within the [[sensor]] event then it also removes all of the sensor data that is accessed by the {{LSLGC|Detected|detection}} functions. | ||
|constants | |constants | ||
|examples=<lsl> | |examples=The following basic example shows an object that when touched starts scanning for avatars in 10m every 30 seconds, and stops as soon as at least one is found, and returns their name. | ||
default | <lsl>default { | ||
{ | touch_start(integer x) { | ||
llSensorRepeat("", NULL_KEY, AGENT, 10.0, PI, 30.0); | |||
llSensorRepeat("", | |||
} | } | ||
sensor(integer | |||
sensor(integer x) { | |||
key id = llDetectedKey(0); | |||
llSensorRemove(); | string name = llGetDisplayName(id); | ||
if (("" == name) || ("???" == name)) name = llDetectedName(0); | |||
llSay(PUBLIC_CHANNEL, name + " was found first!"); | |||
llSensorRemove(); | |||
} | } | ||
} | }</lsl> | ||
</lsl> | The next example is a more real-world example of a scanner that when touched will begin listing avatar names and distances, but will stop if no avatars are detected. It demonstrates the use of [[llSensor]]() when starting the scan, to avoid the initial delay of an [[llSensorRepeat]]() call. | ||
<lsl>integer scanning = FALSE; | |||
default { | |||
touch_start(integer x) { | |||
llSensor("", NULL_KEY, AGENT, 10.0, PI); // Start the scan | |||
} | |||
sensor(integer x) { | |||
string text = ""; vector myPos = llGetPos(); | |||
// Loop through avatars from furthest to nearest | |||
while ((--x) >= 0) { | |||
key id = llDetectedKey(x); | |||
// Get display name, or use legacy name as a fallback | |||
string name = llGetDisplayName(id); | |||
if (("" == name) || ("???" == name)) name = llDetectedName(x); | |||
// Add distance to the name | |||
name += " (" + (string)((integer)llVecDist(myPos, llDetectedPos(x))) + "m)"; | |||
if (text) name = "\n" + name; | |||
text += name; | |||
} | |||
llSetText(text, <1.0, 1.0, 1.0>, 1.0); | |||
if (!scanning) { | |||
// Repeat the scan every 30 seconds | |||
llSensorRepeat("", NULL_KEY, AGENT, 10.0, PI, 30.0); | |||
scanning = TRUE; | |||
} | |||
} no_sensor() { | |||
// No avatars nearby, lets turn off the scan | |||
llSetText("", ZERO_VECTOR, 0.0); | |||
llSensorRemove(); | |||
scanning = FALSE; | |||
} | |||
}</lsl> | |||
|helpers | |helpers | ||
|also_functions= | |also_functions= |
Revision as of 03:48, 15 September 2012
LSL Portal | Functions | Events | Types | Operators | Constants | Flow Control | Script Library | Categorized Library | Tutorials |
Summary
Function: llSensorRemove( );30 | Function ID |
0.0 | Forced Delay |
10.0 | Energy |
Removes the sensor setup by llSensorRepeat.
There are no parameters or return value for this function, as only one llSensorRepeat can be specified per script.
Caveats
Examples
The following basic example shows an object that when touched starts scanning for avatars in 10m every 30 seconds, and stops as soon as at least one is found, and returns their name. <lsl>default {
touch_start(integer x) { llSensorRepeat("", NULL_KEY, AGENT, 10.0, PI, 30.0); }
sensor(integer x) { key id = llDetectedKey(0); string name = llGetDisplayName(id);if (("" == name)