Jump to content

EV - Wiederholungen, Listen und Tabellen


Empfohlene Beiträge

Die Erweiterung für die EV welche ich im folgenden beschreibe, ist derzeit noch in der Entwicklung.

Mit dem nächsten Update wird man in der EV die Möglichkeit haben, mit einer einzigen Aktion mehrere Objekte anzusprechen.
Beispielsweise mit einem Schalter alle Lampen an- oder auszuschalten, denen man dasselbe Schlagwort gegeben hat:

93188326_Listen06WiederholungAuswahlSchlagwort.jpg.4af8565a13420fefefc4381bec3233c6.jpg

 

Im Beispiel gebe ich 8 Paulaner Laternen dasselbe Schlagwort "Biergarten".

955819448_Listen03Schlagwort.thumb.JPG.40c46c64d41fdeb04e007fa4f3fb2aeb.JPG

 

In der EV kann ich nun eingeben, dass sie in einer Wiederholung nacheinander alle Objekte mit diesem Schlagwort suchen soll.

258761803_Listen08WiederholungSchlagwort.thumb.JPG.f87b57b74ee04b47836b45c3d03b901e.JPG

Das gefundene Objekt wird an eine lokale Variable namens "Wdh" übergeben 
und diese Variable kann ich innerhalb der Wiederholung als Ziel einer Aktion auswählen.

1413434682_Listen09WiederholungObjekt.JPG.247ac86941301c786efa3f075ad609d7.JPG

Die Aktion "Animation abspielen" wird für alle Objekte mit dem Schlagwort Biergarten durchgeführt.

Nacheinander wird jedes dieser Objekte als "Wdh" an die Aktion "Animation abspielen" übergeben. Obwohl die Aktionen für alle Laternen nacheinander ausgeführt werden, gehen alle Laternen zugleich an bzw. aus. Denn die Übermittlung der einzelnen Befehle geht rasend schnell. Die Ausführung des Befehls übernehmen die einzelnen Objekte selber. 

 

Eine Alternative zu Schlagwörtern sind Listen.
Das sind durchnummerierte Aufzählungen, die zum Beispiel Objekte (aber ebenso gut auch alle anderen Variablen) enthalten können.

400771430_Listen10Laternen.thumb.JPG.eac72f872526f97ca0fb54e87a946964.JPG

Hier habe ich im Kippschalter eine Liste namens "Laternen" hinterlegt, in der alle Laternen einzeln aufgeführt sind.

Diese Liste kann ich ebenfalls für eine Wiederholung verwenden.

2060000186_Listen11VariableListe.JPG.0b42294e40c7dee8a1c397deebc0ed7c.JPG

Für die Wiederholung wähle ich die Liste wie eine Variable aus.

Die einzelnen Objekte der Liste übergebe ich wieder an einen temporären Speicher.
In diesem Beispiel habe ich ihn in "ListenElement" umbenannt.
Das Objekt in diesem temporären Speicher ist dann wieder das Ziel meiner Aktion:

932844526_Listen12ListenElement.JPG.410dc9e1dc899c964fc4acd1655f096b.JPG

Das Ergebnis ist dasselbe. Alle Lampen werden bei Betätigung des Schalters ein- oder ausgeschaltet.

Bei Verwendung von Lua kann man auch auf die Prüfung der Schalterstellung verzichten und sie stattdessen direkt als Parameter für die Animation verwenden:

local animPos = (state + 1) % 2      -- state ist die Stellung des auslösenden Schalters
local animDir = state * 2 - 1

local t = $("Kippschalter").variables["Laternen"] 

for i, Wdh in ipairs(t) do
  Wdh.animations["Licht An/Aus"]:play(animPos, animDir)
end

 

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Liste oder Tabelle? Was ist der Unterschied? Wann benutzt man was?

Während eine Liste eine nummerierte Aufzählung von Elementen ist, bekommen alle Elemente einer Tabelle Namen.

Die nummerierte Aufzählung benötigt man dann, wenn man alle Elemente in einer Schleife ansprechen möchte.
Eine namentliche Aufzählung ist sinnvoll, wenn man die Elemente individuell auswählen möchte.

Vielfach wird man beides kombinieren und dafür möchte ich im folgenden ein Beispiel beschreiben.

Für einen Weichengruppenschalter benötigt man eine Liste von Weichen und Stellungen.

1462181350_Listen13WeichengruppeStellpult.thumb.JPG.473e6d0da3629b0912980067656d5ec9.JPG

Wenn ich hier von Einfahrsignal A im Westen ins Gleis 6b möchte, dann muss ich insgesamt 6 Weichen und DKWs in unterschiedliche Stellungen bringen.
Diesen Weg kann ich nun komplett in einem Konstrukt aus Listen und Tabellen speichern.

Weil ich bei Betätigung des Gruppenschalters alle Weichen schalten möchte, benötige ich eine Liste mit 6 Elementen. Weil ich für jede der Weichen das Objekt und die Stellung hinterlegen möchte, besteht jedes dieser 6 Elemente aus einer Tabelle mit zwei Einträgen: Einem Objekt "Weiche" und einer Zahl "Stellung".

378058735_Listen14WeichengruppeListe.thumb.JPG.7582ce5da87b557d29e4b38b9db43a75.JPG

 

In der EV kann ich nun auf Tastendruck alle Elemente der Liste nacheinander benutzen. Ich entnehme jedem Element die Weiche und die Stellung und verwende diese beiden Tabelleneinträge in meiner Aktion "Weiche stellen":

1601615459_Listen15WeichengruppeEVListenelemente.thumb.JPG.ff2f7d350fe927f708724fe3c8f2e3f4.JPG

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ein kleiner Abstecher, der nur am Rande etwas mit dem eigentlichen Thema zu tun hat.

Ich habe gerade dank Neos Hilfe gelernt, wie man in der EV auf die Fallunterscheidung verzichten und die Schalterstellung direkt als An/Aus für die Lichter nutzen kann.

Wenn man "Animation stoppen" verwendet anstelle von "Animation abspielen", dann hat man auch da die Möglichkeit, die Position anzugeben, an der die Animation stehen soll. Für das Licht interessieren mich nur zwei Positionen: Start und Ende. Die haben die Werte 0 und 1. Das entspricht der Stellung, die ich vom Schalter bekomme. Deshalb kann ich die Position des Auslösers direkt als Wert für die Position der Animation benutzen.

703375169_Listen16LaternenohneFallunterscheidung.jpg.ccd4b0945bf718466faf2c022f717703.jpg

Jetzt steht in der EV für "Schalter wird betätigt" nur noch eine Schleife, welche die Lampen je nach Schalterposition ein oder ausschaltet.
Das ist schön übersichtlich und effektiv.

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

To have a variable of type "List" will be very useful. At the moment, as a work-around, I am having to use comma separated strings stored in  text variables then converting them into lists using Lua. Do you know when the update which includes List variables will be available? Best wishes.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden
×
×
  • Neu erstellen...