Difference between revisions of "LlDetectedRot"
Jump to navigation
Jump to search
All Issues ~ Search JIRA for related Bugs
Void Singer (talk | contribs) m (Added Example) |
Void Singer (talk | contribs) 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 | //-- 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
LSL Portal | Functions | Events | Types | Operators | Constants | Flow Control | Script Library | Categorized Library | Tutorials |
Summary
Function: rotation llDetectedRot( integer number );38 | Function ID |
0.0 | Forced Delay |
10.0 | Energy |
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.
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 |