diff options
-rw-r--r-- | durt/init_code.lua | 312 | ||||
-rw-r--r-- | durt/nodes/(-2080,3,822).lua | 14 |
2 files changed, 311 insertions, 15 deletions
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 |