walterKY Geschrieben 15. August 2020 Geschrieben 15. August 2020 (bearbeitet) Hallo an Alle! Gibt es eine Möglichkeit, per EV oder Lua das Vorhandensein einer Animation oder ihren jeweiligen Namen zu erfragen? Der Hintergrund ist folgender: Ich möchte vor Straßenkreuzungen den passenden Blinker von Fahrzeugen setzen. Das Problem dabei ist, daß einige Fahrzeuge im Katalog diese Animation nicht besitzen oder falls vorhanden, die Animationen ganz unterschiedliche Namen haben (z.B. 01 Blinker links, 06 Blinker links, Blinker Links usw.). Gruß Walter Bearbeitet 15. August 2020 von walterMBS Ergänzung
Andy Geschrieben 15. August 2020 Geschrieben 15. August 2020 Hallo Walter, das ist in der Tat ein ziemliches Problem, was mal sehr gründlich diskutiert werden sollte. Ich habe mal eine Vereinheitlichung gewisser Namen angeregt und bin dafür ziemlich angezischt worden. Jetzt haben wir den Salat. Gruß Andy
maxwei Geschrieben 15. August 2020 Geschrieben 15. August 2020 Hallo @Andy, ja das hatten wir schon mal, verlief irgendwie im Sande, ich bin aber nach wie vor dafür (schrieb ich auch schon mal) eine Art Katalog zu erstellen für Standard-Animationen. lg max
walterKY Geschrieben 15. August 2020 Autor Geschrieben 15. August 2020 Hallo Andy und maxwei, eine Vereinheitlichung der Animationsnamen würde ich auch sehr begrüßen. Allerdings würde das auch viel Nacharbeit bedeuten, falls die Objekte schon in Anlagen verwendet werden und über die EV angesprochen werden. So wird das wohl auch in Zukunft so bleiben wie jetzt mit dem Durcheinander der Namen. Nur Neo könnte wohl durch strikte Vorgaben hier etwas durchsetzen. Trotzdem vielen Dank Walter
Neo Geschrieben 15. August 2020 Geschrieben 15. August 2020 Hallo Walter, einheitliche Animationsnamen stehen auch bei mir auf der ToDo-Liste, gerade auch in Hinblick auf Beleuchtung. Aktuell müssen wir mit der jetzigen Situation noch leben. Wie wär's, wenn du bei jedem Fahrzeug selber als Objektvariable den Namen der Blinkeranimation hinterlegst? Dadurch kannst du einheitlich die Blinker ansteuern (bzw. es auch sein lassen, wenn ein Fahrzeug keine Blinkeranimationsvariable besitzt). Viele Grüße, Neo
walterKY Geschrieben 15. August 2020 Autor Geschrieben 15. August 2020 Hallo @Neo, hört sich nach einer sehr brauchbaren Lösung für mein Problem an. Werde ich umgehend ausprobieren. Danke Walter
walterKY Geschrieben 15. August 2020 Autor Geschrieben 15. August 2020 Hallo @Neo, ich scheitere bei der von Dir angeregten Lösung daran, daß mir in der EV bei "Animation abspielen" als Auslöser nicht wie sonst Gleiskontakt und Fahrzeug angeboten werden, sondern nur Gleiskontakt. Wenn ich auch das Fahrzeug als Objektvariable an den Gleiskontakt übergebe und es dann über erweiterte Variablen versuche, gibt es nil value-Fehler, obwohl in der Protokollierungsanzeige die Gleiskontakt-Variablen korrekt angelegt sind. Eine Idee zur Lösung? Gruß Walter
Neo Geschrieben 15. August 2020 Geschrieben 15. August 2020 Hallo Walter, an dieser Stelle bist du noch auf eine Einschränkung der grafischen EV gestoßen. Die Aktion "Animation abspielen" ist noch nicht flexibel genug, um Fahrzeuge als Auslöser zu unterstützen. Workarounds gibt es mehrere: Du könntest diese eine Aktion in Lua schreiben: vehicle.animations["Blinker links"]:play(... Du speicherst das Fahrzeug temporär in einer Kontaktvariable (oder einer beliebigen anderen Variable) Viele Grüße, Neo
walterKY Geschrieben 15. August 2020 Autor Geschrieben 15. August 2020 Danke Neo, ich denke, ich werde es morgen mal mit Lua versuchen. Einen schönen Abend! Walter
RoniHB Geschrieben 15. August 2020 Geschrieben 15. August 2020 (bearbeitet) Hallo @walterMBS, hier meine Lösung dazu: Du legst in deinen Fahrzeugen eine Variable vom Typ Text an in der die Animation steht, und eine Variable vom Typ Objekt wo der Objektname deines Fahrzeugs steht. Das sieht dann wie folgt aus: wichtig ist, dass du Variable erweitert verwendest. Gruß Ronald Bearbeitet 15. August 2020 von RoniHB Ergänzung
walterKY Geschrieben 15. August 2020 Autor Geschrieben 15. August 2020 Danke @RoniHB! Sieht nach einer einfachen Lösung meines Problems aus. Werde ich morgen ausprobieren und berichten. Schönen Abend auch Dir Walter
Andy Geschrieben 15. August 2020 Geschrieben 15. August 2020 Hallo Jungs, ich unterstütze einen vorläufigen Workaround mittels Tabellen. Vielleicht können wir da ja mal ein erstes kleines zuladbares Lua-Modul machen, sodass nicht jeder seinen eigenen Brei kochen muß und die Leute, die mit Lua nix am Hut haben, dies zuladen können und alles flutscht. So war die Idee mit Lua ja eigentlich auch gedacht und dann kapiert das auch endlich jeder. Wenn es darin endet, dass der Anwender nur die Aktion 'Skript ausführen' aufrufen muß und darin eine gut dokumentierte Funktion aufruft, diese flexible Lösung wäre absolut zumutbar. Und sie würde leidliche Diskussionen beenden. Gruß Andy
RoniHB Geschrieben 15. August 2020 Geschrieben 15. August 2020 Hallo Andy, vor 42 Minuten schrieb Andy: Vielleicht können wir da ja mal ein erstes kleines zuladbares Lua-Modul machen, was meinst du genau damit, so eine Art Bibliothek für benutzerdefinierte Ereignisse auf Lua basierend? Der User ruft den Baustein in der grafischen EV auf und versorgt nur noch die Parameter? Man müsste erstmal überlegen für welche Funktionen solche Bausteine sinnvoll wären und dann mal einen entwickeln. LG Ronald
walterKY Geschrieben 16. August 2020 Autor Geschrieben 16. August 2020 Hallo @RoniHB, leider funktioniert Deine Lösung bei mir nicht. Der Blinker wird nicht ausgelöst und wenn die Ereignisprotokollierung offen ist, wird ein Index nil value-Fehler angezeigt. Ansonsten habe ich Deinen Vorschlag genauso umgesetzt wie beschrieben (denke ich zumindest). Ich füge mal die kleine Testanlage an. Vielleicht findest Du oder sonst jemand meinen Fehler? Test Blinker.mbp
Andy Geschrieben 16. August 2020 Geschrieben 16. August 2020 vor 12 Stunden schrieb RoniHB: so eine Art Bibliothek für benutzerdefinierte Ereignisse auf Lua basierend? Ja, überhaupt eine Bibliothek. Muß nicht nur für benutzerdefinierte Ereignisse sein. Gruß Andy
Neo Geschrieben 16. August 2020 Geschrieben 16. August 2020 Hallo, vor 1 Stunde schrieb walterMBS: Vielleicht findest Du oder sonst jemand meinen Fehler? der Animationsname ist falsch in der Objektvariable des Fahrzeugs hinterlegt. Korrekt muss er lauten: "01 Blinker links" (achte auf das doppelte Leerzeichen nach 01). Viele Grüße, Neo
walterKY Geschrieben 16. August 2020 Autor Geschrieben 16. August 2020 Danke @Neo für den Hinweis. Böse Falle und ein weiteres Argument für die Vereinheitlichung der Animationsnamen. Danke @RoniHB . Deine Lösung funktioniert super, wenn man nicht, wie ich, ein Leerzeichen bei einer Variable wegläßt. Gruß Walter
RoniHB Geschrieben 16. August 2020 Geschrieben 16. August 2020 Hallo @walterMBS, du soweit alles richtig gemacht, bis auf den Namen der Animation: Hinter der 01 im Namen stehen 2 Leerzeichen, bei dem von dir eingetrgenem Namen ist nur 1. Daher die Meldung von der EV dass das Element nicht gefunden wurde. Ich hoffe, damit ist der Sonntag gerettet. LG Ronald
walterKY Geschrieben 16. August 2020 Autor Geschrieben 16. August 2020 Danke @RoniHB. Neo hatte mich auch schon auf diesen blöden Fehler hingewiesen. Deine Lösung ist wirklich bestechend einfach und funktioniert einwandfrei. LG Walter
JimKnopf Geschrieben 16. August 2020 Geschrieben 16. August 2020 Hallo @Andy, so in etwa: Gleis versetzen --[[ Quelle ist hier das Gleis "SB01-Gleis 01" Ziel ist hier ein Grundkörper mit Namen "Setzpunkt SB01-Gleis 01" --]] local Quelle = $("SB01-Gleis 01") local Ziel = $("Setzpunkt SB01-Gleis 01") Quelle.transformation.position = Ziel.transformation.position Quelle.transformation.rotation = Ziel.transformation.rotation Das ist aus Roter Brummer sein Modul 2020-SB01 links... Gruß Axel
Andy Geschrieben 16. August 2020 Geschrieben 16. August 2020 Hallo Axel, nein - die Parameter müßten nach draußen. Der zuladbare Teil würde lauten: function ZumZielBewegen(Quelle, Ziel) Quelle.transformation.position = Ziel.transformation.position Quelle.transformation.rotation = Ziel.transformation.rotation end und in der grafischen EV kann nun der Funktionsaufruf wie folgt eingebunden werden:
JimKnopf Geschrieben 16. August 2020 Geschrieben 16. August 2020 Hallo Andy, ja, wie das korrekt geschrieben wird das wisst ihr als Lua Experten dann schon. Nur mit der Erläuterung was der Skript eigentlich macht muss auch einer der nichts mit Lua am Hut hat, so wie ich, klarkommen. Wenn da am Ende eine schöne Liste mit Skripts zustande kommt wäre das Super. Meinen Daumen 👍 habt ihr schon, für die ganze Arbeit die dadrin steckt. Gruß Axel
Neo Geschrieben 16. August 2020 Geschrieben 16. August 2020 Hallo, vor 3 Stunden schrieb Andy: und in der grafischen EV kann nun der Funktionsaufruf wie folgt eingebunden werden: wäre es nicht benutzerfreundlicher, wenn man Hilfsfunktionen über benutzerdefinierte Ereignisse abbildet? Dort werden bereits auf grafischer Ebene die Parameter definiert, sodass es für den Anwender am Ende gar keine Rolle spielt, ob hinter der Hilfsfunktion Lua oder die grafische EV steckt. Funktioniert natürlich nur mit Methoden, die keine Rückgabewerte liefern. Viele Grüße, Neo
Andy Geschrieben 16. August 2020 Geschrieben 16. August 2020 Hallo Neo, ich habe zugegebenermaßen noch viel zu selten mit benutzerdefinierten Ereignissen gearbeitet. Gruß Andy
BahnLand Geschrieben 17. August 2020 Geschrieben 17. August 2020 Hallo @Neo, vor 10 Stunden schrieb Neo: wäre es nicht benutzerfreundlicher, wenn man Hilfsfunktionen über benutzerdefinierte Ereignisse abbildet? Dort werden bereits auf grafischer Ebene die Parameter definiert, sodass es für den Anwender am Ende gar keine Rolle spielt, ob hinter der Hilfsfunktion Lua oder die grafische EV steckt. Funktioniert natürlich nur mit Methoden, die keine Rückgabewerte liefern. ja, so stelle ich mir eine kleine Hilfsbibliothek vor, die fertig vorprogrammierte Benutzer-definierte Ereignisse enthält, die von jedem in seine Ereignissteuerung eingebaut werden können. Dazu benötigt man aber einen Ablageort im Online-Katalog, wo man solche vordefiierte Ereignisdefinitionen ablegen kann. Ich habe für meinen Ablaufberg eine solches Benutzer-definiertes Ereignis gebastelt, das "im Inneren" ein kleines Lua-Script enthält, das der Anwender dieser Ereignisdefinition überhaupt nicht zur Kenntnis zu nehmen braucht. Er muss nur dafür sorgen, dass die hinter den mitzugebenden Parameter auf korrekte Ablage-"Behälter" zeigen, damit dort vom Lua-Script auch Rückgabewerte hinterlegt werden können. Es ist also damit möglich, auch "Rückgabewerte" zurückzugeben - wenn auch indirekt über den als Eingabewert bereitgestellten "Behälter". Hier nun mein Beispiel: Von einem Zug sollen alle Wagen in einer Liste hinterlegt werden, die dann später ausgewertet werden kann. Da man im Beutzer-definierten Ereignis keine Rückgabewerte spezifizieren kann, Wird dort ein "Ort" spezifiziert, an dem das Lua-Script die Rückgabeweete hinterlegen kann. In unserem Beispieel ist dies eine "Wagenliste", die als Objekt-Variable der Zuglok definiert wurde. Das Benutzer-definierte Ereignis selbst besitzt 2 Aufrufparameter: im ersten Parameter "ListenObjekt" soll jener Ort spezifiziert werden, an dem die Ergebnisliste abgelegt werden soll. In unserem Beispiel ist dies die Lok. Im zweiten Parameter "ZugObjekt" wird die Kennzeichnung des ZUges hinterlegr, dessen Fahrzeuge aufgelistet werden sollen. Dies ist hier ebenfalls die Lok. Die eigentliche Funktion, die nicht direkt in der grafischen Oberfläche der Ereignisverwaltung realisiert werden kann, ist die Funktion "Layout:getVehicleGroup(Parameter)", wobei als Parameter das ZugObjekt aus den Eingabeparametern eingesetzt wird. Hiermit werden alle Fahrzeuge des Zugs festgestellt und in einer temporären Variable zusammengestellt. Die restlichen Anweisungen übertragen schließlich die Liste der Einzelfahrzeuge in die Wagenliste, die als Objekt-Variable der Lok definiert ist und über die Lok als Parameter an das Benutzer-definierte Ereignis übergeben wurde. Als Ergebnis des Aufrufs dieser Ereignisdefinition erhält man schließlich die oben gezeigte Fahrzeugliste in der Objekt-Variable "Wagenliste" der Lok, in der nun alle Fahrzeuge des Zugs (einschließlich der Lok) aufgelistet sind. Der Aufrufer des Benutzer-definierten Ereignisses, braucht nur das Ereignis (aus dem Online-Katalog) zu kennen und zu wissen, welche Parameter zu übergeben sind - und natürlich die Liste für die Fahrzeuge bereitzustellen. Das Lua-Script selbst braucht er nicht zu kennen und muss es auch nicht interpretieren können. Viele Grüße BahnLand
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