From dcdd3ea702494e9e5bfeba96a72999f35aa2c91a Mon Sep 17 00:00:00 2001 From: ywang Date: Sun, 30 May 2021 12:16:09 +0200 Subject: round speed limit downward if needed; add basic distant signal implementation --- advtrains_interlocking/routesetting.lua | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) (limited to 'advtrains_interlocking/routesetting.lua') diff --git a/advtrains_interlocking/routesetting.lua b/advtrains_interlocking/routesetting.lua index 67efaea..d801608 100644 --- a/advtrains_interlocking/routesetting.lua +++ b/advtrains_interlocking/routesetting.lua @@ -44,7 +44,7 @@ function ilrs.set_route(signal, route, try) local i = 1 local rtename = route.name local signalname = ildb.get_tcbs(signal).signal_name - local c_tcbs, c_ts_id, c_ts, c_rseg, c_lckp + local c_tcbs, c_ts_id, c_ts, c_rseg, c_lckp, p_ssigd while c_sigd and i<=#route do c_tcbs = ildb.get_tcbs(c_sigd) if not c_tcbs then @@ -112,9 +112,16 @@ function ilrs.set_route(signal, route, try) } if c_tcbs.signal then c_tcbs.route_committed = true - c_tcbs.aspect = route.aspect or advtrains.interlocking.GENERIC_FREE + local asp = route.aspect or advtrains.interlocking.GENERIC_FREE + asp.dst = nil + c_tcbs.aspect = asp c_tcbs.route_origin = signal - advtrains.interlocking.update_signal_aspect(c_tcbs) + advtrains.interlocking.distant.update(c_tcbs) + -- Update the previous distant signal + if p_ssigd then + advtrains.interlocking.distant.assign(c_sigd, p_ssigd) + end + p_ssigd = c_sigd end end -- advance @@ -122,6 +129,17 @@ function ilrs.set_route(signal, route, try) c_sigd = c_rseg.next i = i + 1 end + + if c_sigd and p_ssigd then + local e_tcbs = ildb.get_tcbs(c_sigd) + if e_tcbs.signal then + if p_stcb then + p_stcb.aspect.dst = (e_tcbs.aspect or advtrains.interlocking.DANGER).main + advtrains.interlocking.update_signal_aspect(p_stcb) + end + end + advtrains.interlocking.distant.assign(c_sigd, p_ssigd) + end return true end -- cgit v1.2.3