Jump to content

Überprüfung von Vorhandensein und Namen von Animationen möglich?


Recommended Posts

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

 

 

 

Edited by walterMBS
Ergänzung
Link to post
Share on other sites

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

Link to post
Share on other sites

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

Link to post
Share on other sites

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

Link to post
Share on other sites

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

Link to post
Share on other sites

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

Animation abspielen.JPG

Link to post
Share on other sites

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

Link to post
Share on other sites

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:

temp.JPG

wichtig ist, dass du Variable erweitert verwendest.

Gruß Ronald

Edited by RoniHB
Ergänzung
Link to post
Share on other sites

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

Link to post
Share on other sites

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

Link to post
Share on other sites

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

Link to post
Share on other sites
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

Link to post
Share on other sites

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

Link to post
Share on other sites

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

Link to post
Share on other sites

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.

temp.JPG.53cd6c9098f2e2baff25068bf3925429.JPG

Ich hoffe, damit ist der Sonntag gerettet.

LG Ronald

Link to post
Share on other sites

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

Link to post
Share on other sites

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:


 

Anmerkung 2020-08-16 183336.jpg

Link to post
Share on other sites

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

Link to post
Share on other sites

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

Link to post
Share on other sites

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:

2120482270_01Konfigurationsbeispiel.thumb.jpg.fc8822a552458bce301d46f570acc2ef.jpg

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.

1725460953_02WagenlistealsBehlterderLok.thumb.jpg.2c87b914067660da53de793f54f0081d.jpg

In unserem Beispieel ist dies eine "Wagenliste", die als Objekt-Variable der Zuglok definiert wurde.

551332867_03Ereignisdefinition.thumb.jpg.3ac539cf86079195d3353cee2e975484.jpg

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.

1369224462_04ERgebnis.thumb.jpg.3addead06dffe808ad1c62658713d597.jpg

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

Link to post
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...