Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- integer Channel;
- float openingTime=0.6; // in seconds
- float openingAngle=-90.0; // in degrees
- float autocloseTime=15.0; // in seconds
- integer steps=4; // number of internal rotation steps
- integer world=TRUE; // align to world or root prim rotation
- integer listenHandle;
- string soundOpen="door_open";
- string soundClose="door_close";
- integer doorowner = TRUE;
- float omega=0.0;
- string User;
- vector axis;
- rotation closedRot;
- rotation openRot;
- integer swinging;
- integer open;
- Reset()
- {
- llResetScript();
- }
- sound(string name)
- {
- if(llGetInventoryType(name)==INVENTORY_SOUND)
- llTriggerSound(name,1.0);
- }
- openDoor(integer yes)
- {
- if(yes)
- sound(soundOpen);
- vector useAxis=axis;
- open=yes;
- if(!yes)
- useAxis=-axis;
- llSetTimerEvent(openingTime/(float) steps);
- llTargetOmega(useAxis,omega,1.0);
- llLoopSound("177bfdd0-da9a-7145-29d7-1d8c6a48de4c",1);
- }
- go()
- {
- if(swinging==0)
- {
- if(!open)
- {
- axis=<0.0,0.0,1.0>/llGetRootRotation();
- closedRot=llGetLocalRot();
- if(world)
- openRot=llGetRot()*llEuler2Rot(<0.0,0.0,openingAngle>*DEG_TO_RAD)/llGetRootRotation();
- else
- openRot=closedRot*llEuler2Rot(<0.0,0.0,openingAngle>*DEG_TO_RAD);
- }
- swinging=steps;
- openDoor(!open);
- }
- }
- rotation slerp(rotation source,rotation target,float amount)
- {
- return llAxisAngle2Rot(llRot2Axis(target/=source),amount*llRot2Angle(target))*source;
- }
- default
- {
- on_rez(integer start_param)
- {
- Reset();
- }
- state_entry()
- {
- integer Channel = (integer) ( "0x" + (string) llGetOwner() ) - 654321;
- swinging=0;
- open=FALSE;
- omega=TWO_PI/360*openingAngle/openingTime;
- llTargetOmega(ZERO_VECTOR,1.0,1.0);
- listenHandle = llListen(Channel, "", NULL_KEY , "");
- }
- touch_start(integer num_detected)
- {
- User = llDetectedKey(0);
- Channel = (integer) ( "0x" + (string) llGetOwner() ) - 654321;
- if(doorowner == TRUE)
- {
- if(User == llGetOwner())
- {
- go();
- }
- else
- {
- llTriggerSound("6002da74-8ad8-0290-1310-695089090640",1);
- llInstantMessage(llDetectedKey(0), "You Are Unauthorized To Enter This TTC!");
- }
- }
- if(doorowner == FALSE)
- {
- if(llDetectedKey(0))
- {
- llSay(Channel, "Open");
- go();
- }
- }
- }
- listen(integer Channel, string name, key id, string message)
- {
- integer Channel = (integer) ( "0x" + (string) llGetOwner() ) - 123456;
- if(message == "Open")
- {
- go();
- }
- if(message == "dooranyone")
- {
- doorowner = FALSE;
- }
- if(message == "doorowner")
- {
- doorowner = TRUE;
- }
- if(message == "Explode")
- {
- state exploded;
- }
- }
- timer()
- {
- if(swinging>0)
- {
- swinging--;
- if(swinging!=0)
- {
- float amount=(float) swinging/(float) steps;
- if(open)
- amount=1.0-amount;
- llSetLinkPrimitiveParamsFast(LINK_THIS,[PRIM_ROT_LOCAL,slerp(closedRot,openRot,amount)]);
- return;
- }
- llTargetOmega(axis,0.0,0.0);
- if(open)
- {
- llSetLinkPrimitiveParamsFast(LINK_THIS,[PRIM_ROT_LOCAL,openRot]);
- llSetTimerEvent(autocloseTime);
- }
- else
- {
- llSetLinkPrimitiveParamsFast(LINK_THIS,[PRIM_ROT_LOCAL,closedRot]);
- sound(soundClose);
- llStopSound();
- llSetTimerEvent(0.0);
- }
- }
- }
- }
- state exploded
- {
- state_entry()
- {
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement