Difference between revisions of "LlDetectedRot"

From Second Life Wiki
Jump to navigation Jump to search
m (Added Example)
m (optimization and link to explanation added to my previous example)
Line 12: Line 12:
<pre>
<pre>
//--// get compass facing of Avatar that touches this object //--//
//--// 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 of compass directions starting after West, rotated counterclockwise
Line 17: Line 20:


  //-- convert rotation to z-axis compass direction
  //-- convert rotation to z-axis compass direction
string vfCompassDirection( rotation vRotBase ){
string vfCompassDirection( rotation vRotBase )
{
   //-- convert rotation to dgrees
   //-- convert rotation to dgrees
   vector vVecBase = llRot2Euler( vRotBase ) * RAD_TO_DEG;
   vector vVecBase = llRot2Euler( vRotBase ) * RAD_TO_DEG;
   //-- covert to range 0-159
   //-- covert to range [0, 360)
   vVecBase.z += 180;
   vVecBase.z += 180;
   if ( vVecBase.z < 22.5 || vVecBase.z > 337.5){
   if ( vVecBase.z < 22.5 || vVecBase.z > 337.5)
  {
     return "West";
     return "West";
   }
   }
   else{
   else
  {
     //--ofset to the end or west range
     //--ofset to the end or west range
     vVecBase.z -= 22.5;
     vVecBase.z -= 22.5;
Line 34: Line 40:


default{
default{
   state_entry(){
   state_entry()
  {
     llSay( 0, "Touch me to get your compass facing" );
     llSay( 0, "Touch me to get your compass facing" );
   }
   }


   touch_start( integer vIntTouchCount ){
   touch_start( integer vIntTouchCount )
  {
     integer vIntCounter = 0;
     integer vIntCounter = 0;
     do{
     do
    {
       llSay( 0,
       llSay( 0,
             llDetectedName( vIntCounter )
             llDetectedName( vIntCounter )
Line 46: Line 55:
               //-- next line gets avatar rotation and converts to compass direction
               //-- next line gets avatar rotation and converts to compass direction
             + vfCompassDirection( llDetectedRot( vIntCounter ) ) );
             + vfCompassDirection( llDetectedRot( vIntCounter ) ) );
     }while ( ++vIntCounter < vIntTouchCount );
     }while ( ++vIntCounter < vIntTouchCount ); //-- @@
   }
   }
}
}

Revision as of 22:54, 16 October 2007

Summary

Function: rotation llDetectedRot( integer number );

Returns a rotation that is the rotation of detected object number.

• integer number

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

Caveats

  • If number is out of bounds the script continues to execute without an error message.
All Issues ~ Search JIRA for related Bugs

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

Search JIRA for related Issues

Signature

function rotation llDetectedRot( integer number );