aboutsummaryrefslogtreecommitdiff
path: root/advtrains_interlocking/routesetting.lua
diff options
context:
space:
mode:
authorywang <yw05@forksworld.de>2021-05-30 12:16:09 +0200
committerywang <yw05@forksworld.de>2021-05-30 12:16:09 +0200
commitdcdd3ea702494e9e5bfeba96a72999f35aa2c91a (patch)
tree3104a3e204f4a4e237fc4f8fc4b2e29452b267d0 /advtrains_interlocking/routesetting.lua
parent06002447242bc9dcc3e6d176981a5d30cc7a0ce9 (diff)
downloadadvtrains-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.lua24
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