mirror of
https://github.com/metrostroi-repo/MetrostroiAddon.git
synced 2026-05-02 00:42:29 +00:00
216 lines
7.8 KiB
Lua
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
|