llDetectedRot

From Second Life Wiki
Revision as of 04:56, 24 January 2013 by Omei Qunhua (talk | contribs) (Remove reference to blanked page)
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Summary

Function: rotation llDetectedRot( integer number );

Returns the rotation of detected object number.

• integer number Index of detection information

number does not support negative indexes. Returns <0.0, 0.0, 0.0, 1.0> if number is not valid sensed object.

Specification

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.

Caveats

  • If number is out of bounds this function returns <0.0, 0.0, 0.0, 1.0> and the script continues to execute without an error message.
  • Events that enable the llDetected* functions always return at least one detected item.
    • Detection events are not raised if there is nothing detected.[1]
    • The detection event's items detected parameter is initially never less than 1.[2]
All Issues ~ Search JIRA for related Bugs

Examples

<lsl>//--// get compass facing of Avatar that touches this object //--//

//-- list of compass directions starting at East, rotated clockwise

list gLstCompassPoints = [ "East", "NorthEast", "North", "NorthWest", "West", "SouthWest", "South", "SouthEast" ];

//-- convert rotation to z-axis compass direction

string CompassDirection( rotation rRotBase ) {

 integer iCountCompassPoints = llGetListLength(gLstCompassPoints);
  //-- convert rotation to a direction
 vector vDirection = <0.0, 1.0, 0.0> / rRotBase;
  //-- take the direction and determine the z rotation
 float fAngle = llAtan2(vDirection.x, vDirection.y);
  //-- take the angle and find the compass point
 integer iCompassPoint = llRound(fAngle * iCountCompassPoints / TWO_PI);
  //-- convert to string
 return llList2String( gLstCompassPoints, iCompassPoint );

}

default{

 state_entry()
 {
   llSay( 0, "Touch me to get your compass facing" );
 }
 touch_start( integer vIntTouchCount )
 {
   integer vIntCounter = 0;
   do
   {
     llSay( 0,
            llDetectedName( vIntCounter )
            + " is facing "
             //-- next line gets avatar rotation and converts to compass direction
            + CompassDirection( llDetectedRot( vIntCounter ) ) );
   } while ( ++vIntCounter < vIntTouchCount );
 }
}</lsl>

See Also

Articles

•  Detected

Deep Notes

Search JIRA for related Issues

Footnotes

  1. ^ The exception is no_sensor but it doesn't enable llDetected* functions.
  2. ^ Like all event parameters, the user can overwrite the initial value.

Signature

function rotation llDetectedRot( integer number );