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
This commit is contained in:
1F616EMO 2024-06-30 06:20:42 +08:00 committed by orwell
parent 0a51d57138
commit ae394a43b8
2 changed files with 14 additions and 6 deletions

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
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