Ampel.lsl - Manfred Aabye - 14.11.2024
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.000, 0.000, 0.000>; vector COLOR_YELLOW = <1.000, 0.863, 0.000>; vector COLOR_GREEN = <0.000, 1.000, 0.0>;
// Linknummern für die Objekte integer CarRotA = 6; integer CarGelbA = 5; integer CarGruenA = 4; integer FussRotA = 3; integer FussGruenA = 2; integer CarRotB = 7; integer CarGelbB = 8; integer CarGruenB = 9; integer FussRotB = 10; integer 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_FULLBRIGHT, ALL_SIDES, TRUE, PRIM_POINT_LIGHT, TRUE, ZERO_VECTOR, 1.0, 10.0, 0.6]); } dunkel(integer linkNum) { llSetLinkPrimitiveParams(linkNum, [PRIM_FULLBRIGHT, ALL_SIDES, FALSE, PRIM_POINT_LIGHT, FALSE, ZERO_VECTOR, 0.0, 10.0, 0.0]); }
// Setzt die Ampel für Fahrzeuge A setAutoAmpelA(integer my_state) { if (my_state == 0) { llSetLinkPrimitiveParams(CarRotA, [PRIM_COLOR, ALL_SIDES, COLOR_RED]); hell(CarRotA); dunkel(CarGelbA); dunkel(CarGruenA); } else if (my_state == 1) { llSetLinkPrimitiveParams(CarGelbA, [PRIM_COLOR, ALL_SIDES, COLOR_YELLOW]); hell(CarGelbA); dunkel(CarRotA); dunkel(CarGruenA); } else if (my_state == 2) { llSetLinkPrimitiveParams(CarGruenA, [PRIM_COLOR, ALL_SIDES, COLOR_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_COLOR, ALL_SIDES, COLOR_RED]); hell(CarRotB); dunkel(CarGelbB); dunkel(CarGruenB); } else if (my_state == 1) { llSetLinkPrimitiveParams(CarGelbB, [PRIM_COLOR, ALL_SIDES, COLOR_YELLOW]); hell(CarGelbB); dunkel(CarRotB); dunkel(CarGruenB); } else if (my_state == 2) { llSetLinkPrimitiveParams(CarGruenB, [PRIM_COLOR, ALL_SIDES, COLOR_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_COLOR, ALL_SIDES, COLOR_RED]); hell(FussRotA); dunkel(FussGruenA); } else if (my_state == 1) { llSetLinkPrimitiveParams(FussGruenA, [PRIM_COLOR, ALL_SIDES, COLOR_GREEN]); hell(FussGruenA); dunkel(FussRotA); } } setFussgaengerAmpelB(integer my_state) { if (my_state == 0) { llSetLinkPrimitiveParams(FussRotB, [PRIM_COLOR, ALL_SIDES, COLOR_RED]); hell(FussRotB); dunkel(FussGruenB); } else if (my_state == 1) { llSetLinkPrimitiveParams(FussGruenB, [PRIM_COLOR, ALL_SIDES, COLOR_GREEN]); hell(FussGruenB); dunkel(FussRotB); } }
// Funktion für das Blinken der gelben Lichter blinkGelb() { if (isYellowBlinking) { dunkel(CarGelbA); dunkel(CarGelbB); } else { llSetLinkPrimitiveParams(CarGelbA, [PRIM_COLOR, ALL_SIDES, COLOR_YELLOW]); llSetLinkPrimitiveParams(CarGelbB, [PRIM_COLOR, ALL_SIDES, COLOR_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 Ich steige auf eine Leiter:in
RE: Ampel.lsl - Manfred Aabye - 14.11.2024
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_COLOR, ALL_SIDES, <redValue, greenValue, blueValue>, transparenz, PRIM_GLOW, ALL_SIDES, helligkeit ]); }
default { state_entry() { // Initiale Farbe auf Schwarz setzen (alle Farben 0.0) llSetLinkPrimitiveParamsFast(LINK_ROOT, [ PRIM_COLOR, ALL_SIDES, <0.0, 0.0, 0.0>, transparenz, PRIM_GLOW, ALL_SIDES, helligkeit ]); }
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_COLOR, ALL_SIDES, <0.0, 0.0, 0.0>, transparenz, PRIM_GLOW, ALL_SIDES, helligkeit ]); } }
timer() { // Wenn der Farbwechselmodus aktiv ist, setze alle Farben zufällig if (isColorCycling) { setRandomColor(); // Zufällige Farbe setzen } } }
RE: Ampel.lsl - Manfred Aabye - 14.11.2024
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.0, 1.0, 1.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_COLOR, ALL_SIDES, <redValue, greenValue, blueValue>, transparenz, PRIM_GLOW, ALL_SIDES, helligkeit ]); // Licht an llSetLinkPrimitiveParamsFast(LINK_ROOT, [ PRIM_POINT_LIGHT, anaus, <redValue, greenValue, blueValue>, intensiv, radius, abfallwert ]); }
default { state_entry() { // Initiale Farbe auf Schwarz setzen (alle Farben 0.0) llSetLinkPrimitiveParamsFast(LINK_ROOT, [ PRIM_COLOR, ALL_SIDES, <0.0, 0.0, 0.0>, transparenz, PRIM_GLOW, ALL_SIDES, helligkeit ]); // Licht aus llSetLinkPrimitiveParamsFast(LINK_ROOT, [ PRIM_POINT_LIGHT, FALSE, <0.0, 0.0, 0.0>, intensiv, radius, abfallwert ]); }
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_COLOR, ALL_SIDES, <0.0, 0.0, 0.0>, transparenz, PRIM_GLOW, ALL_SIDES, helligkeit ]); // Licht aus llSetLinkPrimitiveParamsFast(LINK_ROOT, [ PRIM_POINT_LIGHT, FALSE, <0.0, 0.0, 0.0>, intensiv, radius, abfallwert ]); } }
timer() { // Wenn der Farbwechselmodus aktiv ist, setze alle Farben zufällig if (isColorCycling) { setRandomColor(); // Zufällige Farbe setzen } } }
|