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

216 lines
7.8 KiB
Lua

--------------------------------------------------------------------------------
-- Радио-релейный информатор
--------------------------------------------------------------------------------
Metrostroi.DefineSystem("RRI")
TRAIN_SYSTEM.DontAccelerateSimulation = true
if TURBOSTROI then return end
function TRAIN_SYSTEM:Inputs()
return {}
end
function TRAIN_SYSTEM:Outputs()
return {}
end
Metrostroi.RRIAnnouncments = {
["arr_108"]={14.063,"subway_announcer_riu/arr_108.mp3"},
["arr_109"]={4.466,"subway_announcer_riu/arr_109.mp3"},
["arr_110"]={10.703,"subway_announcer_riu/arr_110.mp3"},
["arr_111"]={4.502,"subway_announcer_riu/arr_111.mp3"},
["arr_112"]={10.586,"subway_announcer_riu/arr_112.mp3"},
["arr_113"]={9.536,"subway_announcer_riu/arr_113.mp3"},
["arr_114"]={3.661,"subway_announcer_riu/arr_114.mp3"},
["arr_115"]={14.681,"subway_announcer_riu/arr_115.mp3"},
["arr_116"]={10.077,"subway_announcer_riu/arr_116.mp3"},
["arr_117"]={9.804,"subway_announcer_riu/arr_117.mp3"},
["arr_118"]={5.911,"subway_announcer_riu/arr_118.mp3"},
["arr_119"]={4.404,"subway_announcer_riu/arr_119.mp3"},
["arr_121"]={9.337,"subway_announcer_riu/arr_121.mp3"},
["arr_122"]={4.619,"subway_announcer_riu/arr_122.mp3"},
["arr_123"]={14.355,"subway_announcer_riu/arr_123.mp3"},
["arr_321_I"]={5.032,"subway_announcer_riu/arr_321_I.mp3"},
["arr_321_II"]={11.413,"subway_announcer_riu/arr_321_II.mp3"},
["arr_322"]={15.998,"subway_announcer_riu/arr_322.mp3"},
["end_111"]={13.759,"subway_announcer_riu/end_111.mp3"},
["end_114"]={13.395,"subway_announcer_riu/end_114.mp3"},
["end_121"]={13.973,"subway_announcer_riu/end_121.mp3"},
["leave"]={11.283,"subway_announcer_riu/leave.mp3"},
["next_108"]={7.334,"subway_announcer_riu/next_108.mp3"},
["next_109"]={7.297,"subway_announcer_riu/next_109.mp3"},
["next_110"]={18.623,"subway_announcer_riu/next_110.mp3"},
["next_111"]={7.221,"subway_announcer_riu/next_111.mp3"},
["next_112"]={7.495,"subway_announcer_riu/next_112.mp3"},
["next_113"]={17.520,"subway_announcer_riu/next_113.mp3"},
["next_113_s"]={23.703,"subway_announcer_riu/next_113_s.mp3"},
["next_114"]={7.163,"subway_announcer_riu/next_114.mp3"},
["next_115"]={9.323,"subway_announcer_riu/next_115.mp3"},
["next_115_s"]={15.323,"subway_announcer_riu/next_115_s.mp3"},
["next_116"]={7.476,"subway_announcer_riu/next_116.mp3"},
["next_117"]={17.763,"subway_announcer_riu/next_117.mp3"},
["next_118"]={9.138,"subway_announcer_riu/next_118.mp3"},
["next_119_I"]={7.554,"subway_announcer_riu/next_119_I.mp3"},
["next_119_II"]={14.088,"subway_announcer_riu/next_119_II.mp3"},
["next_121_I"]={12.953,"subway_announcer_riu/next_121_I.mp3"},
["next_121_II"]={6.726,"subway_announcer_riu/next_121_II.mp3"},
["next_122_II"]={8.051,"subway_announcer_riu/next_122_II.mp3"},
["next_122_I_1"]={14.029,"subway_announcer_riu/next_122_I_1.mp3"},
["next_122_I_2"]={15.045,"subway_announcer_riu/next_122_I_3.mp3"},
["next_123"]={13.935,"subway_announcer_riu/next_123.mp3"},
["next_321_I"]={14.661,"subway_announcer_riu/next_321_I.mp3"},
["next_321_II"]={8.509,"subway_announcer_riu/next_321_II.mp3"},
["next_322"]={8.929,"subway_announcer_riu/next_322.mp3"},
["to_111"]={6.881,"subway_announcer_riu/to_111.mp3"},
["to_114"]={6.224,"subway_announcer_riu/to_114.mp3"},
["to_121"]={6.698,"subway_announcer_riu/to_121.mp3"},
}
for k,v in pairs(Metrostroi.RRIAnnouncments) do
v[3] = k
end
--первая таблица - прибытие, вторая - следующая, если ИД находится в основной таблице - значит станция типа горлифт
--1 - разделение по пути
--2 - разделение по линии
--3 - разделение по пути и линии
TRAIN_SYSTEM.Setup = {
[114] = true,
{
[321] = 1,
},
{
[119] = 1,
[121] = 1,
[122] = {3,1},
[321] = 1,
}
}
function TRAIN_SYSTEM:Initialize()
for _,v in pairs(Metrostroi.RRIAnnouncments) do
util.PrecacheSound(v[2])
end
self.Path = 1
self.Line = 1
self.FirstStation = 1
self.LastStation = #Metrostroi.WorkingStations[self.Line]
self.CurrentStation = self.FirstStation
self.Depeat = true
self.IgnoreHorlift = true
self.TriggerNames = {
"Custom1",
"Custom2",
"Custom3",
"CustomC",
"R_Program1",
"R_Program2",
}
self.Triggers = {}
end
function TRAIN_SYSTEM:Queue(id)
local ann = self.Train.Announcer
if (not Metrostroi.RRIAnnouncments[id]) then return end
if #ann.Schedule < 16 then
local tbl = Metrostroi.RRIAnnouncments[id]
table.insert(ann.Schedule, tbl)
end
end
function TRAIN_SYSTEM:Inputs()
return {}
end
function TRAIN_SYSTEM:Outputs()
return {}
end
function TRAIN_SYSTEM:PlaySound(station,arrive)
if arrive == nil then
else
local name = ""
if arrive then
name = name.."next_"
else
name = name.."arr_"
end
name = name..tostring(station)
local spec
local horlift = false
if self.Setup[station] then
spec = self.Setup[station]
horlift = true
else
if self.Setup[station + (self.Path and 1 or -1)] then
horlift = true
end
spec = self.Setup[arrive and 2 or 1][station]
end
if horlift and self.IgnoreHorlift and arrive then
name = name.."_s"
end
if spec then
if type(spec) == "table" then
spec = spec[self.Path and 2 or 1]
end
if spec == 1 then
name = name.."_"..(self.Path and "II" or "I")
elseif spec == 2 then
name = name.."_"..tostring(self.Line)
elseif spec == 3 then
name = name.."_"..(self.Path and "II" or "I").."_"..tostring(self.Line)
end
end
self:Queue(name)
end
end
function TRAIN_SYSTEM:Trigger(name)
--self.CurrentStation = 9
if name == "Custom3" and #self.Train.Announcer.Schedule == 0 then
if self.Depeat then
if self.LastStation > self.FirstStation then
self.CurrentStation = math.min(self.LastStation+1,self.CurrentStation + 1 + (self.Setup[Metrostroi.WorkingStations[self.Line][self.CurrentStation]+1] and 1 or 0))
else
self.CurrentStation = math.max(self.LastStation-1,self.CurrentStation - 1 - (self.Setup[Metrostroi.WorkingStations[self.Line][self.CurrentStation]-1] and 1 or 0))
end
end
if (self.LastStation < self.FirstStation and self.CurrentStation < self.LastStation or self.LastStation > self.FirstStation and self.CurrentStation > self.LastStation) and self.Depeat then
self.Depeat = false
if Metrostroi.AnnouncerData[Metrostroi.WorkingStations[self.Line][self.CurrentStation]] and Metrostroi.AnnouncerData[Metrostroi.WorkingStations[self.Line][self.CurrentStation]][9] then
self.CurrentStation = self.LastStation
local tem = self.FirstStation
self.FirstStation = self.LastStation
self.LastStation = tem
self.Depeat = not self.Depeat
else
self.CurrentStation = self.FirstStation
end
else
self.Depeat = not self.Depeat
end
self:PlaySound(Metrostroi.WorkingStations[self.Line][self.CurrentStation],not self.Depeat)
end
end
function TRAIN_SYSTEM:Think()
self.Train.R_G:TriggerInput("Set",1)
self.Train.R_ZS:TriggerInput("Set",1)
local Train = self.Train
if Train.VB.Value > 0.5 and Train.Battery.Voltage > 55 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
self.Triggers[v] = Train[v].Value > 0.5
end
end
end
self.Path = self.Train.CustomC.Value > 0
if self.FirstStation > self.LastStation and not self.Path or self.FirstStation < self.LastStation and self.Path then
local temp = self.FirstStation
self.FirstStation = self.LastStation
self.LastStation = temp
self.CurrentStation = self.FirstStation
self.Depeat = true
end
end