Jump to content

LlDetectedRot

From OSgrid Wiki
Revision as of 17:50, 30 December 2017 by Osgridadmin (talk | contribs) (Created page with "==Function: rotation llDetectedRot( integer number );== Returns a rotation that is the rotation of detected object number. <br> • integer number – Index of detection in...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Function: rotation llDetectedRot( integer number );

Returns a rotation that is 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 can be called anywhere but will only return non-default values if called from within Detection events and functions called by Detection events.

Caveats
• Events that enable the llDetected* functions always return at least one detected item.
-• Detection events are not raised if there is nothing detected (with the slight exception of no_sensor but it doesn't enable llDetected* functions).
-• The event detection count parameter value is initially never less than 1.

Examples

<source lang="lsl">

//--// get compass facing of Avatar that touches this object //--// //-- @@ = Contains code optimizations, see the following page for details //-- wiki.secondlife.com/wiki/User:Void_Singer/Optimizations //-- list of compass directions starting at North, rotated clockwise

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

//-- 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 );
 }

} </source>