diff --git a/MultiSchalten.lua b/MultiSchalten.lua deleted file mode 100644 index 3800122..0000000 --- a/MultiSchalten.lua +++ /dev/null @@ -1,73 +0,0 @@ -require("kskit\\On") - --- Die Indice der Schaltverbindungen, welche eben einen Callback reinbekommen haben und geprueft werden muessen -local IndexGeaendert={} --- Die Tabelle mit den Schaltverbindungen, die wir vom User bekommen haben -local SchaltenTabelle={} - --- Ausgabefunktion, dummy --- Wenn Ausgabe gewuenscht, mit MultiSchaltenMelden=print ueberschreiben -function MultiSchaltenMelden(...) -end - --- Fuer jedes Dann-Element in der Tabelle registrieren wir einen Callback --- Dank des On-Modules koennen mehrere Zeilen einen Callback auf das selbe Signal oder Weiche eintragen -function MultiSchaltenInit(Tabelle) - SchaltenTabelle=Tabelle - for k, Eintrag in pairs(Tabelle) do - -- Grobe Fehlerueberpruefung - assert(#Eintrag.Wenn % 2 == 0, "Eintrag "..k..": Wenn-Liste muss eine gerade Anzahl Elemente haben") - assert(#Eintrag.Dann % 2 == 0, "Eintrag "..k..": Dann-Liste muss eine gerade Anzahl Elemente haben") - -- Fuer jede ID in der Liste einen Callback erstellen - for i=1,#Eintrag.Wenn,2 do - local ID=Eintrag.Wenn[i] - if EEPGetSignal(ID) > 0 then - OnSignal(ID, function() - -- Hier merken wir uns den Index unserer Zeile, das wir das von der Main aus ueberpruefen - IndexGeaendert[k]=true - end) - elseif EEPGetSwitch(ID) > 0 then - OnSwitch(ID, function() - IndexGeaendert[k]=true - end) - else - error("ID "..tostring(ID).." ist nicht vergeben") - end - end - end -end - --- Eingegangene Callbacks auswerten -function MultiSchaltenMain() - -- Nur die Zeilen auswerten, fuer die eben ein Callback eingegangen ist - for k, _ in pairs(IndexGeaendert) do - local Eintrag=SchaltenTabelle[k] - local BedingungErfuellt=true - -- Die Bedingungen durchgehen - for i=1,#Eintrag.Wenn,2 do - local ID=Eintrag.Wenn[i] - local Soll=Eintrag.Wenn[i+1] - -- Sowohl Signal als auch Switch abfragen, wir wissen ja nicht ob die ID ein Signal oder Weiche ist - if EEPGetSignal(ID) ~= Soll and EEPGetSwitch(ID) ~= Soll then - MultiSchaltenMelden("MultiSchalten "..tostring(k)..": ",ID," ist nicht ",Soll) - BedingungErfuellt=false - end - end - -- Die Folgen durchgehen - if BedingungErfuellt then - for i=1,#Eintrag.Dann,2 do - local ID=Eintrag.Dann[i] - local Soll=Eintrag.Dann[i+1] - if EEPGetSignal(ID) > 0 then - MultiSchaltenMelden("MultiSchalten "..tostring(k)..": Signal ",ID," auf ",Soll) - EEPSetSignal(ID, Soll, 1) - else - MultiSchaltenMelden("MultiSchalten "..tostring(k)..": Weiche ",ID," auf ",Soll) - EEPSetSwitch(ID, Soll, 1) - end - end - end - end - -- Gemerkte Callbacks loeschen - IndexGeaendert={} -end