mirror of
https://github.com/metrostroi-repo/MetrostroiAddon.git
synced 2026-05-02 00:42:29 +00:00
109 lines
3.2 KiB
Lua
109 lines
3.2 KiB
Lua
--------------------------------------------------------------------------------
|
||
-- АРС-АЛС
|
||
--------------------------------------------------------------------------------
|
||
Metrostroi.DefineSystem("NoARS")
|
||
TRAIN_SYSTEM.DontAccelerateSimulation = true
|
||
|
||
function TRAIN_SYSTEM:Initialize()
|
||
|
||
--self.Train:LoadSystem("UOS","Relay","Switch", {bass = true})
|
||
--self.Train:LoadSystem("BPS","Relay","Switch",{ bass = true,normally_closed = true })
|
||
-- ALS state
|
||
self.Signal80 = false
|
||
self.Signal70 = false
|
||
self.Signal60 = false
|
||
self.Signal40 = false
|
||
self.Signal0 = false
|
||
self.Special = false
|
||
self.NoFreq = true
|
||
self.RealNoFreq = true
|
||
|
||
-- Internal state
|
||
self.Speed = 0
|
||
self.SpeedLimit = 0
|
||
self.NextLimit = 0
|
||
self.Ring = false
|
||
self.Overspeed = false
|
||
|
||
-- ARS wires
|
||
self["33D"] = 1
|
||
self["33G"] = 0
|
||
self["33Zh"] = 1--KAH
|
||
--
|
||
self["2"] = 0
|
||
self["20"] = 0
|
||
self["29"] = 0
|
||
--
|
||
self["31"] = 0
|
||
self["32"] = 0
|
||
self["8"] =0
|
||
|
||
-- Lamps
|
||
---self.LKT = false
|
||
self.LVD = false
|
||
end
|
||
|
||
function TRAIN_SYSTEM:Outputs()
|
||
return { "2", "8", "20", "31", "32", "29", "33D", "33G", "33Zh",
|
||
"Speed", "Signal80","Signal70","Signal60","Signal40","Signal0","Special","NoFreq","RealNoFreq",
|
||
"SpeedLimit", "NextLimit","Ring","KVT","EnableARS","EnableALS","Signal", "UAVA"}
|
||
end
|
||
|
||
function TRAIN_SYSTEM:Inputs()
|
||
return { "IgnoreThisARS","AttentionPedal","Ring" }
|
||
end
|
||
|
||
function TRAIN_SYSTEM:TriggerInput(name,value)
|
||
end
|
||
|
||
function TRAIN_SYSTEM:Think()
|
||
|
||
if self.Train.RV_2.Value < 1 then self.Train.RV_2:TriggerInput("Set",1)
|
||
end
|
||
|
||
|
||
local Train = self.Train
|
||
local tbl = Train.SubwayTrain and Train.SubwayTrain.ALS
|
||
local haveautostop = tbl and tbl.HaveAutostop
|
||
local autostop = haveautostop and Train.SpeedSign > 0 and Train.Speed > 0.1
|
||
if autostop then
|
||
local ars,arsback
|
||
self.Timer = self.Timer or CurTime()
|
||
if CurTime() - self.Timer > 1.00 then
|
||
self.Timer = CurTime()
|
||
-- Get train position
|
||
local pos = Metrostroi.TrainPositions[Train] --Metrostroi.GetPositionOnTrack(Train:GetPos(),Train:GetAngles()) --(this metod laggy for dir checks)
|
||
if pos then pos = pos[1] end
|
||
-- Get previous ARS section
|
||
if pos then
|
||
ars,arsback = Metrostroi.GetARSJoint(pos.node1,pos.x,Metrostroi.TrainDirections[Train], Train)
|
||
end
|
||
|
||
if autostop then
|
||
if IsValid(arsback) then
|
||
if arsback == self.AutostopSignal then
|
||
local ply,mode = Train:GetDriverPly()
|
||
local nomsg = hook.Run("MetrostroiPassedRed",Train,ply,mode,arsback)
|
||
Train.Pneumatic:TriggerInput("Autostop",nomsg and 0 or 1)
|
||
if not nomsg and (not IsValid(Train.FrontTrain) or not IsValid(Train.RearTrain)) then
|
||
RunConsoleCommand("say",Format("%s Passed stop %s signal [%s]",Train:GetDriverName(),arsback.InvationSignal and "InvationSignal" or "",arsback.Name))
|
||
end
|
||
self.AutostopSignal = nil
|
||
end
|
||
end
|
||
if IsValid(ars) then
|
||
if ars.AutoEnabled then
|
||
self.AutostopSignal = ars
|
||
elseif self.AutostopSignal == ars then
|
||
self.AutostopSignal = nil
|
||
end
|
||
end
|
||
end
|
||
end
|
||
end
|
||
self["33D"] = ((Train.Pneumatic and Train.Pneumatic.EmergencyValve) or self.UAVAContacts) and 0 or 1
|
||
if Train.UAVAContact and Train.UAVAContact.Value > 0.5 and not Train.Pneumatic.EmergencyValve then
|
||
self.UAVAContacts = nil
|
||
end
|
||
end
|