Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Ampel.lsl
#1
Ampel A und Ampel B werden gesteuert.
Für eine normale Kreuzung benötigt man von beiden 2 Stück.
Erstellt für jede Ampel 5 Prims und nennt sie:
Für Ampel A:
CarRotA
CarGelbA
CarGruenA

FussRotA
FussGruenA

Das Gleiche halt für Ampel B.
Dazu ein Prim für das Ampel.lsl Skript.

Ihr könnt auf den Prims eine Ampellicht Textur drauf machen und diese in eure bestehenden Ampeln einbauen.
Die Ampel schaltet realistisch aber ohne Blinken der Fussgängerlichtes.

Die Ampel kann mit einem Klick in den Außer-Betrieb-Modus versetzt werden,
wobei dann alle gelben Lampen blinken.

   

PHP-Code:
integer rotDauer   10// Dauer der roten Phase
integer gruenDauer 10// Dauer der grünen Phase
integer gelbDauer  3;  // Dauer der gelben Phase

vector COLOR_RED    = <1.0000.0000.000>;
vector COLOR_YELLOW = <1.0000.8630.000>;
vector COLOR_GREEN  = <0.0001.0000.0>;

// Linknummern für die Objekte
integer CarRotA 6integer CarGelbA 5integer CarGruenA 4;
integer FussRotA 3integer FussGruenA 2;
integer CarRotB 7integer CarGelbB 8integer CarGruenB 9;
integer FussRotB 10integer FussGruenB 11;

// Variablen für die Phasen und den Modus
integer currentPhase 0;
integer isOutOfService FALSE// Flag für Außer-Betrieb-Modus
integer isYellowBlinking FALSE// Flag für den Blinkzustand

// Funktionen für Lichtsteuerung
hell(integer linkNum) {
    
llSetLinkPrimitiveParams(linkNum, [PRIM_FULLBRIGHTALL_SIDESTRUEPRIM_POINT_LIGHTTRUEZERO_VECTOR1.010.00.6]);
}
dunkel(integer linkNum) {
    
llSetLinkPrimitiveParams(linkNum, [PRIM_FULLBRIGHTALL_SIDESFALSEPRIM_POINT_LIGHTFALSEZERO_VECTOR0.010.00.0]);
}

// Setzt die Ampel für Fahrzeuge A
setAutoAmpelA(integer my_state) {
    if (
my_state == 0) { 
        
llSetLinkPrimitiveParams(CarRotA, [PRIM_COLORALL_SIDESCOLOR_RED]);
        
hell(CarRotA); dunkel(CarGelbA); dunkel(CarGruenA);
    } else if (
my_state == 1) { 
        
llSetLinkPrimitiveParams(CarGelbA, [PRIM_COLORALL_SIDESCOLOR_YELLOW]);
        
hell(CarGelbA); dunkel(CarRotA); dunkel(CarGruenA);
    } else if (
my_state == 2) { 
        
llSetLinkPrimitiveParams(CarGruenA, [PRIM_COLORALL_SIDESCOLOR_GREEN]);
        
hell(CarGruenA); dunkel(CarRotA); dunkel(CarGelbA);
    }
}

// Setzt die Ampel für Fahrzeuge B
setAutoAmpelB(integer my_state) {
    if (
my_state == 0) { 
        
llSetLinkPrimitiveParams(CarRotB, [PRIM_COLORALL_SIDESCOLOR_RED]);
        
hell(CarRotB); dunkel(CarGelbB); dunkel(CarGruenB);
    } else if (
my_state == 1) { 
        
llSetLinkPrimitiveParams(CarGelbB, [PRIM_COLORALL_SIDESCOLOR_YELLOW]);
        
hell(CarGelbB); dunkel(CarRotB); dunkel(CarGruenB);
    } else if (
my_state == 2) { 
        
llSetLinkPrimitiveParams(CarGruenB, [PRIM_COLORALL_SIDESCOLOR_GREEN]);
        
hell(CarGruenB); dunkel(CarRotB); dunkel(CarGelbB);
    }
}

// Setzt Fußgängerampeln A und B
setFussgaengerAmpelA(integer my_state) {
    if (
my_state == 0) { 
        
llSetLinkPrimitiveParams(FussRotA, [PRIM_COLORALL_SIDESCOLOR_RED]);
        
hell(FussRotA); dunkel(FussGruenA);
    } else if (
my_state == 1) { 
        
llSetLinkPrimitiveParams(FussGruenA, [PRIM_COLORALL_SIDESCOLOR_GREEN]);
        
hell(FussGruenA); dunkel(FussRotA);
    }
}
setFussgaengerAmpelB(integer my_state) {
    if (
my_state == 0) { 
        
llSetLinkPrimitiveParams(FussRotB, [PRIM_COLORALL_SIDESCOLOR_RED]);
        
hell(FussRotB); dunkel(FussGruenB);
    } else if (
my_state == 1) { 
        
llSetLinkPrimitiveParams(FussGruenB, [PRIM_COLORALL_SIDESCOLOR_GREEN]);
        
hell(FussGruenB); dunkel(FussRotB);
    }
}

// Funktion für das Blinken der gelben Lichter
blinkGelb() {
    if (
isYellowBlinking) {
        
dunkel(CarGelbA); dunkel(CarGelbB);
    } else {
        
llSetLinkPrimitiveParams(CarGelbA, [PRIM_COLORALL_SIDESCOLOR_YELLOW]);
        
llSetLinkPrimitiveParams(CarGelbB, [PRIM_COLORALL_SIDESCOLOR_YELLOW]);
        
hell(CarGelbA); hell(CarGelbB);
    }
    
isYellowBlinking = !isYellowBlinking;
}

// Ausschalten aller Lichter
turnOffAll() {
    
dunkel(CarRotA); dunkel(CarGelbA); dunkel(CarGruenA);
    
dunkel(FussRotA); dunkel(FussGruenA);
    
dunkel(CarRotB); dunkel(CarGelbB); dunkel(CarGruenB);
    
dunkel(FussRotB); dunkel(FussGruenB);
}

// Umschalten zwischen Normal- und Außer-Betrieb-Modus
toggleOutOfService() {
    if (
isOutOfService) {
        
isOutOfService FALSE;
        
llSetTimerEvent(gruenDauer); // Timer für Normalbetrieb
        
currentPhase 0// Startphase
    
} else {
        
isOutOfService TRUE;
        
isYellowBlinking FALSE// Blinken zurücksetzen
        
turnOffAll();
        
llSetTimerEvent(1); // Blinktakt für Gelb im Außer-Betrieb-Modus
    
}
}

// Phasenlogik mit erweiterten Bedingungen
default
{
    
state_entry() {
        
// Initialisiere die Ampeln im Normalbetrieb
        
setAutoAmpelA(0); setFussgaengerAmpelA(1);
        
setAutoAmpelB(2); setFussgaengerAmpelB(0);
        
llSetTimerEvent(gruenDauer);
    }
    
    
touch_start(integer total_number) {
        
toggleOutOfService(); // Wechsel zwischen Normal- und Außer-Betrieb-Modus
    
}
        
    
timer() {
        if (
isOutOfService) {
            
blinkGelb(); // Gelbe Lichter blinken lassen
        
} else {
            
// Normalbetrieb Phasenwechsel
            
if (currentPhase == 0) {
                
setAutoAmpelA(0); setFussgaengerAmpelA(1);
                
setAutoAmpelB(2); setFussgaengerAmpelB(0);
                
llSetTimerEvent(gruenDauer);
                
currentPhase 1;
            } else if (
currentPhase == 1) {
                
setAutoAmpelA(1); setFussgaengerAmpelA(0);
                
setAutoAmpelB(0); setFussgaengerAmpelB(0);
                
llSetTimerEvent(gelbDauer);
                
currentPhase 2;
            } else if (
currentPhase == 2) {
                
setAutoAmpelA(2); setFussgaengerAmpelA(0);
                
setAutoAmpelB(0); setFussgaengerAmpelB(1);
                
llSetTimerEvent(gruenDauer);
                
currentPhase 3;
            } else if (
currentPhase == 3) {
                
setAutoAmpelA(0); setAutoAmpelB(1);
                
setFussgaengerAmpelA(0); setFussgaengerAmpelB(0);
                
llSetTimerEvent(gelbDauer);
                
currentPhase 0;
            }
        }
    }


   
Für die Fußgängerampel könnt ihr noch ein schwarzes Männchen darauf machen.
Alles geschrieben ohne zu gendern Smile Ich steige auf eine Leiter:in Wink
Ein Metaversum sind viele kleine Räume, die nahtlos aneinander passen,
sowie direkt sichtbar und begehbar sind, als wäre es aus einem Guss.



[-] The following 1 user says Thank You to Manfred Aabye for this post:
  • Dorena Verne
Zitieren
#2
Weil es gerade zu Licht passt, einen leicht einstellbaren Farbwechsler.

ColorSwitch.lsl
PHP-Code:
// Variablen für den Farbwechsel
float redValue 0.0;
float greenValue 0.0;
float blueValue 0.0;
float mytime 0.1// Zeit
float helligkeit 0.1;
float transparenz 1.0;

// Flag, ob der Farbwechsel aktiv ist
integer isColorCycling FALSE;

// Funktion, um die Farbe zufällig zu setzen
setRandomColor() {
    
// Zufällige Werte für Rot, Grün und Blau im Bereich von 0.001 bis 1.000
    
redValue llFrand(0.999) + 0.001;   // Zufälliger Wert für Rot im Bereich 0.001 bis 1.000
    
greenValue llFrand(0.999) + 0.001// Zufälliger Wert für Grün im Bereich 0.001 bis 1.000
    
blueValue llFrand(0.999) + 0.001;  // Zufälliger Wert für Blau im Bereich 0.001 bis 1.000
    
    // Setzt die zufällige Farbe
    
llSetLinkPrimitiveParamsFast(LINK_ROOT, [
        
PRIM_COLORALL_SIDES, <redValuegreenValueblueValue>, transparenzPRIM_GLOWALL_SIDEShelligkeit ]);
}

default {
    
state_entry() {
        
// Initiale Farbe auf Schwarz setzen (alle Farben 0.0)
        
llSetLinkPrimitiveParamsFast(LINK_ROOT, [
            
PRIM_COLORALL_SIDES, <0.00.00.0>, transparenzPRIM_GLOWALL_SIDEShelligkeit ]);
    }

    
touch_start(integer total_number) {
        
// Umschalten des Farbwechselmodus
        
isColorCycling = !isColorCycling;

        if (
isColorCycling) {
            
// Zufällige Farbe sofort setzen
            
setRandomColor();
            
llSetTimerEvent(mytime);  // Timer für kontinuierliche Farbänderung
        
} else {
            
llSetTimerEvent(0.0);  // Timer stoppen
            // Zurück auf schwarze Farbe setzen, wenn der Wechselmodus gestoppt wird
            
llSetLinkPrimitiveParamsFast(LINK_ROOT, [
                
PRIM_COLORALL_SIDES, <0.00.00.0>, transparenzPRIM_GLOWALL_SIDEShelligkeit ]);
        }
    }

    
timer() {
        
// Wenn der Farbwechselmodus aktiv ist, setze alle Farben zufällig
        
if (isColorCycling) {
            
setRandomColor(); // Zufällige Farbe setzen
        
}
    }

Ein Metaversum sind viele kleine Räume, die nahtlos aneinander passen,
sowie direkt sichtbar und begehbar sind, als wäre es aus einem Guss.



[-] The following 1 user says Thank You to Manfred Aabye for this post:
  • Dorena Verne
Zitieren
#3
Licht erweitert für Lichtorgeln und so´n Zeugs.
PHP-Code:
// Farbwechsler, Lichorgel, Psycho
// Variablen für den Farbwechsel
float redValue 0.0;
float greenValue 0.0;
float blueValue 0.0;
float mytime 0.1;
float helligkeit 0.1;
float transparenz 1.0;

// Variablen für Licht Helligkeit und Reichweite etc.
integer anaus TRUE// TRUE Ein, FALSE Aus     
vector lichtfarbe =  <1.01.01.0>; // Lineare Farbe in RGB <R, G, B> (<0.0, 0.0, 0.0> = black, <1.0, 1.0, 1.0> = white) Zufall <redValue, greenValue, blueValue>   
float  intensiv 1.0// Einstellbereich 0.0 to 1.0     
float  radius 20.0// Einstellbereich 0.1 to 20.0     
float  abfallwert 0.1// Einstellbereich 0.01 to 2.0 



// Flag, ob der Farbwechsel aktiv ist
integer isColorCycling FALSE;

// Funktion, um die Farbe zufällig zu setzen
setRandomColor() {
    
// Zufällige Werte für Rot, Grün und Blau im Bereich von 0.001 bis 1.000
    
redValue llFrand(0.999) + 0.001;   // Zufälliger Wert für Rot im Bereich 0.001 bis 1.000
    
greenValue llFrand(0.999) + 0.001// Zufälliger Wert für Grün im Bereich 0.001 bis 1.000
    
blueValue llFrand(0.999) + 0.001;  // Zufälliger Wert für Blau im Bereich 0.001 bis 1.000
    
    // Setzt die zufällige Farbe
    
llSetLinkPrimitiveParamsFast(LINK_ROOT, [ PRIM_COLORALL_SIDES, <redValuegreenValueblueValue>, transparenzPRIM_GLOWALL_SIDEShelligkeit ]);
    
// Licht an
    
llSetLinkPrimitiveParamsFast(LINK_ROOT, [ PRIM_POINT_LIGHTanaus, <redValuegreenValueblueValue>, intensivradiusabfallwert ]);
}

default {
    
state_entry() {
        
// Initiale Farbe auf Schwarz setzen (alle Farben 0.0)
        
llSetLinkPrimitiveParamsFast(LINK_ROOT, [ PRIM_COLORALL_SIDES, <0.00.00.0>, transparenzPRIM_GLOWALL_SIDEShelligkeit ]);
        
// Licht aus
        
llSetLinkPrimitiveParamsFast(LINK_ROOT, [ PRIM_POINT_LIGHTFALSE, <0.00.00.0>, intensivradiusabfallwert ]);
    }

    
touch_start(integer total_number) {
        
// Umschalten des Farbwechselmodus
        
isColorCycling = !isColorCycling;

        if (
isColorCycling) {
            
// Zufällige Farbe sofort setzen
            
setRandomColor();
            
llSetTimerEvent(mytime);  // Timer für kontinuierliche Farbänderung
        
} else {
            
llSetTimerEvent(0.0);  // Timer stoppen
            // Zurück auf schwarze Farbe setzen, wenn der Wechselmodus gestoppt wird
            
llSetLinkPrimitiveParamsFast(LINK_ROOT, [ PRIM_COLORALL_SIDES, <0.00.00.0>, transparenzPRIM_GLOWALL_SIDEShelligkeit ]);
            
// Licht aus
            
llSetLinkPrimitiveParamsFast(LINK_ROOT, [ PRIM_POINT_LIGHTFALSE, <0.00.00.0>, intensivradiusabfallwert ]);
        }
    }

    
timer() {
        
// Wenn der Farbwechselmodus aktiv ist, setze alle Farben zufällig
        
if (isColorCycling) {
            
setRandomColor(); // Zufällige Farbe setzen
        
}
    }

Ein Metaversum sind viele kleine Räume, die nahtlos aneinander passen,
sowie direkt sichtbar und begehbar sind, als wäre es aus einem Guss.



Zitieren


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 2 Gast/Gäste