From 5c7f77725394d47ce0b907aabf885ea207a507bd Mon Sep 17 00:00:00 2001 From: autocommitter Date: Tue, 15 Oct 2024 22:37:32 +0200 Subject: State at 2024-10-15 --- auto_yards/nodes/(-643,26,2475).lua | 88 +++++++++++-------------------------- 1 file changed, 25 insertions(+), 63 deletions(-) (limited to 'auto_yards/nodes/(-643,26,2475).lua') diff --git a/auto_yards/nodes/(-643,26,2475).lua b/auto_yards/nodes/(-643,26,2475).lua index 1523fcd..086074b 100644 --- a/auto_yards/nodes/(-643,26,2475).lua +++ b/auto_yards/nodes/(-643,26,2475).lua @@ -1,68 +1,37 @@ -local yard_id = "CAN" +-- Automatic bouncer for headshunts, assuming longer headshunt than train length. Arrow points into headshunt +local rev_rc = "CAN_HS_N" +local rm_rc = true +local autocouple = "CAN_HS_N_AC" +local rm_cpl_rc = true +__approach_callback_mode = 1 + +if event.approach and not event.has_entered then + atc_set_lzb_tsr(3) + atc_set_ars_disable(true) + return +end + if event.train then - if F.has_rc(yard_id.."_LIGHT_EXIT") then return end - if F.has_rc(yard_id.."_NOSHUNT") then return end - - if F.has_rc("CAN_SHUFFLE") then -- train is consolidating wagons for export to ARC - if not atc_arrow then - schedule_in(";01",atc_id) -- prepare to reverse the train - return - end - print(F.get_rc_safe()) - F.remove_rc_match("CAN_CLASS_%S+") - F.remove_rc_match("CAN_COLLECT_%S+") - F.remove_rc("CAN_PICKUP CAN_HEADSHUNT CAN_FINAL_COLLECT") - local stage_list = { - "CAN_CLASS_ETHANOL CAN_COLLECT_ETHANOL CAN_FINAL_COLLECT", - "CAN_CLASS_ARC", - "CAN_CLASS_CORN CAN_COLLECT_CORN CAN_FINAL_COLLECT", - "CAN_CLASS_ARC", - "CAN_send_to_locostore" - } - F.add_rc(stage_list[S.yards[yard_id].shuffle_stage]) - print(F.get_rc_safe()) - print(S.yards[yard_id].shuffle_stage) - set_autocouple() - atc_set_ars_disable(false) - - if S.yards[yard_id].shuffle_stage == #stage_list then -- loco is returning to storage. release the yard - F.indicator(S.yards[yard_id].active_indicator_pos,false) - S.yards[yard_id].notify.ARC = true - interrupt_pos(S.yards[yard_id].notify_pos) - else - S.yards[yard_id].shuffle_stage = S.yards[yard_id].shuffle_stage + 1 + if not atc_arrow then --train has bounced + if F.has_rc(autocouple) then + atc_send("CplS0WD2S1") + if rm_cpl_rc then F.remove_rc({autocouple}) end end return end - if train_length() == 1 then -- eliminates near half the trains - if F.has_rc(yard_id.."_LOCOSTORE") then -- specifies only the relevant train - if F.has_rc(yard_id.."_DEPART") and F.has_rc(yard_id.."_FINAL_COLLECT") and F.has_rc(yard_id.."_HEADSHUNT") then --only activate if train is set to depart anyway - if not atc_arrow then -- train is pointing towards exit. let it pass and the reverse it - atc_set_ars_disable(true) - schedule_in(";01",atc_id) -- prepare to reverse the train - return - else --train has reversed. send it to the siding and deactivate the yard - F.remove_rc({yard_id.."_DEPART",yard_id.."_FINAL_COLLECT"}) - F.add_rc(yard_id.."_send_to_locostore") - atc_set_ars_disable(false) - F.indicator(S.yards[yard_id].active_indicator_pos, false) - S.yards[yard_id].departure_time = rwt.now() - S.yards[yard_id].departure_length = S.yards[yard_id].arrival_length - - if S.yards[yard_id].notify_pos then - interrupt_pos(S.yards[yard_id].notify_pos,"notify") - end - return - end - end - end + if not F.has_rc(rev_rc) then --not our train. disregard + atc_set_ars_disable(false) + return end + if rm_rc then F.remove_rc({rev_rc}) end + schedule_in(";01",atc_id) + return end -if event.schedule then --this is a duplicate of the reversing schedule in the env anyway +if event.schedule then if not atc_id then --bounce the train that just passed atc_send_to_train(event.msg,"B0WRD1A1S3") else @@ -71,13 +40,6 @@ if event.schedule then --this is a duplicate of the reversing schedule in the en else -- somehow another train crossed the controller before the first one returned. Unlikely but possible atc_send_to_train(event.msg,"BBOL") atc_send("BBOL") - F.indicator(yard.error_indicator_pos,true) end end - return -end - - - --- if all else fails, do a normal headshunt_yard function -F.headshunt_yard(yard_id,true) \ No newline at end of file +end \ No newline at end of file -- cgit v1.2.3