MultiSchalten.lua entfernen, Funktionalität ist jetzt Teil der On.lua
This commit is contained in:
parent
4a28547d80
commit
9ae65e50a1
@ -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
|
Loading…
Reference in New Issue
Block a user