diff options
author | Singularis <singularis@volny.cz> | 2024-11-10 08:48:41 +0100 |
---|---|---|
committer | orwell <orwell@bleipb.de> | 2025-06-17 22:28:31 +0200 |
commit | ad721426f515ab8ae13e30204088ab3bcbd2ae7f (patch) | |
tree | 52c384a97892a528e7c7b51b90dd3996e2c57aea /advtrains_line_automation | |
parent | 90e84fb962876f22eb9f3720ff1e8f3804d89809 (diff) | |
download | advtrains-ad721426f515ab8ae13e30204088ab3bcbd2ae7f.tar.gz advtrains-ad721426f515ab8ae13e30204088ab3bcbd2ae7f.tar.bz2 advtrains-ad721426f515ab8ae13e30204088ab3bcbd2ae7f.zip |
[advtrains_line_automation] přepracováno okno koleje pro zastavení ve stanici
- [advtrains] opravena chyba kvůli které se občas nechtěl otevít formulář palubního počítače vlaku
- [advtrains_line_automation] kolej pro zastavení ve stanici nově dovoluje změnit zastavivšímu vlaku linku a směrový kód, rovněž nově umožňuje při odjezdu nezavírat dveře
- [moreblocks] oprava chybného zarovnání textur u některých nových tvarů
Diffstat (limited to 'advtrains_line_automation')
-rw-r--r-- | advtrains_line_automation/stoprail.lua | 84 |
1 files changed, 65 insertions, 19 deletions
diff --git a/advtrains_line_automation/stoprail.lua b/advtrains_line_automation/stoprail.lua index fb2c281..56c96ea 100644 --- a/advtrains_line_automation/stoprail.lua +++ b/advtrains_line_automation/stoprail.lua @@ -19,8 +19,10 @@ local function updatemeta(pos) if not stdata then meta:set_string("infotext", "Error") end + local stn = advtrains.lines.stations[stdata.stn] + local stn_viewname = stn and stn.name or "-" - meta:set_string("infotext", "Stn. "..stdata.stn.." T. "..stdata.track) + meta:set_string("infotext", S("Stn. @1 (@2) T. @3", stn_viewname, stdata.stn or "", stdata.track or "")) end local door_dropdown = {L=1, R=2, C=3} @@ -52,23 +54,43 @@ local function show_stoprailform(pos, player) stdata.speed = "M" end - local form = "size[8,7]" - form = form.."style[stn,ars;font=mono]" - form = form.."field[0.8,0.8;2,1;stn;"..S("Station Code")..";"..minetest.formspec_escape(stdata.stn).."]" - form = form.."field[2.8,0.8;5,1;stnname;"..S("Station Name")..";"..minetest.formspec_escape(stnname).."]" - form = form.."field[0.80,2.0;1.75,1;ddelay;"..S("Door Delay")..";"..minetest.formspec_escape(stdata.ddelay).."]" - form = form.."field[2.55,2.0;1.75,1;speed;"..S("Dep. Speed")..";"..minetest.formspec_escape(stdata.speed).."]" - form = form.."field[4.30,2.0;1.75,1;track;"..S("Track")..";"..minetest.formspec_escape(stdata.track).."]" - form = form.."field[6.05,2.0;1.75,1;wait;"..S("Stop Time")..";"..stdata.wait.."]" - form = form.."label[0.5,2.6;"..S("Door Side").."]" - form = form.."dropdown[0.51,3.0;2;doors;"..S("Left")..","..S("Right")..","..S("Closed")..";"..door_dropdown[stdata.doors]..";true]" -- switch to numerical index of the selection - form = form.."checkbox[3.00,2.4;reverse;"..S("Reverse train")..";"..(stdata.reverse and "true" or "false").."]" - form = form.."checkbox[3.00,2.8;kick;"..S("Kick out passengers")..";"..(stdata.kick and "true" or "false").."]" - form = form.."checkbox[3.00,3.2;waitsig;"..S("Wait for signal to clear")..";"..(stdata.waitsig and "true" or "false").."]" - form = form.."textarea[0.8,4.2;7,2;ars;"..S("Trains stopping here (ARS rules)")..";"..advtrains.interlocking.ars_to_text(stdata.ars).."]" - form = form.."button[0.5,6;7,1;save;"..S("Save").."]" - - minetest.show_formspec(pname, "at_lines_stop_"..pe, form) + local item_name = (minetest.registered_items["advtrains_line_automation:dtrack_stop_placer"] or {}).description or "" + local formspec = "formspec_version[4]".. + "size[8,10]".. + "item_image[0.25,0.25;1,1;advtrains_line_automation:dtrack_stop_placer]".. + "label[1.4,0.85;"..minetest.formspec_escape(item_name).."]".. + "button_exit[7,0.25;0.75,0.75;close;X]".. + "style[stn,ars,line,routingcode;font=mono]".. + "field[0.25,2;2,0.75;stn;"..S("Station Code")..";"..minetest.formspec_escape(stdata.stn).."]".. + "field[2.5,2;4,0.75;stnname;"..S("Station Name")..";"..minetest.formspec_escape(stnname).."]".. + "field[6.75,2;1,0.75;track;"..S("Track")..";"..minetest.formspec_escape(stdata.track).."]".. + "label[0.25,3.4;"..S("Door Side").."]".. + "dropdown[2.25,3;2,0.75;doors;vlevo,vpravo,neotvírat;"..door_dropdown[stdata.doors].."]".. + "checkbox[4.5,3.25;reverse;"..S("Reverse train")..";"..(stdata.reverse and "true" or "false").."]".. + "checkbox[4.5,3.75;kick;"..S("Kick out passengers")..";"..(stdata.kick and "true" or "false").."]".. + "checkbox[4.5,4.25;keepopen;Nezavírat dveře na odj.;"..(stdata.keepopen and "true" or "false").."]".. + "label[0.25,4.3;"..S("Stop Time").."]".. + "field[0.25,4.5;1,0.75;wait;;"..stdata.wait.."]".. + "label[1.5,4.9;+]".. + "field[2,4.5;1,0.75;ddelay;;"..minetest.formspec_escape(stdata.ddelay).."]".. -- "..S("Door Delay").." + "field[0.25,6;2,0.75;speed;"..S("Dep. Speed")..";"..minetest.formspec_escape(stdata.speed).."]".. + "field[2.5,6;2,0.75;line;Linka na odj.;"..minetest.formspec_escape(stdata.line or "").."]".. + "field[4.75,6;2,0.75;routingcode;Sm.kód na odj.;"..minetest.formspec_escape(stdata.routingcode or "").."]".. + "textarea[0.25,7.25;7.5,1.5;ars;"..S("Trains stopping here (ARS rules)")..";"..advtrains.interlocking.ars_to_text(stdata.ars).."]".. + "button_exit[0.25,9;7.5,0.75;save;"..S("Save").."]".. + "tooltip[close;Zavře dialogové okno]".. + "tooltip[stn;Vnitřní kód stanice/zastávky pro jednodušší manipulaci. Jedna stanice může mít víc kolejí.]".. + "tooltip[stnname;Název stanice/zastávky\\, jak má být zobrazován. Pokud stanice/zastávka již existuje, nevyplňujte (stačí zadat kód a kolej)\\, leda chcete zastávku přejmenovat.]".. + "tooltip[track;Číslo koleje]".. + "tooltip[wait;Základní doba stání s otevřenými dveřmi]".. + "tooltip[ddelay;Dodatečná doba stání před odjezdem po uzavření dveří]".. + "tooltip[speed;Cílová rychlost zastavivšího vlaku na odjezdu. Platné hodnoty jsou M pro nejvyšší rychlost vlaku a čísla 0 až 20.]".. + "tooltip[line;Nová linka na odjezdu. Prázdné pole = zachovat stávající linku. Pro smazání linky zadejte znak -]".. + "tooltip[routingcode;Nový směrový kód na odjezdu. Prázdné pole = zachovat stávající směrový kód. Pro smazání kódu vlaku zadejte znak -]".. + "tooltip[ars;Seznam podmínek\\, z nichž musí vlak splnit alespoň jednu\\, aby zde zastavil:\nLN {linka}\nRC {směrovací kód}\n".. + "* = jakýkoliv vlak\n\\# komentář]" + + minetest.show_formspec(pname, "at_lines_stop_"..pe, formspec) end local tmp_checkboxes = {} minetest.register_on_player_receive_fields(function(player, formname, fields) @@ -93,6 +115,8 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) end if fields.waitsig then tmp_checkboxes[pe].waitsig = (fields.waitsig == "true") + if fields.keepopen then + tmp_checkboxes[pe].keepopen = (fields.keepopen == "true") end if fields.save then if fields.stn and stdata.stn ~= fields.stn and fields.stn ~= "" then @@ -111,7 +135,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) end end local stn = advtrains.lines.stations[stdata.stn] - if stn and fields.stnname and fields.stnname~="" and fields.stnname ~= stn.name then + if stn and fields.stnname and fields.stnname ~= stn.name and (stn.name == nil or stn.name == "" or fields.stnname ~= "") then if (stn.owner == pname or minetest.check_player_privs(pname, "train_admin")) then stn.name = fields.stnname else @@ -141,6 +165,12 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) if fields.speed then stdata.speed = to_int(fields.speed) or "M" end + if fields.line then + stdata.line = fields.line + end + if fields.routingcode then + stdata.routingcode = fields.routingcode + end for k,v in pairs(tmp_checkboxes[pe]) do --handle checkboxes stdata[k] = v or nil @@ -189,11 +219,15 @@ local adefunc = function(def, preset, suffix, rotation) local stnname = stn and stn.name or S("Unknown Station") train.text_inside = S("Next Stop:\n")..stnname advtrains.interlocking.ars_set_disable(train, true) + -- DEBUG: + -- minetest.chat_send_all("DEBUG: Train approaches to "..minetest.pos_to_string(pos).."!") + -- print("DEBUG: train approaches to "..minetest.pos_to_string(pos).." = "..dump2({train = train, stdata = stdata, pe = pe, pos = pos, index = index, has_entered = has_entered})) end end end end, on_train_enter = function(pos, train_id, train, index) + -- print("DEBUG: on_train_enter called: "..dump2({pos = pos, train_id = train_id, index = index})) if train.path_cn[index] == 1 then local pe = advtrains.encode_pos(pos) local stdata = advtrains.lines.stops[pe] @@ -211,6 +245,16 @@ local adefunc = function(def, preset, suffix, rotation) .." A1 "..(stdata.waitsig and "G" or "") .." OC D"..(stdata.ddelay or 1) .. " S" ..(stdata.speed or "M"), true) train.text_inside = stnname + if line == "-" then + train.line = nil + elseif line ~= "" then + train.line = line + end + if routingcode == "-" then + train.routingcode = nil + elseif routingcode ~= "" then + train.routingcode = routingcode + end if tonumber(stdata.wait) then minetest.after(tonumber(stdata.wait), function() train.text_inside = "" end) end @@ -221,6 +265,8 @@ local adefunc = function(def, preset, suffix, rotation) } end +advtrains.station_stop_rail_additional_definition = adefunc -- HACK for tieless_tracks + if minetest.get_modpath("advtrains_train_track") ~= nil then advtrains.register_tracks("default", { nodename_prefix="advtrains_line_automation:dtrack_stop", |