Goetz Posted October 20, 2021 Posted October 20, 2021 (edited) 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 Edited October 20, 2021 by Goetz Formatierungsfehler korrigiert
Hawkeye Posted October 20, 2021 Posted October 20, 2021 (edited) 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 Edited October 20, 2021 by Hawkeye
Goetz Posted October 20, 2021 Author Posted October 20, 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 Posted October 21, 2021 Posted October 21, 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 Posted October 21, 2021 Author Posted October 21, 2021 (edited) 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 Edited October 21, 2021 by Goetz Formatierungsfehler korrigiert
Hawkeye Posted October 21, 2021 Posted October 21, 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
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now