mirror of
https://github.com/metrostroi-repo/MetrostroiAddon.git
synced 2026-05-02 00:42:29 +00:00
107 lines
2.5 KiB
Lua
107 lines
2.5 KiB
Lua
--------------------------------------------------------------------------------
|
|
-- Статив и приёмные катушки АЛС
|
|
--------------------------------------------------------------------------------
|
|
Metrostroi.DefineSystem("ALSTest")
|
|
TRAIN_SYSTEM.DontAccelerateSimulation = true
|
|
|
|
|
|
function TRAIN_SYSTEM:Initialize()
|
|
self.Train:LoadSystem("F6","Relay","Switch",{ bass = true })
|
|
self.Train:LoadSystem("F5","Relay","Switch",{ bass = true })
|
|
self.Train:LoadSystem("F4","Relay","Switch",{ bass = true })
|
|
self.Train:LoadSystem("F3","Relay","Switch",{ bass = true })
|
|
self.Train:LoadSystem("F2","Relay","Switch",{ bass = true })
|
|
self.Train:LoadSystem("F1","Relay","Switch",{ bass = true })
|
|
self.Train:LoadSystem("NF","Relay","Switch",{ bass = true })
|
|
self.Train:LoadSystem("SpeedAdd","Relay","Switch",{ bass = true })
|
|
self.Train:LoadSystem("SpeedRem","Relay","Switch",{ bass = true })
|
|
|
|
self.TriggerNames = {
|
|
"F6",
|
|
"F5",
|
|
"F4",
|
|
"F3",
|
|
"F2",
|
|
"F1",
|
|
"NF",
|
|
"SpeedAdd",
|
|
"SpeedRem",
|
|
}
|
|
self.Triggers = {}
|
|
for k,v in pairs(self.TriggerNames) do
|
|
if self.Train[v] then self.Triggers[v] = self.Train[v].Value > 0.5 end
|
|
end
|
|
self.Speed = 0
|
|
self.Acceleration = 0
|
|
-- ALS state
|
|
self.F1 = 0
|
|
self.F2 = 0
|
|
self.F3 = 0
|
|
self.F4 = 0
|
|
self.F5 = 0
|
|
self.F6 = 0
|
|
self.NoFreq = 1
|
|
self.NoFreqTimer = nil
|
|
self.RealF5 = 1
|
|
self.Speed = 0
|
|
self.SpeedSign = 0
|
|
end
|
|
|
|
function TRAIN_SYSTEM:Outputs()
|
|
return {
|
|
}
|
|
end
|
|
|
|
function TRAIN_SYSTEM:Inputs()
|
|
return {"Enable"}
|
|
end
|
|
|
|
function TRAIN_SYSTEM:TriggerInput(name,value)
|
|
if name == "Enable" then
|
|
self.Enabled = value
|
|
end
|
|
end
|
|
|
|
function TRAIN_SYSTEM:Trigger(name,value)
|
|
local Train = self.Train
|
|
if name == "SpeedAdd" then
|
|
self.Speed = self.Speed + 2.5
|
|
return
|
|
end
|
|
if name == "SpeedRem" then
|
|
self.Speed = self.Speed - 2.5
|
|
return
|
|
end
|
|
if not value then return end
|
|
if name == "F6" then
|
|
self.F6 = 1-self.F6
|
|
return
|
|
end
|
|
if name == "NF" then
|
|
self.F6 = 0
|
|
self.F5 = 0
|
|
self.F4 = 0
|
|
self.F3 = 0
|
|
self.F2 = 0
|
|
self.F1 = 0
|
|
self.NoFreq = 1
|
|
return
|
|
end
|
|
self.F5 = name =="F5" and 1 or 0
|
|
self.F4 = name =="F4" and 1 or 0
|
|
self.F3 = name =="F3" and 1 or 0
|
|
self.F2 = name =="F2" and 1 or 0
|
|
self.F1 = name =="F1" and 1 or 0
|
|
self.NoFreq = 0
|
|
end
|
|
function TRAIN_SYSTEM:Think(dT)
|
|
local Train = self.Train
|
|
|
|
for k,v in pairs(self.TriggerNames) do
|
|
if Train[v] and (Train[v].Value > 0.5) ~= self.Triggers[v] then
|
|
self:Trigger(v,Train[v].Value > 0.5)
|
|
self.Triggers[v] = Train[v].Value > 0.5
|
|
end
|
|
end
|
|
end
|