Pointing Stick

From Second Life Wiki
Revision as of 08:59, 14 September 2014 by Rhonin Nissondorf (talk | contribs)
Jump to navigation Jump to search

Made this to point at folk when its their turn at games lolz right. the useful tidbit is how it goes in the direction of what ever angle its pointing in.



<lsl> integer switch = TRUE; key user;

default {

   state_entry()
   {  
   vector goal = <90,0,90>;
   
      llSetRot(llEuler2Rot(goal*DEG_TO_RAD));
     llSetText("Touch to activate",<0,1,0>,1);
     
   }
 changed(integer change)
  {
      if(change & (CHANGED_OWNER | CHANGED_INVENTORY))
          llResetScript();
  }
       

on_rez(integer x)

     {
         llResetScript();
   

} touch_start(integer y)

   {
      if (switch == TRUE)
      {
          user = llDetectedKey(0);
          llRequestPermissions(user,
             PERMISSION_TAKE_CONTROLS);
             switch = FALSE;
              llSetText("Touch to Release Controls",<1,0,0>,1);
   }
   else if (switch == FALSE)
   {
      
       llReleaseControls();
      switch = TRUE;
       llRegionSayTo(user,0,"Controls Released");
        llSetText("Touch to activate",<0,1,0>,1);      
   }

}

   run_time_permissions(integer perm)
   {
       if (perm & PERMISSION_TAKE_CONTROLS)
   {
           llTakeControls( CONTROL_FWD|CONTROL_BACK|CONTROL_ROT_LEFT|CONTROL_ROT_RIGHT|CONTROL_UP|CONTROL_DOWN,TRUE,FALSE);
  }

}

   control(key id, integer level, integer edge)
   {
         
      if (level & CONTROL_UP)
         {
          
          llSetLinkPrimitiveParamsFast(-4,[ PRIM_POSITION, llGetPos() +<0.0,0.0,00.20> ]);
       }
          
        if (level & CONTROL_DOWN)
      {
        
          llSetLinkPrimitiveParamsFast(-4,[ PRIM_POSITION, llGetPos() +<0.0,00.0,-0.20> ]);    
   } 
       
      
   if (level & CONTROL_FWD)
       {
          llSetLinkPrimitiveParamsFast(-4,[ PRIM_POSITION, llGetPos() +<0,00,0.20> * llGetLocalRot()]);
   }
     if (level & CONTROL_BACK)
   {
          llSetLinkPrimitiveParamsFast(-4,[ PRIM_POSITION, llGetPos() +<0,00,-0.20> * llGetLocalRot()]);

}

   if(level & CONTROL_ROT_LEFT)
  {
               llSetLinkPrimitiveParamsFast(-4,[PRIM_ROT_LOCAL, llGetLocalRot() * llEuler2Rot(<0,0,4>*DEG_TO_RAD)]);

}

    if (level& CONTROL_ROT_RIGHT)

{

               llSetLinkPrimitiveParamsFast(-4,[PRIM_ROT_LOCAL, llGetLocalRot() * llEuler2Rot(<0,0,-4>*DEG_TO_RAD)]);

}

       }
     
   
   

}