string objectName; integer ndxPrim = 0; string txt; vector white = < 1.0, 1.0, 1.0 >; string tail = "\n\n\n\n\n\n\n\n "; default { state_entry() { objectName = llGetObjectName(); llSetText( "", white, 0 ); } touch_start(integer total_number) { integer prim = llDetectedLinkNumber( 0 ); key primKey = llGetLinkKey( prim ); list primInfo = llGetObjectDetails( primKey, [ OBJECT_NAME, OBJECT_DESC, OBJECT_POS, OBJECT_ROT, OBJECT_VELOCITY ]); rotation rotPrim = llList2Rot( primInfo, 3 ); txt = "Name: " + llList2String( primInfo, 0 ) + "\nDesc: " + llList2String( primInfo, 1 ); if( prim == 0 ){ txt += "\nA SOLO PRIM"; } else { integer numPrims = llGetNumberOfPrims(); if( prim == 1 ){ txt += "\nthe root prim"; } else { txt += "\nchild prim #" + (string) prim; } txt += " of " + (string) numPrims; } if( prim < 2 ){ txt += "\nPosition: " + llList2String( primInfo, 2 ) + "\nRotation: " + (string) rotPrim + "\nas vector: " + (string) llRot2Euler( rotPrim ) + "\nVelocity: " + llList2String( primInfo, 4 ); } else { vector relPos = llList2Vector( primInfo, 2 ) - llGetPos(); rotation relRot = llGetRot(); relRot.s = -relRot.s; relRot = relRot * llList2Rot( primInfo, 3 ); txt += "\nRelative position: " + (string) relPos + "\nRelative rotation: " + (string) relRot + "\nas vector: " + (string) llRot2Euler( relRot ); } llSetText( txt + tail, white, 1 ); } }