aboutsummaryrefslogtreecommitdiff
path: root/advtrains_interlocking/route_prog.lua
diff options
context:
space:
mode:
author1F616EMO <root@1f616emo.xyz>2024-09-30 19:37:18 +0800
committerorwell <orwell@bleipb.de>2024-11-09 22:18:14 +0100
commitd83d06ecdd8a23e5c36826f150c72d0ff8b644f9 (patch)
treeab86d9ba64ee5f0419bb2a17e2caa03304fded63 /advtrains_interlocking/route_prog.lua
parent8b9eb2a96d9c1c425ff9014fdf27c82526d8376b (diff)
downloadadvtrains-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.lua27
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