integer PFuncCallArgs = 56;
integer isOpen = FALSE;
string open_sound = "sliding door";
string close_sound = "sliding door";
integer autoCloseTime = 30; // seconds (-1 for no auto-close)
float steps = 4; // no. of steps for open movement (1 for smoothest/fastest)
vector scale;
vector position;
float y;
open()
{
if (isOpen) return;
if (autoCloseTime > 0)
llSetTimerEvent(autoCloseTime);
if (open_sound != "")
llPlaySound(open_sound,0.5);
position=position+<0,y,0>;
llSetPos(position);
isOpen = TRUE;
}
close()
{
llSetTimerEvent(0);
if (!isOpen) return;
position=position-<0,y,0>;
llSetPos(position);
if (close_sound != "")
llPlaySound(close_sound,0.5);
isOpen = FALSE;
}
callRemoteFuncP(string funcName, list args)
{
list extArgs = [funcName] + args;
string extArgStr = llDumpList2String(extArgs, "-=-");
llMessageLinked( LINK_THIS, PFuncCallArgs, extArgStr, "" );
}
handleFuncCall(string funcName, list args)
{
if (funcName=="open" || (funcName=="opendoor"))
open();
else if (funcName=="close" || (funcName=="closedoor"))
close();
}
default
{
state_entry()
{
scale=llGetScale();
position=llGetPos();
y=scale.y;
}
timer()
{
close();
}
link_message(integer sender_num, integer num, string str, key id)
{
if ((num == PFuncCallArgs)) {
list fullArgs = llParseStringKeepNulls( str, ["-=-"], [] );
str="";
string funcName = llList2String(fullArgs,0);
list args = llList2List(fullArgs, 1, -1);
fullArgs = [];
handleFuncCall(funcName, args);
}
}
touch_start(integer total_number)
{
key agentKey = llDetectedKey(0);
string agentName = llDetectedName(0);
if (!isOpen)
callRemoteFuncP("checkauth",[agentKey,agentName,"open"]);
else
callRemoteFuncP("checkauth",[agentKey,agentName,"close"]);
}
}