aboutsummaryrefslogtreecommitdiff
path: root/advtrains_interlocking/signal_aspect_ui.lua
diff options
context:
space:
mode:
Diffstat (limited to 'advtrains_interlocking/signal_aspect_ui.lua')
-rw-r--r--advtrains_interlocking/signal_aspect_ui.lua51
1 files changed, 43 insertions, 8 deletions
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