14.11.2024, 17:27
(Dieser Beitrag wurde zuletzt bearbeitet: 14.11.2024, 17:43 von Manfred Aabye.)
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.
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
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
Ein Metaversum sind viele kleine Räume, die nahtlos aneinander passen,
sowie direkt sichtbar und begehbar sind, als wäre es aus einem Guss.
sowie direkt sichtbar und begehbar sind, als wäre es aus einem Guss.