Sliding Door

From Second Life Wiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

<lsl> // Create door. X is up/down, Y is open close. // Put script in door. // Set door at closed position, then reset script.

// Touch to open or close, or closes on timer

vector pos; // closed position when script is reset vector opos; // open position rotation rot; float amt = 1.8; // how far to slide, in meters integer dir = -1; // direction to slide. change sign to switch float offset = 0.1; // a little in or out as opposed to left right. integer open; // TRUE is open. float delay = 20; // seconds to stay open integer slice = 4; // how many steps during open and close

slide( vector tgt ) {

   vector npos = llGetPos();
   vector delta = (tgt - npos)/slice;
   integer s;
   for( s=1; s < slice; ++s ) 
   {
       npos += delta;
       llSetPos( npos );
   }
   llSetPos(tgt);

}

close() {

       llSetTimerEvent(0);
       slide(pos);
       llSetPos(pos);  
       llSetRot(rot);
       open = FALSE;

}


default {

   state_entry()
   {
       pos = llGetPos();
       rot = llGetRot();
       opos = pos + dir*(<0,amt,offset>*rot);  // assumes x axis is UP
       open = FALSE;
   }
   on_rez(integer n)
   {
       llResetScript();
   }
   touch_start(integer total_number)
   {
       if( open )
       {
           close();
       }
       else
       {
           slide(opos);
           llSetTimerEvent(delay);
           open = TRUE;
       } 
       
           
   }
   
   timer()
   {
       close();
   }
         
   

} </lsl>