// Point to owner v001.001.009 // rotate on the z axis (in the xy plane) to point toward owner default { state_entry() { llOwnerSay("I'm looking for my owner."); llSetTimerEvent( 1 ); //look every second } timer() // touch_start(integer total_number) { // integer count = 0; // key myOwner = llGetOwner(); // //only owner's touch // for(; count < total_number; ++count ){ // key whoTouched = llDetectedKey( count ); // if( whoTouched == myOwner ) jump ownTouch; // } // jump endTouch; // @ownTouch; //get owner's info list detailOwner = llGetObjectDetails( llGetOwner(), [ OBJECT_POS ]); //only if owner is in sim integer detOwnLen = llGetListLength( detailOwner ); if( detOwnLen == 0 ) jump endTouch; //get owner's position vector dist2Targ = llList2Vector( detailOwner, 0 ) - llGetPos(); // dist2Targ.x = -dist2Targ.x; // dist2Targ.y = -dist2Targ.y; // vector dist2Targ = < 3.0, -10.0, 0.0 >; if( dist2Targ == < 0.0, 0.0, 0.0 > ) jump endTouch; float hypot = llSqrt( llPow( dist2Targ.x, 2 ) + llPow ( dist2Targ.y, 2 ) ); float relAngle = llAsin( dist2Targ.x / hypot ); vector currTwist = llRot2Euler( llGetRot() ); if( dist2Targ.y > 0 ) relAngle = ( 180 * DEG_TO_RAD ) - relAngle; currTwist.z = relAngle; // llOwnerSay( "You are " // + (string) hypot + " meters away, vector " // + (string) dist2Targ + ", horizontal angle " // + (string) ( relAngle * RAD_TO_DEG ) + "\nMy Rotation: " // + (string) currTwist ); // llSetRot( llEuler2Rot( currTwist ) ); @endTouch; } }