Difference between revisions of "User:Daemonika Nightfire/Scripts/Schalter"

From Second Life Wiki
Jump to navigation Jump to search
Line 8: Line 8:


Du wirst feststellen, das viele Scripte doppelt aufgefuehrt sind. Auf der linken Seite befindet sich die Standard Version. Auf der rechten Seite die Version mit einer globalen Funktion. Beide Versionen haben eine Daseinsberechtigung. Die globale Funktion hat den Vorteil, du musst dich im Script nicht wiederholen, sondern schreibst die Funktion nur einmal und greifst von jedem beliebigen Event aus darauf zu.
Du wirst feststellen, das viele Scripte doppelt aufgefuehrt sind. Auf der linken Seite befindet sich die Standard Version. Auf der rechten Seite die Version mit einer globalen Funktion. Beide Versionen haben eine Daseinsberechtigung. Die globale Funktion hat den Vorteil, du musst dich im Script nicht wiederholen, sondern schreibst die Funktion nur einmal und greifst von jedem beliebigen Event aus darauf zu.
Um laestigen Chat-Spam zu vermeiden habe ich bei saetmlichen Beispielen die Status-Meldungen in einen Hovertext gesetzt.


==touch==
==touch==

Revision as of 07:37, 23 February 2019

Schalter Einleitung

Warum spreche ich hier von einem Schalter? Ganz einfach, weil es das ist.

TRUE & FALSE sind Boolesche Variablen mit endlichen Werten.
Diese Schaltvariablen sind auf den Mathematiker George Boole im Jahr 1847 zurueck zu fuehren.
Gleichbedeutend mit 1 & 0 - ja & nein - richtig & falsch, koennen wir damit einen Status-Wechsel erzeugen.
Mehr Details hier: https://de.wikipedia.org/wiki/Boolesche_Variable

Du wirst feststellen, das viele Scripte doppelt aufgefuehrt sind. Auf der linken Seite befindet sich die Standard Version. Auf der rechten Seite die Version mit einer globalen Funktion. Beide Versionen haben eine Daseinsberechtigung. Die globale Funktion hat den Vorteil, du musst dich im Script nicht wiederholen, sondern schreibst die Funktion nur einmal und greifst von jedem beliebigen Event aus darauf zu.

Um laestigen Chat-Spam zu vermeiden habe ich bei saetmlichen Beispielen die Status-Meldungen in einen Hovertext gesetzt.

touch

Der touch_start Event ist die einfachste Methode um die Funktionsweise eines Schalters zu verdeutlichen. Hier reagiert das Script sofort wenn du den Prim klickst.

Einfacher Schalter Schalter als globale Funktion
integer schalter = FALSE;

default
{
    state_entry()
    {
        llSetText("Reset, schalter startet ausgeschaltet", <1,1,1>, 1.0);
    }

    touch_start(integer total_number)
    {
        if(schalter == FALSE)
        {
            schalter = TRUE;
            llSetText("eingeschaltet, schalter ist nun TRUE", <0,1,0>, 1.0);
        }
        else if(schalter == TRUE)
        {
            schalter = FALSE;
            llSetText("ausgeschaltet, schalter ist nun FALSE", <1,0,0>, 1.0);
        }
    }
}
integer schalter = FALSE;

SchalterFunktion()
{
    if(schalter == FALSE)
    {
        schalter = TRUE;
        llSetText("eingeschaltet, schalter ist nun TRUE", <0,1,0>, 1.0);
    }
    else if(schalter == TRUE)
    {
        schalter = FALSE;
        llSetText("ausgeschaltet, schalter ist nun FALSE", <1,0,0>, 1.0);
    }
}

default
{
    state_entry()
    {
        llSetText("Reset, schalter startet ausgeschaltet", <1,1,1>, 1.0);
    }

    touch_start(integer total_number)
    {
        SchalterFunktion();
    }
}

listener

Einfacher Schalter Schalter als globale Funktion
integer schalter = FALSE;

default
{
    state_entry()
    {
        llListen(1, "", llGetOwner(), "");
        llSetText("Reset, schalter startet ausgeschaltet", <1,1,1>, 1.0);
    }

    listen(integer Channel, string Name, key ID, string Text)
    {
        if(Text == "schalte")
        {
            if(schalter == FALSE)
            {
                schalter = TRUE;
                llSetText("eingeschaltet, schalter ist nun TRUE", <0,1,0>, 1.0);
            }
            else if(schalter == TRUE)
            {
                schalter = FALSE;
                llSetText("ausgeschaltet, schalter ist nun FALSE", <1,0,0>, 1.0);
            }
        }
    }
}
integer schalter = FALSE;

SchalterFunktion()
{
    if(schalter == FALSE)
    {
        schalter = TRUE;
        llSetText("eingeschaltet, schalter ist nun TRUE", <0,1,0>, 1.0);
    }
    else if(schalter == TRUE)
    {
        schalter = FALSE;
        llSetText("ausgeschaltet, schalter ist nun FALSE", <1,0,0>, 1.0);
    }
}

default
{
    state_entry()
    {
        llListen(1, "", llGetOwner(), "");
        llSetText("Reset, schalter startet ausgeschaltet", <1,1,1>, 1.0);
    }

    listen(integer Channel, string Name, key ID, string Text)
    {
        if(Text == "schalte")
        {
            SchalterFunktion();
        }
    }
}

collision

Einfacher Schalter Schalter als globale Funktion
integer schalter = FALSE;

default
{
    state_entry()
    {
        // llVolumeDetect(TRUE); // Diese Funktion ist fuer phantom Objekte.
        llSetText("Reset, schalter startet ausgeschaltet", <1,1,1>, 1.0);
    }

    collision_start(integer num)
    {
        if(schalter == FALSE)
        {
            schalter = TRUE;
            llSetText("eingeschaltet, schalter ist nun TRUE", <0,1,0>, 1.0);
        }
        else if(schalter == TRUE)
        {
            schalter = FALSE;
            llSetText("ausgeschaltet, schalter ist nun FALSE", <1,0,0>, 1.0);
        }
    }
}
integer schalter = FALSE;

SchalterFunktion()
{
    if(schalter == FALSE)
    {
        schalter = TRUE;
        llSetText("eingeschaltet, schalter ist nun TRUE", <0,1,0>, 1.0);
    }
    else if(schalter == TRUE)
    {
        schalter = FALSE;
        llSetText("ausgeschaltet, schalter ist nun FALSE", <1,0,0>, 1.0);
    }
}

default
{
    state_entry()
    {
        // llVolumeDetect(TRUE); // Diese Funktion ist fuer phantom Objekte.
        llSetText("Reset, schalter startet ausgeschaltet", <1,1,1>, 1.0);
    }

    collision_start(integer num)
    {
        SchalterFunktion();
    }
}

timer

Einfacher Schalter Schalter als globale Funktion
integer schalter = FALSE;

default
{
    state_entry()
    {
        llSetText("Reset, schalter startet ausgeschaltet", <1,1,1>, 1.0);
        llSetTimerEvent(5);
    }

    timer()
    {
        if(schalter == FALSE)
        {
            schalter = TRUE;
            llSetText("eingeschaltet, schalter ist nun TRUE", <0,1,0>, 1.0);
        }
        else if(schalter == TRUE)
        {
            schalter = FALSE;
            llSetText("ausgeschaltet, schalter ist nun FALSE", <1,0,0>, 1.0);
        }
    }
}
integer schalter = FALSE;

SchalterFunktion()
{
    if(schalter == FALSE)
    {
        schalter = TRUE;
        llSetText("eingeschaltet, schalter ist nun TRUE", <0,1,0>, 1.0);
    }
    else if(schalter == TRUE)
    {
        schalter = FALSE;
        llSetText("ausgeschaltet, schalter ist nun FALSE", <1,0,0>, 1.0);
    }
}

default
{
    state_entry()
    {
        llSetText("Reset, schalter startet ausgeschaltet", <1,1,1>, 1.0);
        llSetTimerEvent(5);
    }

    timer()
    {
        SchalterFunktion();
    }
}

sensor

Einfacher Schalter Schalter als globale Funktion
integer schalter = FALSE;

default
{
    state_entry()
    {
        llSensorRemove();
        
        llSetText("Reset, schalter startet ausgeschaltet", <1,1,1>, 1.0);
        llSensorRepeat("", "", AGENT_BY_LEGACY_NAME, 3.0, PI, 1.0);
    }

    sensor(integer num_detected)
    {
        if(schalter == FALSE)
        {
            schalter = TRUE;
            llSetText("eingeschaltet, schalter ist nun TRUE", <0,1,0>, 1.0);
        }
        else if(schalter == TRUE)
        {
            schalter = FALSE;
            llSetText("ausgeschaltet, schalter ist nun FALSE", <1,0,0>, 1.0);
        }
    }
}
integer schalter = FALSE;

SchalterFunktion()
{
    if(schalter == FALSE)
    {
        schalter = TRUE;
        llSetText("eingeschaltet, schalter ist nun TRUE", <0,1,0>, 1.0);
    }
    else if(schalter == TRUE)
    {
        schalter = FALSE;
        llSetText("ausgeschaltet, schalter ist nun FALSE", <1,0,0>, 1.0);
    }
}

default
{
    state_entry()
    {
        llSensorRemove();
        
        llSetText("Reset, schalter startet ausgeschaltet", <1,1,1>, 1.0);
        llSensorRepeat("", "", AGENT_BY_LEGACY_NAME, 3.0, PI, 1.0);
    }

    sensor(integer num_detected)
    {
        SchalterFunktion();
    }
}

Anders als bei den ersten beiden Sensor Beispielen, verhaelt sich dieser Sensor etwas anders, doch das Ergebnis ist das gleiche.

integer schalter = FALSE;

default
{
    state_entry()
    {
        llSensorRemove();
        
        llSetText("Reset, schalter startet ausgeschaltet", <1,1,1>, 1.0);
        llSensorRepeat("", "", AGENT_BY_LEGACY_NAME, 3.0, PI, 1.0);
    }

    sensor(integer num_detected)
    {
        if(schalter == FALSE)
        {
            schalter = TRUE;
            llSetText("eingeschaltet, Tuer ist geoeffnet", <0,1,0>, 1.0);
        }
    }
    
    no_sensor()
    {
        if(schalter == TRUE)
        {
            schalter = FALSE;
            llSetText("ausgeschaltet, Tuer ist geschlossen", <1,0,0>, 1.0);
        }
    }
}