aboutsummaryrefslogtreecommitdiff
path: root/advtrains_interlocking/routesetting.lua
diff options
context:
space:
mode:
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