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.."/log.lua")
dofile(advtrains.modpath.."/passive.lua") dofile(advtrains.modpath.."/passive.lua")
if mesecon then
dofile(advtrains.modpath.."/p_mesecon_iface.lua")
end
dofile(advtrains.modpath.."/lzb.lua") 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) on_updated_from_nodedb = function(pos, node)
mesecon.receptor_off(pos) mesecon.receptor_off(pos)
end, end,
luaautomation = { advtrains = {
getstate = "off", getstate = "off",
setstate = function(pos, node, newstate) setstate = function(pos, node, newstate)
if newstate=="on" then if newstate=="on" then
@ -41,7 +41,7 @@ minetest.override_item("mesecons_switch:mesecon_switch_on", {
on_updated_from_nodedb = function(pos, node) on_updated_from_nodedb = function(pos, node)
mesecon.receptor_on(pos) mesecon.receptor_on(pos)
end, end,
luaautomation = { advtrains = {
getstate = "on", getstate = "on",
setstate = function(pos, node, newstate) setstate = function(pos, node, newstate)
if newstate=="off" then if newstate=="off" then
@ -49,5 +49,6 @@ minetest.override_item("mesecons_switch:mesecon_switch_on", {
mesecon.receptor_off(pos) mesecon.receptor_off(pos)
end end
end, end,
fallback_state = "off",
}, },
}) })

View File

@ -97,3 +97,25 @@ function advtrains.is_passive(parpos, pnode)
return false return false
end end
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) advtrains.ndb.swap_node(pos, {name = "advtrains:across_off", param2 = node.param2}, true)
end end
end, end,
fallback_state = "off",
}, },
on_rightclick=function(pos, node, player) on_rightclick=function(pos, node, player)
if advtrains.check_turnout_signal_protection(pos, player:get_player_name()) then 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? -- TODO use luaautomation timers?
if not nocallbacks then if not nocallbacks then
minetest.after(0, ilrs.update_waiting, "lck", pts) minetest.after(0, ilrs.update_waiting, "lck", pts)
minetest.after(0.5, advtrains.set_fallback_state, minetest.string_to_pos(pts))
end end
end end
-- frees all route locks, even manual ones set with the tool, at a specific position -- 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.."/atc_rail.lua")
dofile(mp.."/operation_panel.lua") dofile(mp.."/operation_panel.lua")
dofile(mp.."/pcnaming.lua") dofile(mp.."/pcnaming.lua")
if mesecon then
dofile(mp.."/p_mesecon_iface.lua")
end
dofile(mp.."/chatcmds.lua") dofile(mp.."/chatcmds.lua")