diff options
-rw-r--r-- | durt/init_code.lua | 33 | ||||
-rw-r--r-- | durt/nodes/(-1440,11,-2580).lua | 1 | ||||
-rw-r--r-- | durt/nodes/(-1515,11,-2588).lua | 7 |
3 files changed, 40 insertions, 1 deletions
diff --git a/durt/init_code.lua b/durt/init_code.lua index 2cd41c9..85776a4 100644 --- a/durt/init_code.lua +++ b/durt/init_code.lua @@ -23,6 +23,39 @@ if event.init then S.yards = S.yards or list_of_yards end +F.remove_rc = function(rc_list,arrow_mode) + -- rc_list MUST be a table of rc codes to remove + -- eg: {"rc1","rc2"} + -- Arrow Modes: + -- true: with arrow direction + -- false: against arrow direction + -- nil: ignores arrow direction + + if not event.train then return end + if (arrow_mode == nil) or (atc_arrow == arrow_mode) then + local rc = get_rc() or "" + rc_list = rc_list or {} + + -- ensure rc-remove table can be read + local rc_remove = {} + for _,v in pairs(rc_list) do + rc_remove[v] = true + end + + -- remove codes from train's rc + local reinsert = {} + for token in rc:gmatch("[^%s]+") do + if not rc_remove[token] then + table.insert(reinsert,token) + end + end + + -- insert new string to train's rc + rc = table.concat(reinsert," ") + set_rc(rc) + 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 diff --git a/durt/nodes/(-1440,11,-2580).lua b/durt/nodes/(-1440,11,-2580).lua new file mode 100644 index 0000000..57b5d9c --- /dev/null +++ b/durt/nodes/(-1440,11,-2580).lua @@ -0,0 +1 @@ +F.remove_rc({"S27_EXIT","S27_test"},true)
\ No newline at end of file diff --git a/durt/nodes/(-1515,11,-2588).lua b/durt/nodes/(-1515,11,-2588).lua index 7352032..b3a645f 100644 --- a/durt/nodes/(-1515,11,-2588).lua +++ b/durt/nodes/(-1515,11,-2588).lua @@ -1 +1,6 @@ -if event.train and atc_arrow then
if S.yards.S27.shunt_type == false then
--reverse around loop. player not present to supervise autocouple operation
local rc = get_rc() or ""
local action = 0
local rc_list = {}
for token in rc:gmatch("[^%s]+") do
if token=="S27_LOOP" then
action = 1
else
table.insert(rc_list,token)
end
end
if action == 0 then
rc = rc.." S27_LOOP"
else
rc = table.concat(rc_list," ").." S27_EXIT"
end
set_rc(rc)
atc_set_ars_disable(false)
atc_send("B0WRD1S3")
return
end
end
\ No newline at end of file +if event.train and atc_arrow then + atc_set_ars_disable(false) + atc_send("S3") + set_rc(get_rc().." S27_EXIT") + return +end
\ No newline at end of file |