diff --git a/On.lua b/On.lua deleted file mode 100644 index 0e37288..0000000 --- a/On.lua +++ /dev/null @@ -1,51 +0,0 @@ -local Callbacks = {} - -function On(Name, Funktion) - -- Nur Strings erlaubt! - if type(Name) ~= "string" then - error("Ungueltiger Callback-Name "..tostring(Name)) - return - end - if not Callbacks[Name] then - -- Bestehende globale Funktionen duerfen nicht ueberschrieben werden - if _G[Name] ~= nil then - error(Name.."() bereits definiert") - return - end - -- Bei Weichen und Signalen muss EEP vorher informiert werden - -- Item ist normal "Switch" oder "Signal" - local Item, Number = string.match(Name, 'EEPOn(.+)_(%d+)') - if Number ~= nil then - local Registration = "EEPRegister"..Item - if _G[Registration](Number) == 0 then - error(Registration.."("..tostring(Number)..") fehlgeschlagen") - end - end - -- Lambda-Untertabelle fuer diesen EEP Callback eroeffnen - Callbacks[Name] = {} - -- Handler installieren, der alle Lambdas ausfuehrt - _G[Name] = function(...) - for cnt = 1, #Callbacks[Name] do - Callbacks[Name][cnt](...) - end - -- EEPMain stoppt, geben wir hier nicht 1 zurueck - return 1 - end - end - table.insert(Callbacks[Name], Funktion) -end - --- EEPMain-Callback registrieren -function Main(Funktion) - On("EEPMain", Funktion) -end - --- Signal-Callback registrieren -function OnSignal(Signal, Funktion) - On("EEPOnSignal_"..tostring(Signal), Funktion) -end - --- Weichen-Callbacks registrieren -function OnSwitch(Switch, Funktion) - On("EEPOnSwitch_"..tostring(Switch), Funktion) -end diff --git a/Prototype.lua b/Prototype.lua deleted file mode 100644 index 46cbf2d..0000000 --- a/Prototype.lua +++ /dev/null @@ -1,54 +0,0 @@ -Prototype={} - -function Prototype:init() end -- dummy constructor - --- function for injecting our functionality into an table -function Prototype:__set_parent(newparent) - setmetatable(self, { - -- non-overwritten keys are to be fetched from parent - __index=newparent, - -- construct a child when called directly - __call=function(parent, ...) - local newchild = {} - self.__set_parent(newchild, parent) - newchild:init(...) - return newchild - end - }) -end - --- serialize our object into a string -function Prototype:__tostring() - local t=type(self) - if t=="table" then - local r="" - -- load and sort table keys - local tkeys={} - for k in pairs(self) do table.insert(tkeys, k) end - table.sort(tkeys, function(a,b) return tostring(a)&2 - exit 1 -} -verbose() { - echo "$@" - "$@" -} -grep ^File Install_00/Install.ini|sed 's/","/ /;s/"//g;s|\\|/|'|while read _ _ lname rname; do - test -f "${SOURCE}/${rname}" || fail "${rname} not found" - verbose cp "${SOURCE}/${rname}" "Install_00/${lname}" -done diff --git a/kskit.lua b/kskit.lua deleted file mode 100644 index a588498..0000000 --- a/kskit.lua +++ /dev/null @@ -1,266 +0,0 @@ -require("BetterContacts_BH2"){printErrors=true, deprecatedUseGlobal=true} -require("Begriffe") -require("Serializer") - -function AnimiereFahrzeugStromabnehmer(Fahrzeug, Richtung) - local Index, _ = Fahrzeug:gsub(";%d*$","") - local Angelegt = false - if Stromabnehmer[Index] then - local Achsen = Stromabnehmer[Index] - for i=1,#Achsen do - if (i == 1 and Richtung == -1) or (i == #Achsen and Richtung == 1) then - EEPRollingstockSetAxis(Fahrzeug, Achsen[i], 100) - Angelegt = true - else - EEPRollingstockSetAxis(Fahrzeug, Achsen[i], 0) - end - end - end - return Angelegt -end - --- Richtung: -1, 0 oder 1 -function setzeStromabnehmer(Zug, Richtung) - local AnzahlFahrzeuge = EEPGetRollingstockItemsCount(Zug) - local Startwert = 1 - local Endwert = AnzahlFahrzeuge - local Schritt = 1 - if Richtung > 0 then - Startwert = AnzahlFahrzeuge - Endwert = 1 - Schritt = -1 - end - for i=Startwert,Endwert,Schritt do - local Fahrzeug = EEPGetRollingstockItemName(Zug, i-1) - local ok, Vorwaerts = EEPRollingstockGetOrientation(Fahrzeug) - if ok and not Vorwaerts then - if AnimiereFahrzeugStromabnehmer(Fahrzeug, -1 * Richtung) then Richtung = 0 end - else - if AnimiereFahrzeugStromabnehmer(Fahrzeug, Richtung) then Richtung = 0 end - end - end -end - -function leseSignal(Signal) - if EEPGetSignal(Signal) == 1 then - return {FAHRT} - else - return {HALT} - end -end - -local GefundeneSignale={} -local Zugaktionen=ladeTabelle(1) -local SignalChanged={} - -setmetatable(Zugaktionen, { - __index=function(table, key) - table[key]={} - return table[key] - end -}) - -function KsKitInit() - GefundeneSignale={} - - for Signal=1,1000 do - if EEPGetSignal(Signal) > 0 and EEPGetSignal(Signal+1000) > 0 then - table.insert(GefundeneSignale, Signal) - end - end -end - -local function KsKitZugSteuern(Zugname, Aktion) - -- Wartezeit abarbeiten - -- Wie ist .D zu interpretieren? - -- nil -> kein Timer laufend - -- 0 -> Timer abgelaufen - -- >0 -> Timer laeuft noch - if Aktion.D and Aktion.D > 0 then - Aktion.D = Aktion.D - 1 - return - end - - local ok, V_ist = EEPGetTrainSpeed(Zugname) - - -- Wenn wir stehen, merken wir uns unsere Ankunftszeit - if V_ist == 0 and Aktion.A == nil then - -- 2 Sekunden Wartezeit bevor Ankunft registriert wird - if Aktion.D == nil then - Aktion.D = 10 - return - end - -- Timer erfuellt, Ankunft registrieren - Aktion.D = nil - Aktion.A = EEPTime - -- Falls wir eine Abfahrtsgeschwindigkeit haben - if Aktion.V then - -- ... von Signalbeeinflussing trennen - EEPSetTrainSpeed(Zugname, 0) - -- Falls wir einen Fahrrichtungswechsel planen - -- fahren wir jetzt die Stromabnehmer herunter - if Aktion.R then - if _G["setzeStromabnehmer"] then - setzeStromabnehmer(Zugname, 0) - end - end - end - end - - -- Ankunftszeit loeschen falls wir schon wieder beschleunigen - if V_ist ~=0 and Aktion.A then - Aktion.A = nil - Aktion.S = nil - Aktion.R = nil - Aktion.V = nil - end - - -- Wartezeit in Delay-Aktion uebertragen - if Aktion.W and Aktion.A then - if Aktion.D == nil then - Aktion.D = 5 * Aktion.W - return - end - Aktion.D = nil - Aktion.W = nil - return - end - - -- Nichts mehr tun wenn Warten ansteht - if Aktion.W then return end - - -- Signal austragen, wenn wir einen Fahrtbegriff sehen - if Aktion.S then - local Begriff = leseSignal(Aktion.S) - if Begriff[1] ~= HALT then - Aktion.S = nil - end - end - - -- Fahrstrasse schalten (greift nur wenn Signal auf Halt) - if Aktion.S then - local ZSignal = Aktion.S - local FSignal = ZSignal + 1000 - local Fahrstrassen = {} - if Aktion.FS then - Fahrstrassen = Aktion.FS - elseif Selbstblock_Default then - Fahrstrassen = {1} - end - if #Fahrstrassen > 0 then - if EEPGetSignal(FSignal) == 1 then - EEPSetSignal(FSignal, 1+Fahrstrassen[math.random(#Fahrstrassen)]) - --print("FS ",FSignal) - --Schaltauftraege[FSignal] = 1+Fahrstrassen[math.random(#Fahrstrassen)] - end - end - return - end - - -- Sobald wir nicht mehr ans Signal gebunden sind, Abfahrt via EEPSetTrainSpeed - if Aktion.V and Zugaktionen[Zugname].A then - if _G["setzeStromabnehmer"] and Aktion.D == nil then - setzeStromabnehmer(Zugname, Aktion.V>0 and 1 or -1) - Aktion.D = 20 - return - end - -- Timer erfuellt, Ankunft registrieren - Aktion.D = nil - EEPSetTrainSpeed(Zugname, Aktion.V) - Aktion.V = nil - end -end - -function KsKitMain() - -- Signale abfragen, ob vielleicht ein Zug vor ihnen steht - for i=1,#GefundeneSignale do - local Signal = GefundeneSignale[i] - if EEPGetSignalTrainsCount(Signal) > 0 then - Zugname = EEPGetSignalTrainName(Signal, 1) - if not Zugaktionen[Zugname].S then - Zugaktionen[Zugname].S = Signal - print("Zug ",Zugname," vom Signal ",Signal, " eingefangen") - end - end - end - - -- Signalstellauftraege - local Schaltauftraege = {} - local SignalHaltegruende = {} - - for Zugname, Data in pairs(Zugaktionen) do - local ok, V_ist = EEPGetTrainSpeed(Zugname) - if not ok or next(Zugaktionen[Zugname]) == nil then - Zugaktionen[Zugname] = nil - end - end - - for Zugname, Aktion in pairs(Zugaktionen) do - KsKitZugSteuern(Zugname, Aktion) - end - - speicherTabelle(1, Zugaktionen) - EEPChangeInfoSignal(1, __tostring(Zugaktionen)) - for k,v in pairs(Schaltauftraege) do - EEPSetSignal(k,v,1) - end - - for i=1,#GefundeneSignale do - local Signal = GefundeneSignale[i] - if Aktiviere_Tooltips then - local name = string.format("%04d", Signal) - if Name and Name[Signal] then name=Name[Signal] end - local txt = "Signal "..name - local Begriff = leseSignal(Signal) - local Farbe = "" - if Begriff[1] == AUS then - Farbe = "" - elseif Begriff[1] ~= HALT then - if Begriff.H_erwarten or Begriff.V_max then - Farbe = "" - else - Farbe = "" - end - end - txt = txt.."\n"..Farbe..BegriffErklaeren(Begriff).."" - txt = txt.."" - local FStellung = EEPGetSignal(Signal+1000) - if FStellung > 1 then - txt = txt.."\n".. string.format("FS #%02d", FStellung-1) - end - if SignalHaltegruende[Signal] then - txt = txt.."\n"..SignalHaltegruende[Signal] - end - EEPChangeInfoSignal(Signal, txt) - EEPShowInfoSignal(Signal, 1) - else - EEPShowInfoSignal(Signal, 0) - end - end -end - -function FS(...) - Zugaktionen[Zugname].FS = {...} - speicherTabelle(1, Zugaktionen) -end - -function W(Dauer) - Zugaktionen[Zugname].W = Dauer - speicherTabelle(1, Zugaktionen) -end - -function S(Signal) - Zugaktionen[Zugname].S = Signal - speicherTabelle(1, Zugaktionen) -end - -function V(V_soll) - local _, V_ist = EEPGetTrainSpeed(Zugname) - -- Negieren, falls Zug rueckwarts faehrt - if V_ist < 0 then V_soll = -V_soll end - -- Mit dieser Division teste ich, ob beide Geschwindigkeiten das selbe Vorzeichen haben - -- Falls Vorzeichen ungleich, beim naechsten Halt Fahrtrichtungswechsel - if V_soll/V_ist < 0 then Zugaktionen[Zugname].R = 1 end - Zugaktionen[Zugname].V = V_soll - speicherTabelle(1, Zugaktionen) -end