~gpcf/advtrains-devel

Add "New From Route" function into route editing form v1 PROPOSED

1F616EMO: 1
 Add "New From Route" function into route editing form

 2 files changed, 32 insertions(+), 10 deletions(-)
Export patchset (mbox)
How do I use this?

Copy & paste the following snippet into your terminal to import this patchset into git:

curl -s https://lists.sr.ht/~gpcf/advtrains-devel/patches/55253/mbox | git am -3
Learn more about email & git

[PATCH v1] Add "New From Route" function into route editing form Export this patch

From: 1F616EMO <root@1f616emo.xyz>

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.
---
 advtrains_interlocking/route_prog.lua | 27 ++++++++++++++++++++-------
 advtrains_interlocking/route_ui.lua   | 15 ++++++++++++---
 2 files changed, 32 insertions(+), 10 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

diff --git a/advtrains_interlocking/route_ui.lua b/advtrains_interlocking/route_ui.lua
index 1999941..a8fee83 100644
--- a/advtrains_interlocking/route_ui.lua
+++ b/advtrains_interlocking/route_ui.lua
@@ -24,7 +24,7 @@ function atil.show_route_edit_form(pname, sigd, routeid)
	local route = tcbs.routes[routeid]
	if not route then return end
	
	local form = "size[9,10]label[0.5,0.2;Route overview]"
	local form = "size[9,11]label[0.5,0.2;Route overview]"
	form = form.."field[0.8,1.2;6.5,1;name;Route name;"..minetest.formspec_escape(route.name).."]"
	form = form.."button[7.0,0.9;1.5,1;setname;Set]"
	
@@ -85,11 +85,13 @@ function atil.show_route_edit_form(pname, sigd, routeid)
	form = form.."button[0.5,6;3,1;back;<<< Back to signal]"
	form = form.."button[4.5,6;2,1;aspect;Signal Aspect]"
	form = form.."button[6.5,6;2,1;delete;Delete Route]"

	form = form.."button[5.5,7;3,1;newfrom;New From Route]"
	
	--atdebug(route.ars)
	form = form.."style[ars;font=mono]"
	form = form.."textarea[0.8,7.3;5,3;ars;ARS Rule List;"..atil.ars_to_text(route.ars).."]"
	form = form.."button[5.5,7.23;3,1;savears;Save ARS List]"
	form = form.."textarea[0.8,8.3;5,3;ars;ARS Rule List;"..atil.ars_to_text(route.ars).."]"
	form = form.."button[5.5,8.23;3,1;savears;Save ARS List]"
	
	minetest.show_formspec(pname, "at_il_routeedit_"..minetest.pos_to_string(sigd.p).."_"..sigd.s.."_"..routeid, form)

@@ -139,6 +141,13 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
			table.remove(tcbs.routes, routeid)
			advtrains.interlocking.show_signalling_form(sigd, pname)
		end

		if fields.newfrom then
			advtrains.interlocking.init_route_prog(pname, sigd, route)
			minetest.close_formspec(pname, formname)
			tcbs.ars_ignore_next = nil
			return
		end
		
		if fields.ars and fields.savears then
			route.ars = atil.text_to_ars(fields.ars)
-- 
2.46.0