Sliding Door
Jump to navigation
Jump to search
<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>