Reduce number of set_aspect calls
This commit is contained in:
parent
875968f078
commit
4a3d442601
|
@ -62,7 +62,7 @@ local function unassign_all(pos, force)
|
||||||
unassign_dst(pos, force)
|
unassign_dst(pos, force)
|
||||||
end
|
end
|
||||||
|
|
||||||
local function assign(main, dst, by)
|
local function assign(main, dst, by, skip_update)
|
||||||
local pts_main = pts(main)
|
local pts_main = pts(main)
|
||||||
local pts_dst = pts(dst)
|
local pts_dst = pts(dst)
|
||||||
local t = db_distant[pts_main]
|
local t = db_distant[pts_main]
|
||||||
|
@ -76,7 +76,9 @@ local function assign(main, dst, by)
|
||||||
unassign_dst(dst, true)
|
unassign_dst(dst, true)
|
||||||
t[pts_dst] = by
|
t[pts_dst] = by
|
||||||
db_distant_of[pts_dst] = {pts_main, by}
|
db_distant_of[pts_dst] = {pts_main, by}
|
||||||
update_dst(dst)
|
if not skip_update then
|
||||||
|
update_dst(dst)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
local function pre_occupy(dst, by)
|
local function pre_occupy(dst, by)
|
||||||
|
|
|
@ -115,8 +115,7 @@ function ilrs.set_route(signal, route, try)
|
||||||
c_tcbs.route_committed = true
|
c_tcbs.route_committed = true
|
||||||
c_tcbs.aspect = route.aspect or advtrains.interlocking.FULL_FREE
|
c_tcbs.aspect = route.aspect or advtrains.interlocking.FULL_FREE
|
||||||
c_tcbs.route_origin = signal
|
c_tcbs.route_origin = signal
|
||||||
advtrains.interlocking.update_signal_aspect(c_tcbs)
|
signals[#signals+1] = c_tcbs
|
||||||
signals[#signals+1] = c_tcbs.signal
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
-- advance
|
-- advance
|
||||||
|
@ -136,11 +135,13 @@ function ilrs.set_route(signal, route, try)
|
||||||
end
|
end
|
||||||
for i = #signals, 1, -1 do
|
for i = #signals, 1, -1 do
|
||||||
if lastsig then
|
if lastsig then
|
||||||
local pos = signals[i]
|
local tcbs = signals[i]
|
||||||
|
local pos = tcbs.signal
|
||||||
local _, assigned_by = advtrains.distant.get_main(pos)
|
local _, assigned_by = advtrains.distant.get_main(pos)
|
||||||
if not assigned_by or assigned_by == "routesetting" then
|
if not assigned_by or assigned_by == "routesetting" then
|
||||||
advtrains.distant.assign(lastsig, signals[i], "routesetting")
|
advtrains.distant.assign(lastsig, pos, "routesetting", true)
|
||||||
end
|
end
|
||||||
|
advtrains.interlocking.update_signal_aspect(tcbs, i ~= 1)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -250,14 +251,14 @@ function ilrs.cancel_route_from(sigd)
|
||||||
c_tcbs.route_auto = nil
|
c_tcbs.route_auto = nil
|
||||||
c_tcbs.route_origin = nil
|
c_tcbs.route_origin = nil
|
||||||
|
|
||||||
advtrains.interlocking.update_signal_aspect(c_tcbs)
|
|
||||||
if c_tcbs.signal then
|
if c_tcbs.signal then
|
||||||
local pos = c_tcbs.signal
|
local pos = c_tcbs.signal
|
||||||
local _, assigned_by = advtrains.distant.get_main(pos)
|
local _, assigned_by = advtrains.distant.get_main(pos)
|
||||||
if assigned_by == "routesetting" then
|
if assigned_by == "routesetting" then
|
||||||
advtrains.distant.unassign_dst(pos)
|
advtrains.distant.unassign_dst(pos, true)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
advtrains.interlocking.update_signal_aspect(c_tcbs)
|
||||||
|
|
||||||
c_ts_id = c_tcbs.ts_id
|
c_ts_id = c_tcbs.ts_id
|
||||||
if not c_tcbs then
|
if not c_tcbs then
|
||||||
|
|
|
@ -204,10 +204,10 @@ local function convert_aspect_if_necessary(asp)
|
||||||
end
|
end
|
||||||
advtrains.interlocking.signal_convert_aspect_if_necessary = convert_aspect_if_necessary
|
advtrains.interlocking.signal_convert_aspect_if_necessary = convert_aspect_if_necessary
|
||||||
|
|
||||||
function advtrains.interlocking.update_signal_aspect(tcbs)
|
function advtrains.interlocking.update_signal_aspect(tcbs, skipdst)
|
||||||
if tcbs.signal then
|
if tcbs.signal then
|
||||||
local asp = tcbs.aspect or DANGER
|
local asp = tcbs.aspect or DANGER
|
||||||
advtrains.interlocking.signal_set_aspect(tcbs.signal, asp)
|
advtrains.interlocking.signal_set_aspect(tcbs.signal, asp, skipdst)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -95,7 +95,7 @@ get_aspect = function(pos)
|
||||||
return asp
|
return asp
|
||||||
end
|
end
|
||||||
|
|
||||||
local function set_aspect(pos, asp)
|
local function set_aspect(pos, asp, skipdst)
|
||||||
local node = N.get_node(pos)
|
local node = N.get_node(pos)
|
||||||
local ndef = minetest.registered_nodes[node.name]
|
local ndef = minetest.registered_nodes[node.name]
|
||||||
if ndef and ndef.advtrains and ndef.advtrains.set_aspect then
|
if ndef and ndef.advtrains and ndef.advtrains.set_aspect then
|
||||||
|
@ -105,7 +105,7 @@ local function set_aspect(pos, asp)
|
||||||
ndef.advtrains.set_aspect(pos, node, aspval)
|
ndef.advtrains.set_aspect(pos, node, aspval)
|
||||||
I.signal_on_aspect_changed(pos)
|
I.signal_on_aspect_changed(pos)
|
||||||
local aspect_changed = A.not_equalp(oldasp, newasp)
|
local aspect_changed = A.not_equalp(oldasp, newasp)
|
||||||
if aspect_changed then
|
if (not skipdst) and aspect_changed then
|
||||||
D.update_main(pos)
|
D.update_main(pos)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue