diff options
-rw-r--r-- | advtrains/trainhud.lua | 9 | ||||
-rw-r--r-- | advtrains/trainlogic.lua | 3 | ||||
-rw-r--r-- | advtrains/wagons.lua | 35 | ||||
-rw-r--r-- | advtrains_interlocking/lzb.lua | 2 |
4 files changed, 43 insertions, 6 deletions
diff --git a/advtrains/trainhud.lua b/advtrains/trainhud.lua index f326427..9ea7466 100644 --- a/advtrains/trainhud.lua +++ b/advtrains/trainhud.lua @@ -161,8 +161,9 @@ function advtrains.hud_train_format(train, flip) local fct=flip and -1 or 1 if not train then return "" end - local max=train.max_speed or 10 - local vel=advtrains.abs_ceil(train.velocity) + local max = train.max_speed or 10 + local res = train.speed_restriction or max + local vel = advtrains.abs_ceil(train.velocity) local vel_kmh=advtrains.abs_ceil(advtrains.ms_to_kmh(train.velocity)) local levers = "B - o +" @@ -184,7 +185,7 @@ function advtrains.hud_train_format(train, flip) if train.atc_brake_target then b="-B-" end - secondLine="ATC"..b..": |"..string.rep("+", tvel)..string.rep("_", max-tvel).."> "..tvel_kmh.." km/h" + secondLine="ATC"..b..": |"..string.rep("+", tvel)..string.rep("_", max-tvel).." > "..tvel_kmh.." km/h" elseif train.atc_delay then secondLine = "ATC waiting "..advtrains.abs_ceil(train.atc_delay).."s" else @@ -195,7 +196,7 @@ function advtrains.hud_train_format(train, flip) end topLine=" ["..mletter[fct].."] {"..levers.."} "..doorstr[(train.door_open or 0) * fct] - firstLine=attrans("Speed:").." |"..string.rep("+", vel)..string.rep("_", max-vel).."> "..vel_kmh.." km/h" + firstLine=attrans("Speed:").." |"..string.rep("+", vel)..string.rep("_", res-vel).."|"..string.rep("_", max-res).."> "..vel_kmh.." km/h" return (train.debug or "").."\n"..topLine.."\n"..firstLine.."\n"..secondLine end diff --git a/advtrains/trainlogic.lua b/advtrains/trainlogic.lua index 7147787..f94bda0 100644 --- a/advtrains/trainlogic.lua +++ b/advtrains/trainlogic.lua @@ -1027,6 +1027,9 @@ function advtrains.invert_train(train_id) table.insert(train.trainparts, 1, v)--notice insertion at first place end advtrains.update_trainpart_properties(train_id, true) + + -- TODO: this should actually be SHUNT_MAX_SPEED, but signals and lzb is not present everywhere + advtrains.speed_restriction = nil end -- returns: train id, index of one of the trains that stand at this position. diff --git a/advtrains/wagons.lua b/advtrains/wagons.lua index 9cf6cc4..c69b5e6 100644 --- a/advtrains/wagons.lua +++ b/advtrains/wagons.lua @@ -840,7 +840,23 @@ function wagon:show_bordcom(pname) else
form=form.."label[0.5,4.5;Train overview / coupling control is only shown when the train stands.]"
end
- form = form .. "button[0.5,8;3,1;Save;save]"
+ form = form .. "button[0.5,8;3,1;save;Save]"
+
+ -- Interlocking functionality: If the interlocking module is loaded, you can set the signal aspect
+ -- from inside the train
+ if advtrains.interlocking and train.lzb and #train.lzb.oncoming > 0 then
+ local i=1
+ while train.lzb.oncoming[i] do
+ local oci = train.lzb.oncoming[i]
+ if oci.pos then
+ if advtrains.interlocking.db.get_sigd_for_signal(oci.pos) then
+ form = form .. "button[4.5,8;5,1;ilrs;Remote Routesetting]"
+ break
+ end
+ end
+ i=i+1
+ end
+ end
minetest.show_formspec(pname, "advtrains_bordcom_"..self.id, form)
end
@@ -924,6 +940,23 @@ function wagon:handle_bordcom_fields(pname, formname, fields) train.couple_lck_back=false
end
+ -- Interlocking functionality: If the interlocking module is loaded, you can set the signal aspect
+ -- from inside the train
+ if fields.ilrs and advtrains.interlocking and train.lzb and #train.lzb.oncoming > 0 then
+ local i=1
+ while train.lzb.oncoming[i] do
+ local oci = train.lzb.oncoming[i]
+ if oci.pos then
+ local sigd = advtrains.interlocking.db.get_sigd_for_signal(oci.pos)
+ if sigd then
+ advtrains.interlocking.show_signalling_form(sigd, pname)
+ return
+ end
+ end
+ i=i+1
+ end
+ end
+
if not fields.quit then
self:show_bordcom(pname)
diff --git a/advtrains_interlocking/lzb.lua b/advtrains_interlocking/lzb.lua index 8781d40..db745ef 100644 --- a/advtrains_interlocking/lzb.lua +++ b/advtrains_interlocking/lzb.lua @@ -138,7 +138,7 @@ local function apply_control(id, train) local lzb = train.lzb local i = 1 - while i<#lzb.oncoming do + while i<=#lzb.oncoming do if lzb.oncoming[i].idx < train.index then train.speed_restriction = lzb.oncoming[i].spd table.remove(lzb.oncoming, i) |