Difference between revisions of "Pointing Stick"

From Second Life Wiki
Jump to navigation Jump to search
Line 1: Line 1:


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.
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.
Line 8: Line 7:
   
   
<lsl>
<lsl>
integer on = TRUE;
integer switch = TRUE;
 
key user;


default
default
Line 15: Line 14:
     state_entry()
     state_entry()
     {   
     {   
 
    vector goal = <90,0,90>;
   
      llSetRot(llEuler2Rot(goal*DEG_TO_RAD));
       llSetText("Touch to activate",<0,1,0>,1);
       llSetText("Touch to activate",<0,1,0>,1);
     
     }
     }


Line 31: Line 33:
}    touch_start(integer y)
}    touch_start(integer y)
     {
     {
       if (on == TRUE)
       if (switch == TRUE)
       {
       {
           llRequestPermissions(llDetectedKey(0),
           user = llDetectedKey(0);
          llRequestPermissions(user,
               PERMISSION_TAKE_CONTROLS);
               PERMISSION_TAKE_CONTROLS);
               on = FALSE;
               switch = FALSE;
              llSetText("Touch to Release Controls",<1,0,0>,1);
     }
     }
     else if (on == FALSE)
     else if (switch == FALSE)
     {
     {
        
        
         llReleaseControls();
         llReleaseControls();
        on = TRUE;
      switch = TRUE;
             
        llRegionSayTo(user,0,"Controls Released");
        llSetText("Touch to activate",<0,1,0>,1);     
     }
     }
}   
}   
Line 49: Line 54:
         if (perm & PERMISSION_TAKE_CONTROLS)
         if (perm & PERMISSION_TAKE_CONTROLS)
     {
     {
             llTakeControls( CONTROL_FWD|CONTROL_BACK|CONTROL_ROT_LEFT|CONTROL_ROT_RIGHT,TRUE,FALSE);
             llTakeControls( CONTROL_FWD|CONTROL_BACK|CONTROL_ROT_LEFT|CONTROL_ROT_RIGHT|CONTROL_UP|CONTROL_DOWN,TRUE,FALSE);
   }
   }
}         
}         
Line 56: Line 61:
     {
     {
            
            
     
      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)
     if (level & CONTROL_FWD)
         {
         {
           llSetLinkPrimitiveParamsFast(-4,[ PRIM_POSITION, llGetPos() +<0,00,0.25> * llGetLocalRot()]);
           llSetLinkPrimitiveParamsFast(-4,[ PRIM_POSITION, llGetPos() +<0,00,0.20> * llGetLocalRot()]);
     }
     }
       if (level & CONTROL_BACK)
       if (level & CONTROL_BACK)
     {
     {
           llSetLinkPrimitiveParamsFast(-4,[ PRIM_POSITION, llGetPos() +<0,00,-0.25> * llGetLocalRot()]);
           llSetLinkPrimitiveParamsFast(-4,[ PRIM_POSITION, llGetPos() +<0,00,-0.20> * llGetLocalRot()]);
}
}
     if(level & CONTROL_ROT_LEFT)
     if(level & CONTROL_ROT_LEFT)
   {
   {
                 llSetLinkPrimitiveParamsFast(-4,[PRIM_ROT_LOCAL, llGetLocalRot() * llEuler2Rot(<0,0,5>*DEG_TO_RAD)]);
                 llSetLinkPrimitiveParamsFast(-4,[PRIM_ROT_LOCAL, llGetLocalRot() * llEuler2Rot(<0,0,4>*DEG_TO_RAD)]);
}
}
     if (level& CONTROL_ROT_RIGHT)
     if (level& CONTROL_ROT_RIGHT)
{
{
        
        
                 llSetLinkPrimitiveParamsFast(-4,[PRIM_ROT_LOCAL, llGetLocalRot() * llEuler2Rot(<0,0,-5>*DEG_TO_RAD)]);
                 llSetLinkPrimitiveParamsFast(-4,[PRIM_ROT_LOCAL, llGetLocalRot() * llEuler2Rot(<0,0,-4>*DEG_TO_RAD)]);
}
}
         }
         }

Revision as of 09:59, 14 September 2014

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)]);

}

       }
     
   
   

}