Add "Fallback state" for freed routes, move p_mesecon_iface.lua to core

master
orwell96 2020-07-07 14:25:47 +02:00
parent 96236c04dc
commit f33bb563e7
6 changed files with 32 additions and 5 deletions

View File

@ -215,6 +215,10 @@ dofile(advtrains.modpath.."/craft_items.lua")
dofile(advtrains.modpath.."/log.lua")
dofile(advtrains.modpath.."/passive.lua")
if mesecon then
dofile(advtrains.modpath.."/p_mesecon_iface.lua")
end
dofile(advtrains.modpath.."/lzb.lua")

View File

@ -16,7 +16,7 @@ minetest.override_item("mesecons_switch:mesecon_switch_off", {
on_updated_from_nodedb = function(pos, node)
mesecon.receptor_off(pos)
end,
luaautomation = {
advtrains = {
getstate = "off",
setstate = function(pos, node, newstate)
if newstate=="on" then
@ -41,7 +41,7 @@ minetest.override_item("mesecons_switch:mesecon_switch_on", {
on_updated_from_nodedb = function(pos, node)
mesecon.receptor_on(pos)
end,
luaautomation = {
advtrains = {
getstate = "on",
setstate = function(pos, node, newstate)
if newstate=="off" then
@ -49,5 +49,6 @@ minetest.override_item("mesecons_switch:mesecon_switch_on", {
mesecon.receptor_off(pos)
end
end,
fallback_state = "off",
},
})

View File

@ -97,3 +97,25 @@ function advtrains.is_passive(parpos, pnode)
return false
end
end
-- switches a node back to fallback state, if defined. Doesn't support pcnaming.
function advtrains.set_fallback_state(pos, pnode)
local node=pnode or advtrains.ndb.get_node(pos)
local ndef=minetest.registered_nodes[node.name]
local st
if ndef and ndef.advtrains and ndef.advtrains.setstate
and ndef.advtrains.fallback_state then
if advtrains.get_train_at_pos(pos) then
return false
end
if advtrains.interlocking and advtrains.interlocking.route.has_route_lock(minetest.pos_to_string(pos)) then
return false
end
ndef.advtrains.setstate(pos, node, ndef.advtrains.fallback_state)
return true
end
end

View File

@ -302,6 +302,7 @@ minetest.register_node("advtrains:across_on", {
advtrains.ndb.swap_node(pos, {name = "advtrains:across_off", param2 = node.param2}, true)
end
end,
fallback_state = "off",
},
on_rightclick=function(pos, node, player)
if advtrains.check_turnout_signal_protection(pos, player:get_player_name()) then

View File

@ -206,6 +206,7 @@ function ilrs.free_route_locks_indiv(pts, ts, nocallbacks)
-- TODO use luaautomation timers?
if not nocallbacks then
minetest.after(0, ilrs.update_waiting, "lck", pts)
minetest.after(0.5, advtrains.set_fallback_state, minetest.string_to_pos(pts))
end
end
-- frees all route locks, even manual ones set with the tool, at a specific position

View File

@ -33,9 +33,7 @@ dofile(mp.."/active_common.lua")
dofile(mp.."/atc_rail.lua")
dofile(mp.."/operation_panel.lua")
dofile(mp.."/pcnaming.lua")
if mesecon then
dofile(mp.."/p_mesecon_iface.lua")
end
dofile(mp.."/chatcmds.lua")