diff options
author | ywang <yw05@forksworld.de> | 2021-05-30 12:16:09 +0200 |
---|---|---|
committer | ywang <yw05@forksworld.de> | 2021-05-30 12:16:09 +0200 |
commit | dcdd3ea702494e9e5bfeba96a72999f35aa2c91a (patch) | |
tree | 3104a3e204f4a4e237fc4f8fc4b2e29452b267d0 /advtrains_interlocking/routesetting.lua | |
parent | 06002447242bc9dcc3e6d176981a5d30cc7a0ce9 (diff) | |
download | advtrains-dcdd3ea702494e9e5bfeba96a72999f35aa2c91a.tar.gz advtrains-dcdd3ea702494e9e5bfeba96a72999f35aa2c91a.tar.bz2 advtrains-dcdd3ea702494e9e5bfeba96a72999f35aa2c91a.zip |
round speed limit downward if needed; add basic distant signal implementation
Diffstat (limited to 'advtrains_interlocking/routesetting.lua')
-rw-r--r-- | advtrains_interlocking/routesetting.lua | 24 |
1 files changed, 21 insertions, 3 deletions
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 |