diff options
author | 1F616EMO <root@1f616emo.xyz> | 2024-09-30 19:37:18 +0800 |
---|---|---|
committer | orwell <orwell@bleipb.de> | 2024-11-09 22:18:14 +0100 |
commit | d83d06ecdd8a23e5c36826f150c72d0ff8b644f9 (patch) | |
tree | ab86d9ba64ee5f0419bb2a17e2caa03304fded63 /advtrains_interlocking/route_prog.lua | |
parent | 8b9eb2a96d9c1c425ff9014fdf27c82526d8376b (diff) | |
download | advtrains-d83d06ecdd8a23e5c36826f150c72d0ff8b644f9.tar.gz advtrains-d83d06ecdd8a23e5c36826f150c72d0ff8b644f9.tar.bz2 advtrains-d83d06ecdd8a23e5c36826f150c72d0ff8b644f9.zip |
Add "New From Route" function into route editing form
This patch allows creating new routes based on what was done on another route. This can be useful to fix minor mistakes on a route, or to create similar routes. Note that the route buffer created "steps back" one section, but with turnouts kept.
The new button is placed above the "Save ARS" button - I know it is ugly, so please suggest a better place for it.
Diffstat (limited to 'advtrains_interlocking/route_prog.lua')
-rw-r--r-- | advtrains_interlocking/route_prog.lua | 27 |
1 files changed, 20 insertions, 7 deletions
diff --git a/advtrains_interlocking/route_prog.lua b/advtrains_interlocking/route_prog.lua index 6abe431..e8f5e8e 100644 --- a/advtrains_interlocking/route_prog.lua +++ b/advtrains_interlocking/route_prog.lua @@ -214,19 +214,32 @@ end local player_rte_prog = {} -function advtrains.interlocking.init_route_prog(pname, sigd) +function advtrains.interlocking.init_route_prog(pname, sigd, default_route) if not minetest.check_player_privs(pname, "interlocking") then minetest.chat_send_player(pname, "Insufficient privileges to use this!") return end - player_rte_prog[pname] = { + local rp = { origin = sigd, - route = { - name = "PROG["..pname.."]", - }, - tmp_lcks = {}, } - advtrains.interlocking.visualize_route(sigd, player_rte_prog[pname].route, "prog_"..pname, player_rte_prog[pname].tmp_lcks, pname) + if default_route then + rp.route = table.copy(default_route) + + -- "Step back one section", but keeping turnouts + local last_route = rp.route[#rp.route] + if last_route then + rp.tmp_lcks = last_route.locks + rp.route[#rp.route] = nil + end + rp.route.name = "PROG["..pname.."]" + else + rp.route = { + name = "PROG["..pname.."]" + } + rp.tmp_lcks = {} + end + player_rte_prog[pname] = rp + advtrains.interlocking.visualize_route(sigd, rp.route, "prog_"..pname, rp.tmp_lcks, pname) minetest.chat_send_player(pname, "Route programming mode active. Punch TCBs to add route segments, punch turnouts to lock them.") end |