aboutsummaryrefslogtreecommitdiff
path: root/advtrains_interlocking
Commit message (Expand)AuthorAge
* Support different types of speed restrictions; add documentationywang2021-11-07
* make distant signal aspect dropdown labels consistent with the ones for the m...ywang2021-11-05
* Re-add Zs 3(v) indicators; swap green and yellow lights for realismywang2021-11-05
* Route Formspec: When cancelling route, disable ARS only temporarily, not perm...orwell962021-10-26
* Remove sounds = default.sound_stone_defaults() as default is no longer a depe...orwell962021-04-04
* Rework route ui formspec layouthlqkj2021-03-22
* Replace deprecated depends.txt's by mod.conf and organize dependencies consis...orwell962021-03-13
* Signal influence points: Make sure to clear on removal of signal, clear orpha...orwell962021-03-12
* Added alternative recipes, falling back on the default: items as they seem to...Maverick27972021-03-06
* Fix protection of TSR railorwell962021-02-19
* Add some missing craft recipesorwell962021-02-19
* fix legacy signal aspect converterorwell962021-02-10
* Remove debug facilitiesorwell962021-02-10
* Add debug prints, modify LZB to fix problems with look_aheadorwell962021-02-10
* Add sign to make shunt moves proceed as main and improve doc of signalsorwell962021-02-10
* Fix new green signals bug caused by old trav_lzbdata, and callback loop in si...orwell962021-02-10
* Start using path_invalidate_ahead()orwell962021-02-10
* Fix things, rework signal aspect select dialog, transform old aspects on-the-flyorwell962021-02-10
* Simplify Signal Aspect Table (H#132) [breaks compatibility with signal API]orwell962021-02-10
* Fix lots of things around new LZBorwell962021-02-10
* Implement a LZB speed lookup table for the path and rewrite velocity controlsorwell962021-02-10
* Disable ARS train flag and surrounding usesorwell962021-02-10
* Fix removing stale TCB nodesrelease-2.2.0orwell962021-01-12
* Forbid track modification when train, IP or TCB is on it, better handle remov...orwell962020-10-07
* tcb: Fix crash when player is nilLinus Jahn2020-09-01
* DISCARD ON MERGE!: Temporary compatibility fix: translate signal aspects back...orwell962020-07-23
* Make using the default tracks optional, even in submodsBlockhead2020-07-10
* Add "Fallback state" for freed routes, move p_mesecon_iface.lua to coreorwell962020-07-07
* Fix minetest.after() loop between ARS->update_route->update_signal_aspect->in...orwell962020-06-05
* Apply minetest.formspec_escape() to prevent formspec injection (H#143)MT0.4Blockhead2020-01-04
* Add inverse ARS rulesGabriel Pérez-Cerezo2019-12-05
* Fix the "red signals" bug that appeared when clicking a green signalorwell962019-11-21
* Do not throw error when sync_tcb_neighbors failsorwell962019-08-29
* Don't allow to remove TCB when a signal is assignedorwell962019-08-26
* Various small fixesGabriel Pérez-Cerezo2019-07-16
* Fix remote routesettingorwell962019-04-16
* Move LZB system to core and unify approach callback mechanismorwell962019-04-16
* Disable-ARS switch in signal and set this when cancelling an ARS routeorwell962019-03-15
* Ugly workaround for green signals bugorwell962019-03-15
* Fix cancelling "Unknown Route" when section is deleted.orwell962019-03-15
* Do not clear LZB control when invalidating.orwell962019-02-23
* possible fix for "trains standing at green signals"orwell962019-02-21
* Fix moving Signal IPs (no duplicate IPs)orwell962019-02-21
* Add ARS rules for stop railsorwell962019-02-19
* Prioritize LZB callback (possible bugfix for H#100)orwell962019-02-19
* Improve Signal IP form/workfloworwell962019-02-16
* Fix TCBS crash also for route_uiorwell962019-02-16
* Fix routesetting when TCBS is missing (H#109)orwell962019-02-12
* Fixes regarding signal assignments/tcbsorwell962019-02-09
* Signalling form auto-updateorwell962019-02-05
then if train.door_open ~= 0 then train.door_open = 0 else train.door_open = -1 end end if pc.right then if train.door_open ~= 0 then train.door_open = 0 else train.door_open = 1 end end if not act then train.ctrl_user = nil end end end function advtrains.update_driver_hud(pname, train, flip) local inside=train.text_inside or "" local ft, ht = advtrains.hud_train_format(train, flip) advtrains.set_trainhud(pname, inside.."\n"..ft, ht) end function advtrains.clear_driver_hud(pname) advtrains.set_trainhud(pname, "") end function advtrains.set_trainhud(name, text, driver) local hud = advtrains.hud[name] local player=minetest.get_player_by_name(name) if not player then return end local driverhud = { hud_elem_type = "image", name = "ADVTRAINS_DRIVER", position = {x=0.5, y=1}, offset = {x=0,y=-170}, text = driver or "", alignment = {x=0,y=-1}, scale = {x=1,y=1},} if not hud then hud = {["driver"]={}} advtrains.hud[name] = hud hud.id = player:hud_add({ hud_elem_type = "text", name = "ADVTRAINS", number = 0xFFFFFF, position = {x=0.5, y=1}, offset = {x=0, y=-300}, text = text, scale = {x=200, y=60}, alignment = {x=0, y=-1}, }) hud.oldText=text hud.driver = player:hud_add(driverhud) else if hud.oldText ~= text then player:hud_change(hud.id, "text", text) hud.oldText=text end if hud.driver then player:hud_change(hud.driver, "text", driver or "") elseif driver then hud.driver = player:hud_add(driverhud) end end end function advtrains.set_help_hud(name, text) local hud = advtrains.hhud[name] local player=minetest.get_player_by_name(name) if not player then return end if not hud then hud = {} advtrains.hhud[name] = hud hud.id = player:hud_add({ hud_elem_type = "text", name = "ADVTRAINS_HELP", number = 0xFFFFFF, position = {x=1, y=0.3}, offset = {x=0, y=0}, text = text, scale = {x=200, y=60}, alignment = {x=1, y=0}, }) hud.oldText=text return elseif hud.oldText ~= text then player:hud_change(hud.id, "text", text) hud.oldText=text end end --train.lever: --Speed control lever in train, for new train control system. --[[ Value Disp Control Meaning 0 BB S+Space Emergency Brake 1 B Space Normal Brake 2 - S Roll 3 o <none> Stay at speed 4 + W Accelerate ]] function advtrains.hud_train_format(train, flip) if not train then return "","" end local sformat = string.format -- this appears to be faster than (...):format local max = train.max_speed or 10 local res = train.speed_restriction local vel = advtrains.abs_ceil(train.velocity) local vel_kmh=advtrains.abs_ceil(advtrains.ms_to_kmh(train.velocity)) local tlev=train.lever or 3 if train.velocity==0 and not train.active_control then tlev=1 end if train.hud_lzb_effect_tmr then tlev=1 end local hud = T.combine(440, 110, "black") local st = {} if train.debug then st = {train.debug} end -- lever hud:add_multicolor_fill_topdown(275, 10, 5, 90, 1, "cyan", 1, "white", 2, "orange", 1, "red") hud:add_lever_topdown(280, 10, 30, 90, 18, 6, (4-tlev)/4, "gray", "darkslategray") -- reverser hud:add(245, 10, T"advtrains_hud_arrow.png":transform"FY":multiply(flip and "gray" or "cyan")) hud:add(245, 85, T"advtrains_hud_arrow.png":multiply(flip and "orange" or "gray")) hud:add_lever_topdown(240, 30, 25, 50, 15, 5, flip and 1 or 0, "gray", "darkslategray") -- train control/safety indication hud:add(10, 10, T"advtrains_hud_atc.png":resize(30, 30):multiply((train.tarvelocity or train.atc_command) and "cyan" or "darkslategray")) hud:add(50, 10, T"advtrains_hud_lzb.png":resize(30, 30):multiply(train.hud_lzb_effect_tmr and "red" or "darkslategray")) hud:add(90, 10, T"advtrains_hud_shunt.png":resize(30, 30):multiply(train.is_shunt and "orange" or "darkslategray")) -- door hud:add_fill(187, 10, 26, 30, "white"):add_fill(189, 12, 22, 11, "black") hud:add_fill(170, 10, 15, 30, train.door_open==-1 and "white" or "darkslategray"):add_fill(172, 12, 11, 11, "black") hud:add_fill(215, 10, 15, 30, train.door_open==1 and "white" or "darkslategray"):add_fill(217, 12, 11, 11, "black") -- speed indication(s) hud:add_n7seg(320, 10, 110, 90, vel, 2, "red") hud:add_segmentbar_leftright(10, 65, 217, 20, 3, 20, max, 20, "darkslategray", 0, vel, "white") if res and res > 0 then hud:add_fill(7+res*11, 60, 3, 30, "red") end if train.tarvelocity then hud:add(1+train.tarvelocity*11, 85, T"advtrains_hud_arrow.png":transform"FY":multiply"cyan") end local lzbdisp local lzb = train.lzb if lzb and lzb.checkpoints then local oc = lzb.checkpoints for i = 1, #oc do if advtrains.interlocking then local udata = oc[i].udata if udata and udata.signal_pos then local sigd = advtrains.interlocking.db.get_sigd_for_signal(udata.signal_pos) if sigd then local tcbs = advtrains.interlocking.db.get_tcbs(sigd) or {} if tcbs.route_rsn then table.insert(st, ("%s: %s"):format(minetest.pos_to_string(sigd.p), tcbs.route_rsn)) end end end end local spd = oc[i].speed spd = advtrains.speed.min(spd, train.speed_restriction) if spd == -1 then spd = nil end local c = not spd and "lime" or (type(spd) == "number" and (spd == 0) and "red" or "orange") or nil if c then if spd and spd~=0 then hud:add(1+spd*11, 50, T"advtrains_hud_arrow.png":multiply"red") end local dist = math.floor(((oc[i].index or train.index)-train.index)) dist = math.max(0, math.min(999, dist)) lzbdisp = {c = c, d = dist} break end end end if not lzbdisp then lzbdisp = {c = "darkslategray", d = 888} end hud:add_fill(130, 10, 30, 5, lzbdisp.c) hud:add_fill(130, 35, 30, 5, lzbdisp.c) hud:add_n7seg(131, 18, 28, 14, lzbdisp.d, 3, lzbdisp.c) if res and res == 0 then table.insert(st, attrans("OVERRUN RED SIGNAL! Examine situation and reverse train to move again.")) end if train.atc_command then table.insert(st, ("ATC: %s%s"):format(train.atc_delay and advtrains.abs_ceil(train.atc_delay).."s " or "", train.atc_command or "")) end return table.concat(st,"\n"), tostring(hud) end local _, texture = advtrains.hud_train_format { -- dummy train object to demonstrate the train hud max_speed = 15, speed_restriction = 15, velocity = 15, tarvelocity = 12, active_control = true, lever = 3, ctrl = {lzb = true}, is_shunt = true, door_open = 1, lzb = {checkpoints = {{speed=6, index=125.7}}}, index = 100, } minetest.register_node("advtrains:hud_demo",{ description = "Train HUD demonstration", tiles = {texture}, groups = {cracky = 3, not_in_creative_inventory = 1} }) minetest.register_craft { output = "advtrains:hud_demo", recipe = { {"default:paper", "default:paper", "default:paper"}, {"default:paper", "advtrains:trackworker", "default:paper"}, {"default:paper", "default:paper", "default:paper"}, } }