User:Daemonika Nightfire/Scripts/Doors

From Second Life Wiki
< User:Daemonika Nightfire
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

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


*DS* Smooth rotate door (edge)

Text

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