Goetz Geschrieben 20. Oktober 2021 Geschrieben 20. Oktober 2021 (bearbeitet) Hallo Hawkeye, vor 3 Stunden schrieb Hawkeye: Verbesserungsvorschläge sind immer willkommen. Dann habe ich hier einen neuen Türöffner für dich: --[[---------------------------------------------------------------------------------------------- Türen öffnen, wenn Zug am Bahnsteig hält und Animation "Türen öffnen/schließen" vorhanden ist. ------------------------------------------------------------------------------------------------]] local BahnsteigSeite = ({["links"] = 0, ["rechts"] = 1})[Zug.variables["Bahnsteig"]] local Fahrtrichtung = ({["vorwärts"] = 0, ["rückwärts"] = 1})[Zug.variables["Richtung"]] for i, Wagen in pairs(layout:getVehicleGroup(Zug, 0)) do local Wagenrichtung = ({["links"] = 0, ["rechts"] = 1})[Wagen.variables["Türen in Fahrtrichtung"]] if BahnsteigSeite and Fahrtrichtung and Wagenrichtung then local Seite = (BahnsteigSeite + Fahrtrichtung + Wagenrichtung) % 2 + 1 -- ergibt 1 oder 2 local Tueren = Wagen.variables["Tueren"][Seite] if Tueren then Wagen.animations[Tueren]:play(-1, 1) end end end Die Basis ist, dass alle Einzelbedingungen gemeinsam haben, dass sie ein entweder/oder sind. Und auch in Summe ergeben sie wieder entweder/oder -> Tür links oder rechts. Das entspricht gerade oder ungerade. Und das bekomme ich mit Modulo 2. Da zuletzt die Zahl 1 oder 2 benötigt wird, addiere ich dem Modulo Ergebnis noch eine 1 hinzu. Noch etwas zu der Art, wie ich deine Texte aus den Variablen in Zahlen umwandle: {["links"] = 0, ["rechts"] = 1} ist eine Tabelle mit den Bezeichnern "links" und "rechts" für die Werte 0 und 1. Wenn man die Tabelle in runde Klammern setzt und dahinter in eckige Klammern einen Bezeichner schreibt, ist das Ergebnis das Element aus der Tabelle, welches durch den Bezeichner benannt wird. Existiert der Bezeichner, der in der eckigen Klammer angegeben ist, in der Tabelle nicht, ist das Ergebnis = nil In der Prüfung wird nil von Lua als false gewertet. Deshalb muss ich dort nur den Inhalt prüfen und keinen Vergleich anstellen. Jeder existierende Wert einschließlich 0 gilt in Lua als true Viele Grüße Götz Bearbeitet 20. Oktober 2021 von Goetz Formatierungsfehler korrigiert
Hawkeye Geschrieben 20. Oktober 2021 Geschrieben 20. Oktober 2021 (bearbeitet) vor 59 Minuten schrieb Goetz: Dann habe ich hier einen neuen Türöffner für dich: Hallo Götz, Danke dafür, 👍👍 Werde ich morgen mal probieren.😊 Die Entwicklung aller möglichen Kombinationen, bis es dann endlich für alle Fahrzeuge und Waggons reibungslos funktionierte, hatte schon ein Weilchen gedauert. Deshalb auch noch die vielen print()- Anweisungen für das Ereignisprotokoll (zur Fehlersuche) Wenn der Code noch optimiert werden kann, umso besser.👍 Nochmals Merci und viele Grüße, Hawkeye Bearbeitet 20. Oktober 2021 von Hawkeye
Goetz Geschrieben 20. Oktober 2021 Autor Geschrieben 20. Oktober 2021 vor 24 Minuten schrieb Hawkeye: Die Entwicklung aller möglichen Kombinationen, bis es dann endlich für alle Fahrzeuge und Waggons reibungslos funktionierte, hatte schon ein Weilchen gedauert. Und davon habe ich bei meiner Optimierung profitiert. Weil ich sehen konnte, welche Faktoren beachtet werden müssen.
Hawkeye Geschrieben 21. Oktober 2021 Geschrieben 21. Oktober 2021 vor 7 Stunden schrieb Goetz: Und davon habe ich bei meiner Optimierung profitiert. Das ist doch schön zu hören, das du auch mal profitieren kannst. In 95% der Fälle kommen die Tipps von dir.
Goetz Geschrieben 21. Oktober 2021 Autor Geschrieben 21. Oktober 2021 (bearbeitet) Guten Morgen, Hawkeye Da diese Spezialform von kleinen Zuordnungstabellen vielleicht doch zu exotisch ist, habe ich gerade noch eine Variante geschrieben, die eher "klassisch" gestrickt ist: --[[---------------------------------------------------------------------------------------------- Türen öffnen, wenn Zug am Bahnsteig hält und Animation "Türen öffnen/schließen" vorhanden ist. ------------------------------------------------------------------------------------------------]] local WerteTabelle = {["links"] = 0, ["rechts"] = 1, ["vorwärts"] = 0, ["rückwärts"] = 1} local BahnsteigSeite = WerteTabelle[Zug.variables["Bahnsteig"]] local Fahrtrichtung = WerteTabelle[Zug.variables["Richtung"]] for i, Wagen in pairs(layout:getVehicleGroup(Zug, 0)) do local Wagenrichtung = WerteTabelle[Wagen.variables["Türen in Fahrtrichtung"]] if BahnsteigSeite and Fahrtrichtung and Wagenrichtung then local Seite = (BahnsteigSeite + Fahrtrichtung + Wagenrichtung) % 2 + 1 -- ergibt 1 oder 2 local Tueren = Wagen.variables["Tueren"][Seite] if Tueren then Wagen.animations[Tueren]:play(-1, 1) end end end Mit einer einzigen Wertetabelle am Anfang sind alle Umformungen im Code vielleicht einfacher nachvollziehbar. Im Kern passiert aber exakt dasselbe wie im Beispiel darüber. Viele Grüße Götz Bearbeitet 21. Oktober 2021 von Goetz Formatierungsfehler korrigiert
Hawkeye Geschrieben 21. Oktober 2021 Geschrieben 21. Oktober 2021 vor 33 Minuten schrieb Goetz: Da diese Spezialform von kleinen Zuordnungstabellen vielleicht doch zu exotisch ist Moin Götz, gar nicht, ich finde Alternativen in jeder Form gut, wenn ich weis, welches Ergebnis erzielt werden soll. Dann kann ich den Code auch nachvollziehen. Meine Programmierkenntnisse beziehen sich leider noch auf Fortran, Basic und Turbopascal. Das ist schon eine Weile her. Ich lerne aber mit Lua gerne weiter dazu, weil es Spaß macht. Deshalb immer nur her damit. Viele Grüße, Hawkeye
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren
Du musst ein Benutzerkonto besitzen, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen.
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde dich hier an.
Jetzt anmelden