// Basic Radar // Created by Water Rogers for IBM/Opensource // Purpose // -------------------------------------------------------------- // This is a basic example of how you can create a simple radar // to detect Avatars within a given distance around the object // that this script resides in. Names will be viewed above the // object along with distance (in meters). // Requirements // -------------------------------------------------------------- // A single prim is all that is necessary for this example. // GLOBAL VARIABLES // -------------------------------------------------------------- float g_Range = 96.0; // The range of the sensor in meters float g_Arc = PI; // The arc of the sensor float g_Rate = 1.0; // The repeat rate of the sensor in seconds vector g_TextColor = <1,1,1>; // Text color <1,1,1> = White // EVENTS // -------------------------------------------------------------- default { state_entry() { // ------------------------------------------------------ // This is the entry-point of the script. After a script // has been saved or reset, this event will fire off first // ------------------------------------------------------ // We call llSetText() first to "clear" the text above the object // passing an empty string into the text parameter. llSetText("", g_TextColor, TRUE); // We then call the llSensorRepeat() function to start detecting // avatars. This function will raise the sensor() event handle // at a rate of g_Rate seconds. llSensorRepeat("", NULL_KEY, AGENT, g_Range, g_Arc, g_Rate); // Since we passed an empty string and key value to the sensor, // this tells the sensor that we want to look for any name with // any key as long as it's an AGENT, which is a fancy name for // Avatar. If we wanted to look for a specific person only, we // could simply pass their name and/or key into these arguments. } sensor(integer num_detected) { // ------------------------------------------------------ // This event will fire off at the rate of g_Rate in seconds // after being called by either llSensor() or llSensorRepeat() // ------------------------------------------------------ // First we start out by declaring a local variable "output". This // variable will store information we want in a string until we // are ready to display it at the end. string output; // The next variable sets up the for loop integer x; // This next section will loop through each one of the num_detected // items properly sensed (in this case, it will be AGENTS or Avatars) // and store the results into the output string. for(x = 0 ; x < num_detected ; x++) { // Using llVecDist(), we can quickly figure out the distance // between 2 objects in 3D space. To make it more readable, we // store it as an integer so it truncates any decimal placements integer distance = (integer)llVecDist(llGetPos(), llDetectedPos(x)); output += llDetectedName(x) + " (" + (string)distance + "m)\n"; // output += llDetectedName(x)... // is the same as using // output = output + llDetectedName(x)... // The "\n" at the end is an escape sequence used for llSetText() // to declare a new line. } // When we have all the information collected, we can display it // above the object using llSetText() llSetText(output, g_TextColor, TRUE); } }