Difference between revisions of "LlDetectedRot"

From Second Life Wiki
Jump to navigation Jump to search
m (optimization and link to explanation added to my previous example)
Line 1: Line 1:
{{LSL_Function/negative_index|false|number}}{{LSL_Function
{{LSL_Function/detected|number|rot}}{{LSL_Function
|func_id=38|func_sleep=0.0|func_energy=10.0
|func_id=38|func_sleep=0.0|func_energy=10.0
|sort=DetectedRot
|sort=DetectedRot
Line 62: Line 62:
|also_functions
|also_functions
|also_events
|also_events
|also_articles={{LSL DefineRow||{{LSLGC|Detected}}|}}
|also_articles
|notes
|notes
|permission
|permission
Line 69: Line 69:
|cat3
|cat3
|cat4
|cat4
}}{{LSLC|Detected|rot}}
}}

Revision as of 10:51, 14 November 2007

Summary

Function: rotation llDetectedRot( integer number );
0.0 Forced Delay
10.0 Energy

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 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 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]

Examples

//--// get compass facing of Avatar that touches this object //--//

//-- @@ = Contains code optimizations, see the following page for details
//-- wiki.secondlife.com/wiki/User_talk:Void_Singer#Coding_Practices_Part_2_.28optimizations.29

 //-- list of compass directions starting after West, rotated counterclockwise
list gLstCompassPoints = ["SouthWest","South","SouthEast","East","NorthEast","North","NorthWest"];

 //-- convert rotation to z-axis compass direction
string vfCompassDirection( rotation vRotBase )
{
   //-- convert rotation to dgrees
  vector vVecBase = llRot2Euler( vRotBase ) * RAD_TO_DEG;
   //-- covert to range [0, 360)
  vVecBase.z += 180;
  if ( vVecBase.z < 22.5 || vVecBase.z > 337.5)
  {
    return "West";
  }
  else
  {
     //--ofset to the end or west range
    vVecBase.z -= 22.5;
     //-- divide by range (45 deg) and round to get index of direction
    return llList2String( gLstCompassPoints, llRound( vVecBase.z - 11.25 ) / 45 );
  }
}

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
             + vfCompassDirection( llDetectedRot( vIntCounter ) ) );
    }while ( ++vIntCounter < vIntTouchCount ); //-- @@
  }
}
Void Singer 00:58, 15 October 2007 (PDT)

See Also

Articles

•  Detected

Deep Notes

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