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)