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_motorola.lua
g_brzhezinskiy 1d05caf866 init
2021-01-02 12:51:45 +03:00

517 lines
22 KiB
Lua

--------------------------------------------------------------------------------
-- Радиостанция типа "Моторола"
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
Metrostroi.DefineSystem("Motorola")
TRAIN_SYSTEM.DontAccelerateSimulation = true
function TRAIN_SYSTEM:Initialize()
self.Train:LoadSystem("MotorolaF1","Relay","Switch",{bass = true})
self.Train:LoadSystem("MotorolaMenu","Relay","Switch",{bass = true})
self.Train:LoadSystem("MotorolaF2","Relay","Switch",{bass = true})
self.Train:LoadSystem("MotorolaOff","Relay","Switch",{bass = true})
self.Train:LoadSystem("MotorolaUp","Relay","Switch",{bass = true})
self.Train:LoadSystem("MotorolaDown","Relay","Switch",{bass = true})
self.Train:LoadSystem("MotorolaLeft","Relay","Switch",{bass = true})
self.Train:LoadSystem("MotorolaRight","Relay","Switch",{bass = true})
self.Train:LoadSystem("MotorolaOn","Relay","Switch",{bass = true})
self.Train:LoadSystem("Motorola1","Relay","Switch",{bass = true})
self.Train:LoadSystem("Motorola2","Relay","Switch",{bass = true})
self.Train:LoadSystem("Motorola3","Relay","Switch",{bass = true})
self.Train:LoadSystem("Motorola4","Relay","Switch",{bass = true})
self.Train:LoadSystem("Motorola5","Relay","Switch",{bass = true})
self.Train:LoadSystem("Motorola6","Relay","Switch",{bass = true})
self.Train:LoadSystem("Motorola7","Relay","Switch",{bass = true})
self.Train:LoadSystem("Motorola8","Relay","Switch",{bass = true})
self.Train:LoadSystem("Motorola9","Relay","Switch",{bass = true})
self.Train:LoadSystem("Motorola*","Relay","Switch",{bass = true})
self.Train:LoadSystem("Motorola0","Relay","Switch",{bass = true})
self.Train:LoadSystem("Motorola#","Relay","Switch",{bass = true})
self.Train:LoadSystem("MotorolaF4","Relay","Switch",{bass = true})
self.Train:LoadSystem("MotorolaF5","Relay","Switch",{bass = true})
self.Train:LoadSystem("MotorolaF6","Relay","Switch",{bass = true})
self.TriggerNames = {
"MotorolaF1",
"MotorolaMenu",
"MotorolaF2",
"MotorolaOff",
"MotorolaUp",
"MotorolaDown",
"MotorolaLeft",
"MotorolaRight",
"MotorolaOn",
"Motorola1",
"Motorola2",
"Motorola3",
"Motorola4",
"Motorola5",
"Motorola6",
"Motorola7",
"Motorola8",
"Motorola9",
"Motorola*",
"Motorola0",
"Motorola#",
"MotorolaF4",
"MotorolaF5",
"MotorolaF6",
}
self.Enabled = true
self.Triggers = {}
self.Timer = CurTime()
self.State = 0
self.RealState = 99
self.RouteNumber = ""
self.FirstStation = ""
self.LastStation = ""
self.Bright = 1
self.MenuChoosed = 0
self.AnnMenuChoosed = 0
self.Mode = 0
self.Mode1 = 0
end
function TRAIN_SYSTEM:ClientInitialize()
end
if TURBOSTROI then return end
function TRAIN_SYSTEM:Inputs()
return { "Press" }
end
if CLIENT then
local gr_up = Material("vgui/gradient-d")
function TRAIN_SYSTEM:Motorola(train)
surface.SetAlphaMultiplier(1)
draw.NoTexture()
if train:GetNW2Int("Motorola:State",-1) >= 0 then
surface.SetDrawColor(Color(20,20,20))
surface.DrawRect(0,0,140,107)
else
surface.SetDrawColor(Color(0,0,0))
surface.DrawRect(0,0,140,107)
end
--surface.SetAlphaMultiplier(train:GetNW2Int("Motorola:Bright",1))
if train:GetNW2Int("Motorola:State",-1) == 1 then
surface.SetDrawColor(Color(255,255,255))
surface.DrawRect(0,0,94,107)
surface.SetDrawColor(Color(139,200,235))
surface.DrawRect(94,0,46,107)
Metrostroi.DrawLine(7, 2, 10, 5,Color(0,0,0),1)
Metrostroi.DrawLine(10, 1, 10, 9,Color(0,0,0),1)
Metrostroi.DrawLine(13, 2, 10, 5,Color(0,0,0),1)
Metrostroi.DrawLine(16, 8, 16, 9,Color(060,240,106),1)
Metrostroi.DrawLine(18, 6, 18, 9,Color(060,240,106),1)
Metrostroi.DrawLine(20, 4, 20, 9,Color(060,240,106),1)
Metrostroi.DrawLine(22, 2, 22, 9,Color(060,240,106),1)
if not train:GetNW2Bool("Motorola:Menu",false) and train:GetNW2Int("Motorola:Mode",0) == 0 then
local RouteNumber = train:GetNW2Int("Motorola:RouteNumber",-1) > -1 and tostring(train:GetNW2Int("Motorola:RouteNumber")) or "N/A"
draw.SimpleText(train:GetWagonNumber().."/"..RouteNumber,"Metrostroi_PAM1_20",47, 30,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER)
draw.SimpleText("Folder 1","Metrostroi_PAM1_20",47, 48,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER)
draw.SimpleText("TRL "..(train:GetNW2Int("Motorola:Line",0) > 0 and train:GetNW2Int("Motorola:Line") or "N/A"),"Metrostroi_PAM1_20",47, 66,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER)
draw.SimpleText(os.date("!%d-%m-%y %H.%M",os.time()),"Metrostroi_PAM15",47, 82,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER)
draw.SimpleText("DURA","Metrostroi_PAM15",117, 23,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER)
Metrostroi.DrawLine(94, 47, 140, 47,Color(89,150,175),1)
draw.SimpleText("Menu","Metrostroi_PAM15",117, 53,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER)
draw.SimpleText("Annou-","Metrostroi_PAM15",117, 77,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER)
draw.SimpleText("nces ","Metrostroi_PAM15",117, 89,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER)
Metrostroi.DrawLine(94, 61, 140, 61,Color(89,150,175),1)
elseif train:GetNW2Int("Motorola:Mode",0) == 0 then
Metrostroi.DrawRectOL(1,13*1, 93, 13,Color(89,150,175),1,Color(139,200,235))
draw.SimpleText("Main Menu","Metrostroi_PAM15",46, 6+13*1,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER)
--surface.DrawRect(0,13*1,94,13)
surface.SetDrawColor(Color(255,255,255))
surface.DrawRect(94,47,46,14)
draw.SimpleText("Back","Metrostroi_PAM15",117, 23,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER)
draw.SimpleText("Select","Metrostroi_PAM15",117, 83,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER)
surface.SetDrawColor(Color(103,178,209))
surface.DrawRect(11,1+13*(2+train:GetNW2Int("Motorola:MenuChoosed",0)) , 83, 13)
draw.SimpleText("UPO","Metrostroi_PAM15",13, 7+13*2,Color(0,0,0,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER)
draw.SimpleText("Route number","Metrostroi_PAM15",13, 7+13*3,Color(0,0,0,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER)
draw.SimpleText("Announces","Metrostroi_PAM15",13, 7+13*4,Color(0,0,0,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER)
draw.SimpleText("DURA","Metrostroi_PAM15",13, 7+13*5,Color(0,0,0,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER)
else
surface.SetDrawColor(Color(255,255,255))
if train:GetNW2Int("Motorola:Mode",0) == 2 then surface.DrawRect(94,47,46,60) else surface.DrawRect(94,47,46,14) end
draw.SimpleText("Back","Metrostroi_PAM15",117, 23,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER)
if train:GetNW2Int("Motorola:Mode",0) == 1 then draw.SimpleText("OK","Metrostroi_PAM15",117, 83,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) end
if train:GetNW2Int("Motorola:Mode",0) == 1 then
local Line = train:GetNW2Int("Motorola:Line",-1) > -1 and tostring(train:GetNW2Int("Motorola:Line")) or ""
local FirstStation = train:GetNW2Int("Motorola:FirstStation",-1) > -1 and tostring(train:GetNW2Int("Motorola:FirstStation")) or ""
local LastStation = train:GetNW2Int("Motorola:LastStation",-1) > -1 and tostring(train:GetNW2Int("Motorola:LastStation")) or ""
Metrostroi.DrawRectOL(1,13 + 32*0, 93, 13,Color(89,150,175),1,Color(139,200,235))
draw.SimpleText("Line","Metrostroi_PAM15",46, 19+32*0,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER)
draw.SimpleText(Line,"Metrostroi_PAM1_20",5, 35 + 32*0,Color(0,0,0,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER)
if train:GetNW2Int("Motorola:Mode1",0) == 0 and CurTime()%0.5>0.25 then Metrostroi.DrawLine(5 +9*#Line, 40 + 32*0, 15+9*#Line, 40 + 32*0,Color(0,0,0),2) end
Metrostroi.DrawRectOL(1,13 + 32*1, 93, 13,Color(89,150,175),1,Color(139,200,235))
draw.SimpleText("First station","Metrostroi_PAM15",46, 19+32*1,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER)
draw.SimpleText(FirstStation,"Metrostroi_PAM1_20",5, 35 + 32*1,Color(0,0,0,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER)
if train:GetNW2Int("Motorola:Mode1",0) == 1 and CurTime()%0.5>0.25 then Metrostroi.DrawLine(5 +9*#FirstStation, 40 + 32*1, 15+9*#FirstStation, 40 + 32*1,Color(0,0,0),2) end
Metrostroi.DrawRectOL(1,13 + 32*2, 93, 13,Color(89,150,175),1,Color(139,200,235))
draw.SimpleText("Last station","Metrostroi_PAM15",46, 19+32*2,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER)
draw.SimpleText(LastStation,"Metrostroi_PAM1_20",5, 35 + 32*2,Color(0,0,0,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER)
if train:GetNW2Int("Motorola:Mode1",0) == 2 and CurTime()%0.5>0.25 then Metrostroi.DrawLine(5 +9*#LastStation, 40 + 32*2, 15+9*#LastStation, 40 + 32*2,Color(0,0,0),2) end
end
if train:GetNW2Int("Motorola:Mode",0) == 2 then
Metrostroi.DrawRectOL(1,13*1, 93, 13,Color(89,150,175),1,Color(139,200,235))
draw.SimpleText("Route number","Metrostroi_PAM15",46, 6+13*1,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER)
local RouteNumber = train:GetNW2Int("Motorola:RouteNumber",-1) > -1 and tostring(train:GetNW2Int("Motorola:RouteNumber")) or ""
draw.SimpleText(RouteNumber,"Metrostroi_PAM1_20",5, 35,Color(0,0,0,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER)
if CurTime()%0.5>0.25 then Metrostroi.DrawLine(5 +9*#RouteNumber, 40, 15+9*#RouteNumber, 40,Color(0,0,0),2) end
end
if train:GetNW2Int("Motorola:Mode",0) == 3 then
Metrostroi.DrawRectOL(1,13*1, 93, 13,Color(89,150,175),1,Color(139,200,235))
draw.SimpleText("Announces","Metrostroi_PAM15",46, 6+13*1,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER)
--surface.DrawRect(0,13*1,94,13)
surface.SetDrawColor(Color(255,255,255))
surface.DrawRect(94,47,46,14)
draw.SimpleText("Back","Metrostroi_PAM15",117, 23,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER)
draw.SimpleText("Play","Metrostroi_PAM15",117, 83,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER)
surface.SetDrawColor(Color(103,178,209))
surface.DrawRect(3,1+13*(2+train:GetNW2Int("Motorola:AnnMenuChoosed",0)) , 88, 13)
draw.SimpleText("Go out from tr..","Metrostroi_PAM15",5, 7+13*2,Color(0,0,0,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER)
draw.SimpleText("Go faster","Metrostroi_PAM15",5, 7+13*3,Color(0,0,0,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER)
draw.SimpleText("Release doors","Metrostroi_PAM15",5, 7+13*4,Color(0,0,0,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER)
draw.SimpleText("Train dep. soon","Metrostroi_PAM15",5, 7+13*5,Color(0,0,0,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER)
end
if train:GetNW2Int("Motorola:Mode",0) == 4 then
Metrostroi.DrawRectOL(1,13*1, 93, 13,Color(89,150,175),1,Color(139,200,235))
draw.SimpleText("Dura control","Metrostroi_PAM15",46, 6+13*1,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER)
--surface.DrawRect(0,13*1,94,13)
surface.SetDrawColor(Color(255,255,255))
surface.DrawRect(94,47,46,14)
draw.SimpleText("Back","Metrostroi_PAM15",117, 23,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER)
draw.SimpleText("Send","Metrostroi_PAM15",117, 78,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER)
local Sel = train:GetNW2Bool("Motorola:DURAs", false)
local DURA1 = train:GetNW2Bool("Motorola:DURA1", false)
local DURA2 = train:GetNW2Bool("Motorola:DURA2", false)
if not Sel and DURA1 or Sel and DURA2 then
draw.SimpleText("Main","Metrostroi_PAM15",117, 88,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER)
else
draw.SimpleText("Alter","Metrostroi_PAM15",117, 88,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER)
end
draw.SimpleText("1","Metrostroi_PAM1_20",22, 40,Color(0,not Sel and 200 or 0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER)
if not Sel and CurTime()%0.5>0.25 then Metrostroi.DrawLine(18, 47, 28, 47,Color(0,0,0),2) end
Metrostroi.DrawLine(15,50, 15, 70,Color(DURA1 and 0 or 200,0,0),2)
Metrostroi.DrawLine(15,71, 29, 50,Color(DURA1 and 200 or 0,0,0),2)
Metrostroi.DrawLine(15,70, 15, 90,Color(200,0,0),2)
draw.SimpleText("2","Metrostroi_PAM1_20",67, 40,Color(0,Sel and 200 or 0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER)
if Sel and CurTime()%0.5>0.25 then Metrostroi.DrawLine(63, 47, 73, 47,Color(0,0,0),2) end
Metrostroi.DrawLine(60,50, 60, 70,Color(DURA2 and 0 or 200,0,0),2)
Metrostroi.DrawLine(60,71, 74, 50,Color(DURA2 and 200 or 0,0,0),2)
Metrostroi.DrawLine(60,70, 60, 90,Color(200,0,0),2)
end
end
end
surface.SetAlphaMultiplier(1-train:GetNW2Int("Motorola:Bright",1))
surface.SetDrawColor(Color(20,20,20))
surface.DrawRect(0,0,145,110)
surface.SetAlphaMultiplier(1)
end
function TRAIN_SYSTEM:ClientThink()
end
end
function TRAIN_SYSTEM:UpdateUPO()
for k,v in pairs(self.Train.WagonList) do
if v.UPO then v.UPO:SetStations(self.Line,self.FirstStation,self.LastStation,v == self.Train) end
v:OnButtonPress("RouteNumberUpdate",self.RouteNumber)
end
end
function TRAIN_SYSTEM:Trigger(name)
if self.Mode == 0 then
if self.Menu then
if name == "MotorolaF1" then
self.Menu = false
end
if name == "MotorolaUp" then
self.MenuChoosed = math.max(0,self.MenuChoosed - 1)
end
if name == "MotorolaDown" then
self.MenuChoosed = math.min(3,self.MenuChoosed + 1)
end
if name == "MotorolaF2" then
self.Mode = self.MenuChoosed + 1
if self.Mode == 3 then
self.AnnChoosed = 0
end
end
local Char = tonumber(name:sub(9,9))
if Char and Char > 0 and Char < 5 then
self.Mode = Char
end
else
if name == "MotorolaF2" then
self.Mode = 3
self.AnnChoosed = 0
end
if name == "MotorolaF1" then
self.Mode = 4
end
if name == "MotorolaMenu" then
self.Menu = true
self.MenuChoosed = 0
end
end
else
if self.Mode == 1 then
if name == "MotorolaUp" then
self.Mode1 = math.max(0,self.Mode1 - 1)
end
if name == "MotorolaDown" then
self.Mode1 = math.min(2,self.Mode1 + 1)
end
if name == "MotorolaLeft" then
if self.Mode1 == 1 then
self.FirstStation= self.FirstStation:sub(1,-2)
end
if self.Mode1 == 2 then
self.LastStation= self.LastStation:sub(1,-2)
end
self:UpdateUPO()
end
local Char = tonumber(name:sub(9,9))
if Char then
if self.Mode1 == 0 then
self.Line = Char
if Metrostroi.WorkingStations[self.Line] then
local Routelength = #Metrostroi.WorkingStations[self.Line]
self.FirstStation = tostring(Metrostroi.WorkingStations[self.Line][1])
self.LastStation = tostring(Metrostroi.WorkingStations[self.Line][Routelength])
end
end
if self.Mode1 == 1 and #self.FirstStation < 3 and (Char ~= 0 or #self.FirstStation > 0) then
self.FirstStation= self.FirstStation..tostring(Char)
end
if self.Mode1 == 2 and #self.LastStation < 3 and (Char ~= 0 or #self.LastStation > 0) then
self.LastStation= self.LastStation..tostring(Char)
end
self:UpdateUPO()
end
if name == "MotorolaF2" then
if not Metrostroi.WorkingStations[self.Line] or
not Metrostroi.WorkingStations[self.Line][tonumber(self.FirstStation)] or
not Metrostroi.AnnouncerData[tonumber(self.FirstStation)] or
not Metrostroi.WorkingStations[self.Line][tonumber(self.LastStation)] or
not Metrostroi.AnnouncerData[tonumber(self.LastStation)] then
self.Error = not self.Error
else
if not self.Error then self.Mode = 0 else self.Error = false end
end
end
--[[
if name == "MotorolaLeft" then
self.RouteNumber= self.RouteNumber:sub(1,-2)
self.Train:OnButtonPress("RouteNumberUpdate",self.RouteNumber)
end
local Char = tonumber(name:sub(9,9))
if Char and self.RouteNumber and #self.RouteNumber < 3 then
self.RouteNumber= self.RouteNumber..tostring(Char)
self.Train:OnButtonPress("RouteNumberUpdate",self.RouteNumber)
end]]
end
if self.Mode == 2 then
if name == "MotorolaLeft" then
self.RouteNumber= self.RouteNumber:sub(1,-2)
self.Train:OnButtonPress("RouteNumberUpdate",self.RouteNumber)
end
local Char = tonumber(name:sub(9,9))
if Char and self.RouteNumber and #self.RouteNumber < 3 then
self.RouteNumber= self.RouteNumber..tostring(Char)
self.Train:OnButtonPress("RouteNumberUpdate",self.RouteNumber)
end
end
if self.Mode == 3 then
if name == "MotorolaUp" then
self.AnnMenuChoosed = math.max(0,self.AnnMenuChoosed - 1)
end
if name == "MotorolaDown" then
self.AnnMenuChoosed = math.min(3,self.AnnMenuChoosed + 1)
end
if name == "MotorolaF2" then
self.Mode = 0
self.Train.UPO:II(self.AnnMenuChoosed+1)
end
local Char = tonumber(name:sub(9,9))
if Char and Char > 0 and Char < 5 and self.Train.R_UPO.Value > 0 then
self.Mode = 0
self.Train.UPO:II(Char)
self.AnnChoosed = 0
end
end
if self.Mode == 4 then
if name == "MotorolaLeft" then
self.Train.DURA:TriggerInput("SelectChannel",1)
end
if name == "MotorolaRight" then
self.Train.DURA:TriggerInput("SelectChannel",2)
end
local Char = tonumber(name:sub(9,9))
if Char and Char > 0 and Char < 3 then
self.Train.DURA:TriggerInput("SelectChannel",Char)
if self.Train.DURA.Channel == 1 then if self.Train.DURA.Channel1Alternate then self.Train.DURA:TriggerInput("SelectMain",1) else self.Train.DURA:TriggerInput("SelectAlternate",1) end end
if self.Train.DURA.Channel == 2 then if self.Train.DURA.Channel2Alternate then self.Train.DURA:TriggerInput("SelectMain",1) else self.Train.DURA:TriggerInput("SelectAlternate",1) end end
end
if name == "MotorolaF2" then
if self.Train.DURA.Channel == 1 then if self.Train.DURA.Channel1Alternate then self.Train.DURA:TriggerInput("SelectMain",1) else self.Train.DURA:TriggerInput("SelectAlternate",1) end end
if self.Train.DURA.Channel == 2 then if self.Train.DURA.Channel2Alternate then self.Train.DURA:TriggerInput("SelectMain",1) else self.Train.DURA:TriggerInput("SelectAlternate",1) end end
end
end
if name == "MotorolaF1" then
if not self.Error then self.Mode = 0 else self.Error = false end
end
end
if name == "MotorolaF6" then
self.Bright = self.Bright + 0.25
if self.Bright > 1 then self.Bright = 0 end
end
end
function TRAIN_SYSTEM:GetTimer(val)
return self.TimerMod and (CurTime() - self.Timer) > val
end
function TRAIN_SYSTEM:SetTimer(mod)
if mod then
if self.TimerMod == mod then return end
self.TimerMod = mod
else
self.TimerMod = nil
end
self.Timer = CurTime()
end
function TRAIN_SYSTEM:SetState(state,add,state9)
local Train = self.Train
local ARS = Train.ALS_ARS
local Announcer = Train.Announcer
if state and self.State ~= state then
self.State = state
if state == 1 or state == 1.1 then
self.NextState = add
end
self:SetTimer()
elseif not state then
state = self.NextState
self.State = self.NextState
else
return
end
if state == 1 then self.Bright = 1 end
end
function TRAIN_SYSTEM:Think(dT)
local Train = self.Train
local ARS = Train.ALS_ARS
local Announcer = Train.Announcer
if Train.MotorolaOff.Value >0.5 and not self.OffTimer and not self.OnTimer then --self.VPA and
if self.Enabled then
self.OffTimer = CurTime() + 1
else
self.Enabled = true
end
end
if self.OffTimer and (CurTime() - self.OffTimer) > 0 then
self.Enabled = false
end
if Train.MotorolaOff.Value <0.5 and self.OffTimer then
self.OffTimer = nil
end
if Train.Panel["V1"] < 0.5 or Train.VB.Value < 0.5 then self:SetState(-1) end
if not self.Enabled then self:SetState(-1) end
if self.Enabled and self.State == -1 and Train.Panel["V1"] > 0.5 and Train.VB.Value > 0.5 then self:SetState(0) end
--self.Train.UPO.Station = self.Train:ReadCell(49160) > 0 and self.Train:ReadCell(49160) or self.Train:ReadCell(49161)
--self.Train.UPO.Path = self.Train:ReadCell(49170)
--self.Train.UPO.Distance = math.min(9999,self.Train:ReadCell(49165) + (Train.Autodrive.Corrections[self.Train.UPO.Station] or 0))
if Train.VB.Value > 0.5 and Train.Battery.Voltage > 55 and self.State > 0 then
for k,v in pairs(self.TriggerNames) do
if Train[v] and (Train[v].Value > 0.5) ~= self.Triggers[v] then
if Train[v].Value > 0.5 then
self:Trigger(v)
end
--print(v,self.Train[v].Value > 0.5)
self.Triggers[v] = Train[v].Value > 0.5
end
end
end
if self.State == 0 then
self:SetTimer(1)
if self:GetTimer(3) then
self:SetState(1)
end
end
if self.State ~= self.RealState then
self.RealState = self.State
self.TimeOverride = true
end
self.Time = self.Time or CurTime()
if (CurTime() - self.Time) > 0.1 or self.TimeOverride then
self.TimeOverride = nil
--print(1)
self.Time = CurTime()
Train:SetNW2Int("Motorola:State",self.State)
Train:SetNW2Int("Motorola:Line",Train.UPO.Line)
Train:SetNW2Int("Motorola:RouteNumber",tonumber(self.RouteNumber ~= "" and self.RouteNumber or -1))
Train:SetNW2Int("Motorola:Bright",self.Bright)
Train:SetNW2Bool("Motorola:Menu",self.Menu == true)
Train:SetNW2Int("Motorola:MenuChoosed",self.MenuChoosed)
Train:SetNW2Int("Motorola:Mode",self.Mode)
Train:SetNW2Bool("Motorola:Error",self.Error)
if self.Mode == 1 then
Train:SetNW2Int("Motorola:Mode1",self.Mode1)
Train:SetNW2Int("Motorola:FirstStation",tonumber(self.FirstStation ~= "" and self.FirstStation or -1))
Train:SetNW2Int("Motorola:LastStation",tonumber(self.LastStation ~= "" and self.LastStation or -1))
elseif self.Mode == 2 then
elseif self.Mode == 3 then
Train:SetNW2Int("Motorola:AnnMenuChoosed",self.AnnMenuChoosed)
elseif self.Mode == 4 then
Train:SetNW2Int("Motorola:DURAs",self.Train.DURA.Channel == 2)
Train:SetNW2Int("Motorola:DURA1",self.Train.DURA.Channel1Alternate)
Train:SetNW2Int("Motorola:DURA2",self.Train.DURA.Channel2Alternate)
end
end
self.RouteNumber = string.gsub(Train.RouteNumber or "","^(0+)","")
self.Line = Train.UPO.Line
self.FirstStation = tostring(Train.UPO.FirstStation or "")
self.LastStation = tostring(Train.UPO.LastStation or "")
self.RealState = self.State
end