Sliding Door

From Second Life Wiki

Sliding Door
Jump to: navigation, search

 
// 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();
    }
 
 
}
 
Personal tools