aboutsummaryrefslogtreecommitdiff
path: root/advtrains_line_automation/stoprail.lua
diff options
context:
space:
mode:
Diffstat (limited to 'advtrains_line_automation/stoprail.lua')
-rw-r--r--advtrains_line_automation/stoprail.lua60
1 files changed, 35 insertions, 25 deletions
diff --git a/advtrains_line_automation/stoprail.lua b/advtrains_line_automation/stoprail.lua
index 55a4785..a0e4442 100644
--- a/advtrains_line_automation/stoprail.lua
+++ b/advtrains_line_automation/stoprail.lua
@@ -1,6 +1,8 @@
-- stoprail.lua
-- adds "stop rail". Recognized by lzb. (part of behavior is implemented there)
+-- Get current translator
+local S = advtrains.lines.translate
local function to_int(n)
--- Disallow floating-point numbers
@@ -22,13 +24,14 @@ local function updatemeta(pos)
end
local door_dropdown = {L=1, R=2, C=3}
-local door_dropdown_rev = {Right="R", Left="L", Closed="C"}
+--local door_dropdown_rev = {Right="R", Left="L", Closed="C"} -- Code review : why are the value in an order different than the one in the dropdown box ?
+local door_dropdown_code = {"L", "R", "C"} -- switch to numerical index of selection : for conversion of the numerical index in the opening side selection dropdown box to the internal codification
local function show_stoprailform(pos, player)
local pe = advtrains.encode_pos(pos)
local pname = player:get_player_name()
if minetest.is_protected(pos, pname) then
- minetest.chat_send_player(pname, "Position is protected!")
+ minetest.chat_send_player(pname, S("You are not allowed to configure this track."))
return
end
@@ -51,18 +54,19 @@ local function show_stoprailform(pos, player)
local form = "size[8,7]"
form = form.."style[stn,ars;font=mono]"
- form = form.."field[0.8,0.8;2,1;stn;"..attrans("Station Code")..";"..minetest.formspec_escape(stdata.stn).."]"
- form = form.."field[2.8,0.8;5,1;stnname;"..attrans("Station Name")..";"..minetest.formspec_escape(stnname).."]"
- form = form.."field[0.80,2.0;1.75,1;ddelay;"..attrans("Door Delay")..";"..minetest.formspec_escape(stdata.ddelay).."]"
- form = form.."field[2.55,2.0;1.75,1;speed;"..attrans("Dep. Speed")..";"..minetest.formspec_escape(stdata.speed).."]"
- form = form.."field[4.30,2.0;1.75,1;track;"..attrans("Track")..";"..minetest.formspec_escape(stdata.track).."]"
- form = form.."field[6.05,2.0;1.75,1;wait;"..attrans("Stop Time")..";"..stdata.wait.."]"
- form = form.."label[0.5,2.6;"..attrans("Door Side").."]"
- form = form.."dropdown[0.51,3.0;2;doors;Left,Right,Closed;"..door_dropdown[stdata.doors].."]"
- form = form.."checkbox[3.00,2.7;reverse;"..attrans("Reverse train")..";"..(stdata.reverse and "true" or "false").."]"
- form = form.."checkbox[3.00,3.1;kick;"..attrans("Kick out passengers")..";"..(stdata.kick and "true" or "false").."]"
- form = form.."textarea[0.8,4.2;7,2;ars;Trains stopping here (ARS rules);"..advtrains.interlocking.ars_to_text(stdata.ars).."]"
- form = form.."button[0.5,6;7,1;save;"..attrans("Save").."]"
+ 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)
end
@@ -73,7 +77,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
local pos = advtrains.decode_pos(pe)
if pos then
if minetest.is_protected(pos, pname) then
- minetest.chat_send_player(pname, "Position is protected!")
+ minetest.chat_send_player(pname, S("You are not allowed to configure this track."))
return
end
@@ -87,6 +91,9 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
if fields.reverse then
tmp_checkboxes[pe].reverse = (fields.reverse == "true")
end
+ if fields.waitsig then
+ tmp_checkboxes[pe].waitsig = (fields.waitsig == "true")
+ end
if fields.save then
if fields.stn and stdata.stn ~= fields.stn and fields.stn ~= "" then
local stn = advtrains.lines.stations[fields.stn]
@@ -94,7 +101,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
if (stn.owner == pname or minetest.check_player_privs(pname, "train_admin")) then
stdata.stn = fields.stn
else
- minetest.chat_send_player(pname, "Station code '"..fields.stn.."' does already exist and is owned by "..stn.owner)
+ minetest.chat_send_player(pname, S("Station code \"@1\" already exists and is owned by @2.", fields.stn, stn.owner))
show_stoprailform(pos,player)
return
end
@@ -104,17 +111,17 @@ 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 ~= stn.name then
+ if stn and fields.stnname and fields.stnname~="" and fields.stnname ~= stn.name then
if (stn.owner == pname or minetest.check_player_privs(pname, "train_admin")) then
stn.name = fields.stnname
else
- minetest.chat_send_player(pname, "Not allowed to edit station name, owned by "..stn.owner)
+ minetest.chat_send_player(pname, S("This station is owned by @1. You are not allowed to edit its name.", stn.owner))
end
end
-- dropdowns
if fields.doors then
- stdata.doors = door_dropdown_rev[fields.doors] or "C"
+ stdata.doors = door_dropdown_code[tonumber(fields.doors)] or "C" -- switch to numerical index of selection; attention : fields.doors is string typed, needed to be converted to an integer typed index in door_dropdown_code table
end
if fields.track then
@@ -153,7 +160,7 @@ local adefunc = function(def, preset, suffix, rotation)
after_place_node=function(pos)
local pe = advtrains.encode_pos(pos)
advtrains.lines.stops[pe] = {
- stn="", track="", doors="R", wait=10
+ stn="", track="", doors="R", wait=10, waitsig = true
}
updatemeta(pos)
end,
@@ -179,8 +186,8 @@ local adefunc = function(def, preset, suffix, rotation)
if stdata.ars and (stdata.ars.default or advtrains.interlocking.ars_check_rule_match(stdata.ars, train) ) then
advtrains.lzb_add_checkpoint(train, index, 2, nil)
local stn = advtrains.lines.stations[stdata.stn]
- local stnname = stn and stn.name or "Unknown Station"
- train.text_inside = "Next Stop:\n"..stnname
+ 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)
end
end
@@ -196,10 +203,13 @@ local adefunc = function(def, preset, suffix, rotation)
if stdata.ars and (stdata.ars.default or advtrains.interlocking.ars_check_rule_match(stdata.ars, train) ) then
local stn = advtrains.lines.stations[stdata.stn]
- local stnname = stn and stn.name or "Unknown Station"
+ local stnname = stn and stn.name or S("Unknown Station")
-- Send ATC command and set text
- advtrains.atc.train_set_command(train, "B0 W O"..stdata.doors..(stdata.kick and "K" or "").." D"..stdata.wait.." OC "..(stdata.reverse and "R" or "").."D"..(stdata.ddelay or 1) .. " A1 S" ..(stdata.speed or "M"), true)
+ advtrains.atc.train_set_command(train, "B0 W O"..stdata.doors..(stdata.kick and "K" or "")
+ .." D"..stdata.wait.." "..(stdata.reverse and "R" or "")
+ .." A1 "..(stdata.waitsig and "G" or "")
+ .." OC D"..(stdata.ddelay or 1) .. " S" ..(stdata.speed or "M"), true)
train.text_inside = stnname
if tonumber(stdata.wait) then
minetest.after(tonumber(stdata.wait), function() train.text_inside = "" end)
@@ -218,7 +228,7 @@ if minetest.get_modpath("advtrains_train_track") ~= nil then
models_prefix="advtrains_dtrack",
models_suffix=".b3d",
shared_texture="advtrains_dtrack_shared_stop.png",
- description="Station/Stop Rail",
+ description=S("Station/Stop Track"),
formats={},
get_additional_definiton = adefunc,
}, advtrains.trackpresets.t_30deg_straightonly)