1
0
mirror of https://github.com/metrostroi-repo/MetrostroiAddon.git synced 2026-05-02 00:42:29 +00:00
Files
MetrostroiAddon/lua/metrostroi/systems/_obsolete/sys_dura.lua
g_brzhezinskiy 1d05caf866 init
2021-01-02 12:51:45 +03:00

96 lines
3.4 KiB
Lua

--------------------------------------------------------------------------------
-- ДУРА (Дополнительная Универсальная Радиоаппаратура)
--------------------------------------------------------------------------------
Metrostroi.DefineSystem("DURA")
TRAIN_SYSTEM.DontAccelerateSimulation = true
function TRAIN_SYSTEM:Initialize()
self.SelectAlternate = nil
self.Channel = 1
self.Signal = 0
self.Power = 1
end
function TRAIN_SYSTEM:Outputs()
return { "Signal" }
end
function TRAIN_SYSTEM:Inputs()
return { "SelectAlternate", "SelectMain", "SelectChannel", "ToggleChannel", "Power", "PowerToggle" }
end
function TRAIN_SYSTEM:TriggerInput(name,value)
if (name == "SelectAlternate") and (value > 0.0) then
self.SelectAlternate = true
self.TimerToggle = true
elseif (name == "SelectMain") and (value > 0.0) then
self.SelectAlternate = false
self.TimerToggle = true
elseif (name == "ToggleChannel") and (value > 0.0) then
if self.Channel == 1 then self.Channel = 2 else self.Channel = 1 end
elseif (name == "SelectChannel") then
self.Channel = math.floor(value)
elseif (name == "PowerToggle") and (value > 0.0) then
self.Power = not self.Power
end
end
function TRAIN_SYSTEM:Think()
-- Require 54 volts
if self.Train.Battery and (self.Train.Battery.Voltage < 54) then return end
if not self.Power then return end --or self.Train.ARSType == 3 then return end
--self.Train:PlayOnce("dura2","cabin",0.4,100)
-- Check ARS signals
self.Timer = self.Timer or CurTime()
if CurTime() - self.Timer > 2.00 or self.TimerToggle then
self.TimerToggle = nil
self.Timer = CurTime()
-- Get train position
local pos = Metrostroi.TrainPositions[self.Train]
if pos then pos = pos[1] end
-- Get all switches in current isolated section
local no_switches = true
local signal = 0
local Alt1, Alt2
if pos then
-- Get traffic light in front
local light = Metrostroi.GetNextTrafficLight(pos.node1,pos.x,pos.forward)
local function getSignal(base,chan)
if (chan == 1) and (base == "alt") and light and light:GetInvertChannel1() then return "main" end
if (chan == 2) and (base == "alt") and light and light:GetInvertChannel2() then return "main" end
return base
end
-- Get switches and trigger them all
local switches = Metrostroi.GetTrackSwitches(pos.node1,pos.x,pos.forward)
for _,switch in pairs(switches) do
Alt1 = Alt1 or (switch:GetChannel() == 1 and switch:GetSignal() > 0)
Alt2 = Alt2 or (switch:GetChannel() == 2 and switch:GetSignal() > 0)
no_switches = false
if self.SelectAlternate == true then
if self.Channel == 1 then switch:SendSignal(getSignal("alt",1),1) end
if self.Channel == 2 then switch:SendSignal(getSignal("alt",2),2) end
elseif self.SelectAlternate == false then
if self.Channel == 1 then switch:SendSignal(getSignal("main",1),1) end
if self.Channel == 2 then switch:SendSignal(getSignal("main",2),2) end
end
signal = math.max(signal,switch:GetSignal())
end
-- Reset state selection
end
if signal > 0 then
self.Train:PlayOnce("dura1","cabin",0.30,200)
end
self.Signal = signal
self.Channel1Alternate = Alt1
self.Channel2Alternate = Alt2
-- If no switches, reset
if (no_switches or not pos) and (self.SelectAlternate ~= nil) then
self.Train:PlayOnce("dura2","cabin",0.30,220)
end
self.SelectAlternate = nil
end
end