User:Daemonika Nightfire/Scripts/Doors

From Second Life Wiki
Revision as of 14:43, 1 January 2024 by Daemonika Nightfire (talk | contribs) (Door examples added)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Bla Bla Bla

*DS* Smooth rotate door (center)

Text

<source lang="lsl2"> float degrees = 90; // Ein positiver oder negativer Wert bestimmt die Dreh-Richtung. integer steps = 20; // Ein kleinerer Wert beschleunigt die Bewegung.

integer st = 0; Moving() {

   rotation default_rot = llGetLocalRot();
   vector rot = llRot2Euler(default_rot) * RAD_TO_DEG;
   float section = degrees / steps;
   
   if(!st)
   {
       // FREEBIE Sound "Door open", Klinke wird gesdueckt.
       llTriggerSound("cb340647-9680-dd5e-49c0-86edfa01b3ac", 1.0);
       llSetTimerEvent(30.0);
   }
   
   integer i = 0;
   do
   {
       if(!st)
       {
           rot.z = rot.z+section;
       }
       else if(st)
       {
           rot.z = rot.z-section;
       }
       rotation newLocalRot = llEuler2Rot(rot * DEG_TO_RAD);
       
       llSetLinkPrimitiveParamsFast(LINK_THIS, [PRIM_ROT_LOCAL, newLocalRot]);
       llSleep(0.06);
   }
   while(++i < steps);
   
   if(st)
   {
       // FREEBIE Sound "Door close", Tuer faellt ins Schloss.
       llTriggerSound("e7ff1054-003d-d134-66be-207573f2b535", 1.0);
   }
   st = !st;

}

default {

   state_entry()
   {
       llOwnerSay("/me - " + llGetScriptName() + " Memory: " + (string)llGetUsedMemory() + " bytes in use.");
   }
   
   touch_start(integer total_number)
   {
       if(st)
       {
           llSetTimerEvent(0.0);
       }
       Moving();
   }
   
   collision_start(integer total_number)
   {
       if(!st)
       {
           Moving();
       }
   }
   
   timer()
   {
       llSetTimerEvent(0.0);
       Moving();
   }

} </source>


*DS* Smooth rotate door (edge)

Text

<source lang="lsl2"> float degrees = 90; // Ein positiver oder negativer Wert bestimmt die Dreh-Richtung. integer steps = 20; // Ein kleinerer Wert beschleunigt die Bewegung.

integer st = 0; Moving() {

   vector size = llGetScale();
   rotation default_rot = llGetLocalRot();
   vector rot = llRot2Euler(default_rot) * RAD_TO_DEG;
   float section = degrees / steps;
   
   if(!st)
   {
       // FREEBIE Sound "Door open", Klinke wird gesdueckt.
       llTriggerSound("cb340647-9680-dd5e-49c0-86edfa01b3ac", 1.0);
       llSetTimerEvent(30.0);
   }
   
   integer i;
   do
   {
       if(!st)
       {
           rot.z = rot.z+section;
       }
       else if(st)
       {
           rot.z = rot.z-section;
       }
       rotation newLocalRot = llEuler2Rot(rot * DEG_TO_RAD);
       
       // Nutze llRot2Fwd & size.x oder llRot2Left & size.y fuer breite Seite deiner Tuer.
       vector currentPos = llRot2Fwd(llGetLocalRot()) * size.x / 2.0;
       vector newPos = llRot2Fwd(newLocalRot) * size.x / 2.0;
       
       // Vertauschen der Zeichen + und - wechselt die Seite der "Scharniere".
       vector newLocalPos = llGetLocalPos() - currentPos + newPos;
       
       llSetLinkPrimitiveParamsFast(LINK_THIS,[PRIM_ROT_LOCAL, newLocalRot, PRIM_POS_LOCAL, newLocalPos]);
       llSleep(0.06);
   }
   while(++i < steps);
   
   if(st)
   {
       // FREEBIE Sound "Door close", Tuer faellt ins Schloss.
       llTriggerSound("e7ff1054-003d-d134-66be-207573f2b535", 1.0);
   }
   st = !st;

}

default {

   state_entry()
   {
       llOwnerSay("/me - " + llGetScriptName() + " Memory: " + (string)llGetUsedMemory() + " bytes in use.");
   }
   
   touch_start(integer num)
   {
       if(st)
       {
           llSetTimerEvent(0.0);
       }
       Moving();
   }
   
   collision_start(integer total_number)
   {
       if(!st)
       {
           Moving();
       }
   }
   
   timer()
   {
       llSetTimerEvent(0.0);
       Moving();
   }

} </source>