From ccbca355d411168e66c025598c0ab65b23ef0423 Mon Sep 17 00:00:00 2001 From: autocommitter Date: Mon, 22 Apr 2024 14:56:19 +0200 Subject: State at 2022-02-26 --- durt/init_code.lua | 312 +++++++++++++++++++++++++++++++++++++++++-- durt/nodes/(-2080,3,822).lua | 14 +- 2 files changed, 311 insertions(+), 15 deletions(-) (limited to 'durt') diff --git a/durt/init_code.lua b/durt/init_code.lua index 1cc815b..3919aa7 100644 --- a/durt/init_code.lua +++ b/durt/init_code.lua @@ -1,4 +1,206 @@ -S.lines = { S23 = { termini = { N = "Arc", S = "Rew" }, stations = { Rew = { name = "Redwood", doors = "L", next_station = { N = "Thc", S = false }, }, Thc = { name = "Tanh Cliffs", doors = "L", next_station = { N = "Noi", S = "Rew" }, }, Noi = { name = "No Idea", doors = "L", next_station = { N = "Lzf", S = "Thc" }, }, Lzf = { name = "Laza's Field", doors = "L", next_station = { N = "Bbh", S = "Noi" }, }, Bbh = { name = "Bamboo Hills", doors = "L", next_station = { N = "Arc", S = "Lzf" }, }, Arc = { name = "Arcadius", doors = "L", next_station = { N = false, S = "Bbh" }, } }, monitoring = { N = {}, S = {} } }, U21 = { termini = { E = "Tro", W = "Dbl" }, stations = { Dbl = { name = "Dubulti", doors = "R", next_station = { E = "Pav", W = "Ghd" } }, Pav = { name = "Pence Avenue", doors = "L", next_station = { E = "Ghd", W = "Dbl" } }, Ghd = { name = "Greenhat Mountain", doors = "L", next_station = { E = "Acm", W = "Dbl" } }, Acm = { name = "Acacia Mountains", doors = "L", next_station = { E = "Ghb", W = "Ghd" } }, Ghb = { name = "Green Hill Beach", doors = "L", next_station = { E = "Ged", W = "Acm" } }, Ged = { name = "Green Edge", doors = "L", next_station = { E = "Dri", W = "Ghb" } }, Dri = { name = "Dry Island", doors = "L", next_station = { E = "Gcl", W = "Ged" } }, Gcl = { name = "Green Cliffs", doors = "R", next_station = { E ="Sfs", W = "Dri" } }, Sfs = { name = "South Forest", doors = "R", next_station = { E = "Jms", W = "Gcl" } }, Jms = { name = "Jude Milhon Street", doors = "R", next_station = { E = "Bam", W = "Sfs" } }, Bam = { name = "Bamboo Hills", doors = "R", next_station = { E = "Cli", W = "Jms" } }, Cli = { name = "Clown Island", doors = "R", next_station = { E = "Wat", W = "Bam" } }, Wat = { name = "Something in the Water", doors = "L", next_station = { E = "Duf", W = "Cli" } }, Duf = { name = "Duff Rd", doors = "R", next_station = { E = "Tro", W = "Wat" } }, Tro = { name = "Turtle Rock", doors = "L", next_station = { E = false, W = "Duf" }, } }, monitoring = { E = {}, W = {}, S = {}, N = {} } } } S.runarounds = { ["TheStacks"] = {}, ["M27_Quarry_runaround"] = {}, ["M27_Breaker_Factory"] = {}, ["DJnc_4"] = {}, } +S.lines = { + S23 = { + termini = { + N = "Arc", + S = "Rew" + }, + stations = { + Rew = { + name = "Redwood", + doors = "L", + next_station = { + N = "Thc", + S = false + }, + }, + Thc = { + name = "Tanh Cliffs", + doors = "L", + next_station = { + N = "Noi", + S = "Rew" + }, + }, + Noi = { + name = "No Idea", + doors = "L", + next_station = { + N = "Lzf", + S = "Thc" + }, + }, + Lzf = { + name = "Laza's Field", + doors = "L", + next_station = { + N = "Bbh", + S = "Noi" + }, + }, + Bbh = { + name = "Bamboo Hills", + doors = "L", + next_station = { + N = "Arc", + S = "Lzf" + }, + }, + Arc = { + name = "Arcadius", + doors = "L", + next_station = { + N = false, + S = "Bbh" + }, + } + }, + monitoring = { + N = {}, + S = {} + } + }, + U21 = { + termini = { + E = "Tro", + W = "Dbl" + }, + stations = { + Dbl = { + name = "Dubulti", + doors = "R", + next_station = { + E = "Pav", + W = "Ghd" + } + }, + Pav = { + name = "Pence Avenue", + doors = "L", + next_station = { + E = "Ghd", + W = "Dbl" + } + }, + Ghd = { + name = "Greenhat Mountain", + doors = "L", + next_station = { + E = "Acm", + W = "Dbl" + } + }, + Acm = { + name = "Acacia Mountains", + doors = "L", + next_station = { + E = "Ghb", + W = "Ghd" + } + }, + Ghb = { + name = "Green Hill Beach", + doors = "L", + next_station = { + E = "Ged", + W = "Acm" + } + }, + Ged = { + name = "Green Edge", + doors = "L", + next_station = { + E = "Dri", + W = "Ghb" + } + }, + Dri = { + name = "Dry Island", + doors = "L", + next_station = { + E = "Gcl", + W = "Ged" + } + }, + Gcl = { + name = "Green Cliffs", + doors = "R", + next_station = { + E ="Sfs", + W = "Dri" + } + }, + Sfs = { + name = "South Forest", + doors = "R", + next_station = { + E = "Jms", + W = "Gcl" + } + }, + Jms = { + name = "Jude Milhon Street", + doors = "R", + next_station = { + E = "Bam", + W = "Sfs" + } + }, + Bam = { + name = "Bamboo Hills", + doors = "R", + next_station = { + E = "Cli", + W = "Jms" + } + }, + Cli = { + name = "Clown Island", + doors = "R", + next_station = { + E = "Wat", + W = "Bam" + } + }, + Wat = { + name = "Something in the Water", + doors = "L", + next_station = { + E = "Duf", + W = "Cli" + } + }, + Duf = { + name = "Duff Rd", + doors = "R", + next_station = { + E = "Tro", + W = "Wat" + } + }, + Tro = { + name = "Turtle Rock", + doors = "L", + next_station = { + E = false, + W = "Duf" + }, + } + }, + monitoring = { + E = {}, + W = {}, + S = {}, + N = {} + } + } +} + +S.runarounds = { + ["TheStacks"] = {}, + ["M27_Quarry_runaround"] = {}, + ["M27_Breaker_Factory"] = {}, + ["DJnc_4"] = {}, +} --------------------------------------------------------------------- @@ -8,10 +210,18 @@ S.M27_tracking = {} -- -4003,12,-2766 Between Alieane and Trojan -- -3766,15,-3562 EV_Beach<->Sinensis -- -3592,18,-3907 Sinensis<->Willow Tunnel --- -3602,18,-3961 Willow Tunnel <-> Djnc -- -3602.18.-3961 Djnc<->Dcaves --- -2345,15,-1336 Tanh Depot -- -1986,13,-1699 x2 Foundry entry +-- -3602,18,-3961 Willow Tunnel <-> Djnc +-- -3602.18.-3961 Djnc<->Dcaves +-- -2345,15,-1336 Tanh Depot +-- -1986,13,-1699 x2 Foundry entry -F.M27_tracking = function(id) if not event.train then return end local rc = get_rc() or "" if not rc:match("M27_tracking") then return end S.M27_tracking.last = S.M27_tracking.now S.M27_tracking.now = id end +F.M27_tracking = function(id) + if not event.train then return end + local rc = get_rc() or "" + if not rc:match("M27_tracking") then return end + S.M27_tracking.last = S.M27_tracking.now + S.M27_tracking.now = id +end --Atlac Yard Operations if event.init then @@ -39,7 +249,6 @@ F.remove_rc = function(rc_list,arrow_mode) if (arrow_mode == nil) or (atc_arrow == arrow_mode) then local rc = F.get_rc_safe() rc_list = rc_list or {} - -- ensure rc-remove table can be read local rc_remove = {} for _,v in pairs(rc_list) do @@ -53,14 +262,34 @@ F.remove_rc = function(rc_list,arrow_mode) table.insert(reinsert,token) end end - -- insert new string to train's rc - rc = table.concat(reinsert," ") - set_rc(rc) + set_rc(table.concat(reinsert," ")) end + return reinsert end -F.yard_road_count = function(yard,section_id,monitoring_light) if not S.yards[yard][section_id] then S.yards[yard][section_id] = {['car_count'] = 0} end local car_count = S.yards[yard][section_id].car_count if event.train then if atc_arrow then --arrow points into section, add to length car_count = car_count + train_length() else -- subtract from car_count = car_count - train_length() end if car_count > 0 then -- light = on setstate(monitoring_light,"on") else car_count = 0 setstate(monitoring_light,"off") end S.yards[yard][section_id].car_count = car_count end end +F.yard_road_count = function(yard,section_id,monitoring_light) + if not S.yards[yard][section_id] then S.yards[yard][section_id] = {['car_count'] = 0} end + + local car_count = S.yards[yard][section_id].car_count + + if event.train then + if atc_arrow then --arrow points into section, add to length + car_count = car_count + train_length() + else -- subtract from + car_count = car_count - train_length() + end + + if car_count > 0 then -- light = on + setstate(monitoring_light,"on") + else + car_count = 0 + setstate(monitoring_light,"off") + end + + S.yards[yard][section_id].car_count = car_count + end +end --stats counter from subway/il_timetable @@ -105,4 +334,67 @@ if atc_id == reftrain then end end end - --------------------------------------------------------------------- --defining the functions F.arrive = function(stn_code,dir,line) S.lines[line].monitoring[dir][stn_code] = atc_id atc_send("B0 W O"..S.lines[line].stations[stn_code].doors) atc_set_text_inside("Arrived at:\n"..S.lines[line].stations[stn_code].name.."\n \nNext Station:\n"..S.lines[line].stations[S.lines[line].stations[stn_code].next_station[dir]].name) end F.depart = function(stn_code,dir,line) local pos = stn_code..dir local inside_text = "Next Stop:\n"..S.lines[line].stations[S.lines[line].stations[stn_code].next_station[dir]].name if can_set_route(pos,stn_code.."->"..S.lines[line].stations[stn_code].next_station[dir]) then set_route(pos,stn_code.."->"..S.lines[line].stations[stn_code].next_station[dir]) atc_send("OC SM") S.lines[line].monitoring[dir][stn_code] = nil S.lines[line].monitoring[dir][S.lines[line].stations[stn_code].next_station[dir]] = atc_id else -- Wait another 5s before trying again inside_text = inside_text.."\nWaiting to depart..." interrupt(5, "depart") end atc_set_text_inside(inside_text) end F.set_desto = function(dir, line) atc_set_text_outside("LINE " .. line .."\n---> " .. S.lines[line].stations[S.lines[line].termini[dir]].name) end --------------------------------------------------------------------- --LuaATC track functions F.station = function(stn_code,dir,line) -- temp until all SF LuaAtc tracks are changed------------------------- if line == nil or line == "1" then line = "U21" end --------------------------------------------------------------------- if event.train then F.arrive(stn_code,dir,line) interrupt(10,"depart") elseif event.int and event.msg=="depart" then F.depart(stn_code,dir,line) end end F.terminus = function(stn_code, newdir, line) if event.train then S.lines[line].monitoring[newdir][stn_code] = atc_id atc_send("B0 W R O"..S.lines[line].stations[stn_code].doors) atc_set_text_inside("Arrived at:\n"..S.lines[line].stations[stn_code].name.."\n \nNext Station:\n"..S.lines[line].stations[S.lines[line].stations[stn_code].next_station[newdir]].name) atc_set_text_outside("LINE " .. line .."\n---> " .. S.lines[line].stations[S.lines[line].termini[newdir]].name) interrupt(10, "depart") end if event.int and event.msg == "depart" then F.depart(stn_code, newdir,line) end end \ No newline at end of file + +--------------------------------------------------------------------- +--defining the functions + +F.arrive = function(stn_code,dir,line) + S.lines[line].monitoring[dir][stn_code] = atc_id + atc_send("B0 W O"..S.lines[line].stations[stn_code].doors) + atc_set_text_inside("Arrived at:\n"..S.lines[line].stations[stn_code].name.."\n \nNext Station:\n"..S.lines[line].stations[S.lines[line].stations[stn_code].next_station[dir]].name) +end + +F.depart = function(stn_code,dir,line) + local pos = stn_code..dir + local inside_text = "Next Stop:\n"..S.lines[line].stations[S.lines[line].stations[stn_code].next_station[dir]].name + if can_set_route(pos,stn_code.."->"..S.lines[line].stations[stn_code].next_station[dir]) then + set_route(pos,stn_code.."->"..S.lines[line].stations[stn_code].next_station[dir]) + atc_send("OC SM") + S.lines[line].monitoring[dir][stn_code] = nil + S.lines[line].monitoring[dir][S.lines[line].stations[stn_code].next_station[dir]] = atc_id + else + -- Wait another 5s before trying again + inside_text = inside_text.."\nWaiting to depart..." + interrupt(5, "depart") + end + atc_set_text_inside(inside_text) +end + +F.set_desto = function(dir, line) + atc_set_text_outside("LINE " .. line .."\n---> " .. S.lines[line].stations[S.lines[line].termini[dir]].name) +end + +--------------------------------------------------------------------- +--LuaATC track functions + +F.station = function(stn_code,dir,line) + +-- temp until all SF LuaAtc tracks are changed------------------------- + if line == nil or line == "1" then + line = "U21" + end +--------------------------------------------------------------------- + + if event.train then + F.arrive(stn_code,dir,line) + interrupt(10,"depart") + elseif event.int and event.msg=="depart" then + F.depart(stn_code,dir,line) + end +end + + +F.terminus = function(stn_code, newdir, line) + if event.train then + S.lines[line].monitoring[newdir][stn_code] = atc_id + + atc_send("B0 W R O"..S.lines[line].stations[stn_code].doors) + atc_set_text_inside("Arrived at:\n"..S.lines[line].stations[stn_code].name.."\n \nNext Station:\n"..S.lines[line].stations[S.lines[line].stations[stn_code].next_station[newdir]].name) + + atc_set_text_outside("LINE " .. line .."\n---> " .. S.lines[line].stations[S.lines[line].termini[newdir]].name) + interrupt(10, "depart") + end + if event.int and event.msg == "depart" then + F.depart(stn_code, newdir,line) + end +end \ No newline at end of file diff --git a/durt/nodes/(-2080,3,822).lua b/durt/nodes/(-2080,3,822).lua index 26904d3..d450d7d 100644 --- a/durt/nodes/(-2080,3,822).lua +++ b/durt/nodes/(-2080,3,822).lua @@ -1,20 +1,24 @@ local indicator = POS(-2080,6,826) -local rc = (get_rc() or "") +local rc = (get_rc or "") +local shunting_rc = {"ArcLoad_split","ArcLoad_around","ArcLoad_rejoin"} -if rc:match("ArcLoad_NOSHUNT") then return end +if type(rc) == "string" then rc = function() return "" end end +if rc():match("ArcLoad_NOSHUNT") then return end if event.train and atc_arrow then + print(get_rc()) if getstate(indicator) == "green" then - F.remove_rc({"ArcLoad_split","ArcLoad_around","ArcLoad_rejoin"},true) + F.remove_rc(shunting_rc,true) atc_send("S0WRD1A1S2D10SM") setstate(indicator,"red") - set_rc(rc.." ArcLoad_exit") + set_rc(rc().." ArcLoad_exit") else local o_text = atc_get_text_outside() or "" atc_set_text_outside("Waiting for Locomotive") split_off_locomotive("A0B0",1) atc_set_text_outside(o_text) - set_rc(rc.." ArcLoad_split ArcLoad_around ArcLoad_rejoin") + set_rc(rc().." "..table.concat(shunting_rc," ")) setstate(indicator,"green") end + print(get_rc()) end \ No newline at end of file -- cgit v1.2.3