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_interlocking/signal_aspect_ui.lua | 51 ++++++++++++++++++++++++----- 1 file changed, 43 insertions(+), 8 deletions(-) (limited to 'advtrains_interlocking/signal_aspect_ui.lua') diff --git a/advtrains_interlocking/signal_aspect_ui.lua b/advtrains_interlocking/signal_aspect_ui.lua index d5a7543..472155a 100644 --- a/advtrains_interlocking/signal_aspect_ui.lua +++ b/advtrains_interlocking/signal_aspect_ui.lua @@ -2,7 +2,7 @@ local F = advtrains.formspec local players_aspsel = {} local function make_signal_aspect_selector_t1(suppasp, purpose, isasp) - local form = {"size[7,7]"} + local form = {"size[7,7.5]"} form[#form+1] = F.S_label(0.5, 0.5, "Select signal aspect") form[#form+1] = F.label(0.5, 1, purpose) @@ -59,7 +59,29 @@ local function make_signal_aspect_selector_t1(suppasp, purpose, isasp) end form[#form+1] = F.dropdown(0.5, 5, 6, "dst", entries, selid, true) - form[#form+1] = F.S_button_exit(0.5, 6, 5, 1, "save", "Save signal aspect") + form[#form+1] = F.S_button_exit(0.5, 6, 6, 1, "save", "Save signal aspect") + return table.concat(form) +end + +local function make_signal_aspect_selector_t2(suppasp, purpose, isasp) + local form = {"size[7,4]"} + local def = advtrains.interlocking.aspects.get_type2_definition(suppasp.group) + if not def then + return nil + end + form[#form+1] = F.S_label(0.5, 0.5, "Select signal aspect") + form[#form+1] = F.label(0.5, 1, purpose) + + local entries = {} + local selid = 1 + for idx, spv in ipairs(def.main) do + if isasp and isasp.type2name == spv.name then + selid = idx + end + entries[idx] = spv.label + end + form[#form+1] = F.dropdown(0.5, 1.5, 6, "asp", entries, selid, true) + form[#form+1] = F.S_button_exit(0.5, 2.5, 6, 1, "save", "Save signal aspect") return table.concat(form) end @@ -73,9 +95,14 @@ function advtrains.interlocking.show_signal_aspect_selector(pname, p_suppasp, p_ local purpose = p_purpose or "" local form - if true then + if suppasp.type == 2 then + form = make_signal_aspect_selector_t2(suppasp, purpose, isasp) + else form = make_signal_aspect_selector_t1(suppasp, purpose, isasp) end + if not form then + return + end local token = advtrains.random_id() minetest.show_formspec(pname, "at_il_sigaspdia_"..token, form) @@ -107,18 +134,26 @@ local function get_aspect_from_formspec_t1(suppasp, fields) } end +local function get_aspect_from_formspec_t2(suppasp, fields) + local asp = advtrains.interlocking.aspects.type2main_to_type1(suppasp.group, tonumber(fields.asp)) + return asp +end + minetest.register_on_player_receive_fields(function(player, formname, fields) local pname = player:get_player_name() local psl = players_aspsel[pname] if psl then if formname == "at_il_sigaspdia_"..psl.token then + local suppasp = psl.suppasp if fields.save then local asp - if true then - asp = get_aspect_from_formspec_t1(psl.suppasp, fields) - if asp then - psl.callback(pname, asp) - end + if suppasp.type == 2 then + asp = get_aspect_from_formspec_t2(suppasp, fields) + else + asp = get_aspect_from_formspec_t1(suppasp, fields) + end + if asp then + psl.callback(pname, asp) end end else -- cgit v1.2.3