Compare commits

...

5 Commits

Author SHA1 Message Date
orwell 4cfd07e992 Remove superfluous train_id check from reverse_lookup
Reported by Sebastien F4GRX, thank you!
2024-08-01 22:13:26 +02:00
Maverick2797 216f28e51a Fix set_aspect()
Actually send aspect to advtrains.interlocking.signal_set_aspect() from LuaATC set_aspect()
2024-08-01 22:03:44 +02:00
Blockhead 7c4f1377e4 Fix section_occupancy: Return empty table
Fixes the functioning of the LuaATC function section_occupancy in
the presence of no trains.

Currently, if there is no train in the section,
advtrains.interlocking.db.get_ts will return a table with a nil entry.
When that nil value is passed to table.copy, Minetest throws out an error.
Instead of passing nil to table.copy, just make a new empty table.
2024-08-01 22:02:50 +02:00
1F616EMO a820318ecf Fix crossing bell positional stereo 2024-08-01 22:01:54 +02:00
1F616EMO ae394a43b8 Remove TCB marker on TCB removal
This patch fixes the following problem:

* TCB marker is not removed on TCB removal
* TCB marker is recreated on removal
2024-08-01 21:59:41 +02:00
5 changed files with 18 additions and 12 deletions

View File

@ -159,10 +159,8 @@ function o.reverse_lookup(ppos)
local r = {}
local i = 1
while t[i] do
if t[i]~=train_id then
if not r[t[i]] then r[t[i]] = {} end
table.insert(r[t[i]], t[i+1])
end
if not r[t[i]] then r[t[i]] = {} end
table.insert(r[t[i]], t[i+1])
i = i + 2
end
return r

View File

@ -425,7 +425,7 @@ function ildb.link_track_sections(merge_id, root_id)
merge_ts(root_id, merge_id)
end
function ildb.remove_from_interlocking(sigd)
function ildb.remove_from_interlocking(sigd, no_tcb_marker)
local tcbs = ildb.get_tcbs(sigd)
if not ildb.may_modify_tcbs(tcbs) then return false end
@ -455,7 +455,9 @@ function ildb.remove_from_interlocking(sigd)
track_sections[tsid] = nil
end
end
advtrains.interlocking.show_tcb_marker(sigd.p)
if not no_tcb_marker then
advtrains.interlocking.show_tcb_marker(sigd.p)
end
if tcbs.signal then
return false
end
@ -468,10 +470,11 @@ function ildb.remove_tcb(pos)
return true --FIX: not an error, because tcb is already removed
end
for connid=1,2 do
if not ildb.remove_from_interlocking({p=pos, s=connid}) then
if not ildb.remove_from_interlocking({p=pos, s=connid}, true) then
return false
end
end
advtrains.interlocking.remove_tcb_marker_pts(pts)
track_circuit_breaks[pts] = nil
return true
end

View File

@ -550,6 +550,13 @@ minetest.register_entity("advtrains_interlocking:tcbmarker", {
static_save = false,
})
function advtrains.interlocking.remove_tcb_marker_pts(pts)
if markerent[pts] then
markerent[pts]:remove()
markerent[pts] = nil
end
end
function advtrains.interlocking.show_tcb_marker(pos)
--atdebug("showing tcb marker",pos)
local tcb = ildb.get_tcb(pos)
@ -573,9 +580,7 @@ function advtrains.interlocking.show_tcb_marker(pos)
end
local pts = advtrains.roundfloorpts(pos)
if markerent[pts] then
markerent[pts]:remove()
end
advtrains.interlocking.remove_tcb_marker_pts(pts)
local obj = minetest.add_entity(pos, "advtrains_interlocking:tcbmarker")
if not obj then return end

View File

@ -224,7 +224,7 @@ if advtrains.interlocking then
end
static_env.set_aspect = function(signal, asp)
local pos = atlatc.pcnaming.resolve_pos(signal)
return advtrains.interlocking.signal_set_aspect(pos)
return advtrains.interlocking.signal_set_aspect(pos,asp)
end
--section_occupancy()
@ -233,7 +233,7 @@ if advtrains.interlocking then
ts_id = tostring(ts_id)
local response = advtrains.interlocking.db.get_ts(ts_id)
if not response then return false end
return table.copy(response.trains)
return (response.trains and table.copy(response.trains)) or {}
end
end