From d794e382b59bb42888f3fb9b1d61f6ac6f7e2bdb Mon Sep 17 00:00:00 2001 From: "Y. Wang" Date: Wed, 13 Apr 2022 12:54:58 +0200 Subject: Primitive (not fully tested) support for route signaling --- advtrains_signals_japan/init.lua | 49 ++++++++++++++++++++++++++++++++-------- 1 file changed, 40 insertions(+), 9 deletions(-) (limited to 'advtrains_signals_japan/init.lua') diff --git a/advtrains_signals_japan/init.lua b/advtrains_signals_japan/init.lua index a546847..7b11d85 100644 --- a/advtrains_signals_japan/init.lua +++ b/advtrains_signals_japan/init.lua @@ -278,14 +278,26 @@ minetest.register_node("advtrains_signals_japan:pole_0", { local sigdefs = {} local lightcolors = { red = "red", - green = "green", + green = "lime", yellow = "orange", distant = "purple", } -local function process_signal(sigdata, isrpt) +local aspnames = { + danger = "Danger (halt)", + restrictedspeed = "Restricted speed", + caution = "Caution", + reducedspeed = "Reduced speed", + clear = "Clear (proceed)", +} +local function process_signal(name, sigdata, isrpt) + local typename = "advtrains_signals_japan:" .. name + local type2def = {} + type2def.name = typename + type2def.main = {} local def = {} local tx = {} local invimg = {} + def.typename = typename def.textures = tx def.inventory_images = invimg def.desc = sigdata.desc @@ -296,7 +308,7 @@ local function process_signal(sigdata, isrpt) lightcount = lightcount+1 end def.lightcount = lightcount - for _, asp in pairs(sigdata.aspects) do + for idx, asp in ipairs(sigdata.aspects) do local aspname = asp.name local tt = { string.format("[combine:1x%d", lightcount), @@ -318,6 +330,10 @@ local function process_signal(sigdata, isrpt) end tx[aspname] = table.concat(tt, ":") invimg[aspname] = table.concat(it, ":") + type2def.main[idx] = {name = asp.name, label = S(aspnames[asp.name]), main = asp.main or false} + end + if not isrpt then + advtrains.interlocking.aspects.register_type2(type2def) end return def end @@ -326,16 +342,16 @@ for sigtype, sigdata in pairs { desc = "5A", lights = {"yellow", "yellow", "red", "yellow", "green"}, aspects = { - {name = "danger", lights = {3}}, + {name = "danger", lights = {3}, main = 0}, {name = "restrictedspeed", lights = {1, 3}}, {name = "caution", lights = {4}}, {name = "reducedspeed", lights = {2, 5}}, - {name = "clear", lights = {5}}, + {name = "clear", lights = {5}, main = -1}, } } } do - sigdefs["main_"..sigtype] = process_signal(sigdata) - sigdefs["rpt_"..sigtype] = process_signal(sigdata, true) + sigdefs["main_"..sigtype] = process_signal(sigtype, sigdata) + sigdefs["rpt_"..sigtype] = process_signal(sigtype, sigdata, true) end for k in pairs(sigdefs) do @@ -371,13 +387,28 @@ for _, rtab in ipairs { }, groups = { cracky = 2, - --advtrains_signal = 1, + advtrains_signal = 1, not_blocking_trains = 1, - --save_in_at_nodedb = 1, + save_in_at_nodedb = 1, not_in_creative_inventory = rtab.ici and 0 or 1, }, inventory_image = siginfo.inventory_images[asp], drop = "advtrains_signals_japan:"..sigtype.."_danger_0", + advtrains = { + supported_aspects = { + type = 2, + group = siginfo.typename, + }, + get_aspect = function() + return asp + end, + set_aspect = function(pos, node, asp) + advtrains.ndb.swap_node(pos, {name = "advtrains_signals_japan:"..sigtype.."_"..asp.."_"..rot, param2 = node.param2}) + end, + }, + on_rightclick = advtrains.interlocking.signal_rc_handler, + can_dig = advtrains.interlocking.signal_can_dig, + after_dig_node = advtrains.interlocking.signal_after_dig, }) advtrains.trackplacer.add_worked("advtrains_signals_japan:"..sigtype, asp, "_"..rot) end -- cgit v1.2.3