aboutsummaryrefslogtreecommitdiff
path: root/advtrains_interlocking/database.lua
Commit message (Expand)AuthorAge
* Fix things, rework signal aspect select dialog, transform old aspects on-the-flyorwell962021-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
* Do not throw error when sync_tcb_neighbors failsorwell962019-08-29
* Fix moving Signal IPs (no duplicate IPs)orwell962019-02-21
* Fixes regarding signal assignments/tcbsorwell962019-02-09
* Point speed restriction railsorwell962019-01-24
* Fix may_modify_section on newly created sectionsorwell962019-01-22
* Prohibit removing/changing of TCBs and sections while routes or signals are setorwell962019-01-22
* Do not print "couldn't determine section" warning when all traverser ends wer...orwell962018-10-29
* Miscellaneous routesetting fixesorwell962018-10-29
* Properly implement invalidate_all_paths, recheck lzb on aspect changeorwell962018-10-10
* Add signal safety control override, restructure control systemorwell962018-10-10
* Make signal influence point (~halt point) specifiableorwell962018-10-09
* Improve route programming:orwell962018-10-07
* Move passive API to the advtrains coreorwell962018-08-16
* Automatic working (re-set certain route on train pass)orwell962018-08-12
* Implement routesettingorwell962018-07-21
* Basic route management from signalling formspecorwell962018-07-04
* Signal assignment and route programming procedureorwell962018-07-04
* Implement trains blocking sectionsorwell962018-06-29
* get_ts_at_pos(), file for train-related stufforwell962018-06-29
* Complete Track Section handling, incl. removing tcb's and marker entitiesorwell962018-06-26
* Add track section concept and rework TCB design, implement new linking behaviororwell962018-06-21
* Add Track Circuit Breaks (TCBs), Database and Track Circuit Setuporwell962018-06-20
* Interlocking: Create demo signals, signal API and model for TCB configurer nodeorwell962018-06-19
* Draft of interlocking systemorwell962018-06-14
a">then meta:set_string("infotext", "Error") end meta:set_string("infotext", "Stn. "..stdata.stn.." T. "..stdata.track) end local door_dropdown = {L=1, R=2, C=3} local door_dropdown_rev = {Right="R", Left="L", Closed="C"} 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!") return end local stdata = advtrains.lines.stops[pe] if not stdata then advtrains.lines.stops[pe] = { stn="", track="", doors="R", wait=10, ars={default=true}, ddelay=1,speed="M" } stdata = advtrains.lines.stops[pe] end local stn = advtrains.lines.stations[stdata.stn] local stnname = stn and stn.name or "" if not stdata.ddelay then stdata.ddelay = 1 end if not stdata.speed then 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;"..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").."]" minetest.show_formspec(pname, "at_lines_stop_"..pe, form) end local tmp_checkboxes = {} minetest.register_on_player_receive_fields(function(player, formname, fields) local pname = player:get_player_name() local pe = string.match(formname, "^at_lines_stop_(............)$") local pos = advtrains.decode_pos(pe) if pos then if minetest.is_protected(pos, pname) then minetest.chat_send_player(pname, "Position is protected!") return end local stdata = advtrains.lines.stops[pe] if not tmp_checkboxes[pe] then tmp_checkboxes[pe] = {} end if fields.kick then -- handle checkboxes due to MT's weird handling tmp_checkboxes[pe].kick = (fields.kick == "true") end if fields.reverse then tmp_checkboxes[pe].reverse = (fields.reverse == "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] if stn then 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) show_stoprailform(pos,player) return end else advtrains.lines.stations[fields.stn] = {name = fields.stnname, owner = pname} stdata.stn = fields.stn end end local stn = advtrains.lines.stations[stdata.stn] if stn 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) end end -- dropdowns if fields.doors then stdata.doors = door_dropdown_rev[fields.doors] or "C" end if fields.track then stdata.track = fields.track end if fields.wait then stdata.wait = to_int(fields.wait) or 10 end if fields.ars then stdata.ars = advtrains.interlocking.text_to_ars(fields.ars) end if fields.ddelay then stdata.ddelay = to_int(fields.ddelay) or 1 end if fields.speed then stdata.speed = to_int(fields.speed) or "M" end for k,v in pairs(tmp_checkboxes[pe]) do --handle checkboxes stdata[k] = v or nil end tmp_checkboxes[pe] = nil --TODO: signal updatemeta(pos) show_stoprailform(pos, player) end end end) local adefunc = function(def, preset, suffix, rotation) return { after_place_node=function(pos) local pe = advtrains.encode_pos(pos) advtrains.lines.stops[pe] = { stn="", track="", doors="R", wait=10 } updatemeta(pos) end, after_dig_node=function(pos) local pe = advtrains.encode_pos(pos) advtrains.lines.stops[pe] = nil end, on_rightclick = function(pos, node, player) show_stoprailform(pos, player) end, advtrains = {