~gpcf/advtrains-devel

This thread contains a patchset. You're looking at the original emails, but you may wish to use the patch review UI. Review patch
1

[PATCH v4] De-hardcode the speed limit of 20 m/s

Details
Message ID
<20241006091344.440680-1-yiufamily.hh@gmail.com>
DKIM signature
pass
Download raw message
Patch: +88 -23
From: 1F616EMO <root@1f616emo.xyz>

This patch de-hardcodes that speed limit. To adapt the changes,
the following changes are made:

1. Added a setting key: advtrains_max_speed, acceppting integers from 1 to 99.
   Any values beyond the limit wil be capped. This setting is marked experimental
2. Added signal signs from 24 to 40 m/s.
3. Added max_speed = 20 m/s to the wagon metatable, so wagons not specifying a
   maximum speed continues to use 20 m/s.
4. Adjusted the train HUD so trains with maximum speed more than 20 m/s
   uses each segment to represent max / 20 m/s.
5. Adjusted speed target / limit / LZB indicators so they work well on the new
   segment bar
6. (Not so related) Out-of-bound LZB limitations are marked with a
   red arrow pointing right at where 20 m/s were.
---
 advtrains/init.lua                            |   7 +++
 advtrains/settingtypes.txt                    |   4 ++
 advtrains/trainhud.lua                        |  44 +++++++++++++--
 advtrains/trainlogic.lua                      |   2 +-
 advtrains/wagons.lua                          |   1 +
 advtrains_signals_ks/init.lua                 |  53 ++++++++++++------
 .../textures/advtrains_signals_ks_sign_24.png | Bin 0 -> 114 bytes
 .../textures/advtrains_signals_ks_sign_28.png | Bin 0 -> 112 bytes
 .../textures/advtrains_signals_ks_sign_30.png | Bin 0 -> 97 bytes
 .../textures/advtrains_signals_ks_sign_32.png | Bin 0 -> 114 bytes
 .../textures/advtrains_signals_ks_sign_36.png | Bin 0 -> 103 bytes
 .../textures/advtrains_signals_ks_sign_40.png | Bin 0 -> 103 bytes
 12 files changed, 88 insertions(+), 23 deletions(-)
 create mode 100644 advtrains_signals_ks/textures/advtrains_signals_ks_sign_24.png
 create mode 100644 advtrains_signals_ks/textures/advtrains_signals_ks_sign_28.png
 create mode 100644 advtrains_signals_ks/textures/advtrains_signals_ks_sign_30.png
 create mode 100644 advtrains_signals_ks/textures/advtrains_signals_ks_sign_32.png
 create mode 100644 advtrains_signals_ks/textures/advtrains_signals_ks_sign_36.png
 create mode 100644 advtrains_signals_ks/textures/advtrains_signals_ks_sign_40.png

diff --git a/advtrains/init.lua b/advtrains/init.lua
index 06e456f..ba62c4a 100644
--- a/advtrains/init.lua
+++ b/advtrains/init.lua
@@ -66,6 +66,13 @@ if not advtrains.wagon_load_range then
	advtrains.wagon_load_range = tonumber(minetest.settings:get("active_block_range"))*16
end

-- Maximum speed of trains
-- The real maximum speed is the minimum value of all wagon's max speed and this value
-- Default: 20; Min: 1; Max: 99
-- Max. 99 because of the train HUD 7-seg display
advtrains.TRAIN_MAX_SPEED = tonumber(minetest.settings:get("advtrains_max_speed")) or 20
advtrains.TRAIN_MAX_SPEED = math.max(math.min(advtrains.TRAIN_MAX_SPEED, 99), 1)

--pcall
local no_action=false

diff --git a/advtrains/settingtypes.txt b/advtrains/settingtypes.txt
index 2b627cb..3f02058 100644
--- a/advtrains/settingtypes.txt
+++ b/advtrains/settingtypes.txt
@@ -61,3 +61,7 @@ advtrains_save_interval (Save Interval) int 60 20 3600
#    If enabled, trains only collide with nodes with "normal" drawtype.
advtrains_forgiving_collision (Forgiving Collision mode) bool false

#    Maximum speed of all trains
#    The real maximum speed is the minimum value of all wagon's max speed and this value
#    This is experimental. USE THIS AT YOUR OWN RISK!
advtrains_max_speed (Maximum Train Speed) int 20 1 99
diff --git a/advtrains/trainhud.lua b/advtrains/trainhud.lua
index f9f4876..731ad6d 100644
--- a/advtrains/trainhud.lua
+++ b/advtrains/trainhud.lua
@@ -220,12 +220,34 @@ function advtrains.hud_train_format(train, flip)
	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")
	do
		local segbar_pos
		if max > 20 then
			segbar_pos = math.floor(vel * 20 / max)
		else
			segbar_pos = vel
		end
		hud:add_segmentbar_leftright(10, 65, 217, 20, 3, 20, math.min(max, 20), 20, "darkslategray", 0, segbar_pos, "white")
	end
	if res and res > 0 and res <= max then
		local indi_pos
		if max > 20 then
			indi_pos = 7 + math.floor(res * 220 / max)
		else
			indi_pos = 7 + res * 11
		end
		hud:add_fill(indi_pos, 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")
		do
			local arrow_pos
			if max > 20 then
				arrow_pos = 1 + train.tarvelocity * 220 / max
			else
				arrow_pos = 1 + train.tarvelocity * 11
			end
			hud:add(arrow_pos, 85, T"advtrains_hud_arrow.png":transform"FY":multiply"cyan")
		end
	end
	local lzbdisp
	local lzb = train.lzb
@@ -250,7 +272,19 @@ function advtrains.hud_train_format(train, flip)
			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")
					do
						local texture = T"advtrains_hud_arrow.png":multiply"red"
						local arrow_pos
						if spd > math.max(max, 20) then
							texture = texture:transform"R90"
							arrow_pos = 221 -- 20
						elseif max > 20 then
							arrow_pos = 1 + math.floor(spd * 220 / max)
						else
							arrow_pos = 1 + spd * 11
						end
						hud:add(arrow_pos, 50, texture)
					end
				end
				local dist = math.floor(((oc[i].index or train.index)-train.index))
				dist = math.max(0, math.min(999, dist))
diff --git a/advtrains/trainlogic.lua b/advtrains/trainlogic.lua
index f136577..0a3c6fe 100644
--- a/advtrains/trainlogic.lua
+++ b/advtrains/trainlogic.lua
@@ -1039,7 +1039,7 @@ function advtrains.update_trainpart_properties(train_id, invert_flipstate)
	local train=advtrains.trains[train_id]
	train.drives_on=advtrains.merge_tables(advtrains.all_tracktypes)
	--FIX: deep-copy the table!!!
	train.max_speed=20
	train.max_speed=advtrains.TRAIN_MAX_SPEED
	train.extent_h = 0;
	
	local rel_pos=0
diff --git a/advtrains/wagons.lua b/advtrains/wagons.lua
index 536c8d4..156db06 100644
--- a/advtrains/wagons.lua
+++ b/advtrains/wagons.lua
@@ -68,6 +68,7 @@ local wagon={
	wagon_width=3, -- Wagon width in meters
	has_inventory=false,
	static_save=false,
	max_speed = 20, -- Default value
}


diff --git a/advtrains_signals_ks/init.lua b/advtrains_signals_ks/init.lua
index 258b868..3b43955 100755
--- a/advtrains_signals_ks/init.lua
+++ b/advtrains_signals_ks/init.lua
@@ -306,11 +306,17 @@ for _, rtab in ipairs({
	
	for typ, prts in pairs {
		-- Speed restrictions:
		["4"] = {asp = { main = 4, shunt = true }, n = "6"},
		["6"] = {asp = { main = 6, shunt = true }, n = "8"},
		["8"] = {asp = { main = 8, shunt = true }, n = "12"},
		["12"] = {asp = { main = 12, shunt = true }, n = "16"},
		["16"] = {asp = { main = 16, shunt = true }, n = "e"},
		["4"]  = {asp = { main =  4, shunt = true }, n = advtrains.TRAIN_MAX_SPEED >= 6 and "6" or "e"},
		["6"]  = {asp = { main =  6, shunt = true }, n = advtrains.TRAIN_MAX_SPEED >= 8 and "8" or "e"},
		["8"]  = {asp = { main =  8, shunt = true }, n = advtrains.TRAIN_MAX_SPEED >= 12 and "12" or "e"},
		["12"] = {asp = { main = 12, shunt = true }, n = advtrains.TRAIN_MAX_SPEED >= 16 and "16" or "e"},
		["16"] = {asp = { main = 16, shunt = true }, n = advtrains.TRAIN_MAX_SPEED >= 20 and "20" or "e"},
		["20"] = {asp = { main = 20, shunt = true }, n = advtrains.TRAIN_MAX_SPEED >= 24 and "24" or "e"},
		["24"] = {asp = { main = 24, shunt = true }, n = advtrains.TRAIN_MAX_SPEED >= 28 and "28" or "e"},
		["28"] = {asp = { main = 28, shunt = true }, n = advtrains.TRAIN_MAX_SPEED >= 30 and "30" or "e"},
		["30"] = {asp = { main = 30, shunt = true }, n = advtrains.TRAIN_MAX_SPEED >= 32 and "32" or "e"},
		["32"] = {asp = { main = 32, shunt = true }, n = advtrains.TRAIN_MAX_SPEED >= 40 and "40" or "e"},
		["36"] = {asp = { main = 36, shunt = true }, n = advtrains.TRAIN_MAX_SPEED >= 40 and "40" or "e"},
		-- Speed restriction lifted
		["e"] = {asp = { main = -1, shunt = true }, n = "4", mesh = "_zs10"},
	} do
@@ -323,12 +329,19 @@ for _, rtab in ipairs({
	end

	for typ, prts in pairs {
		["4"]   = {main =  4, n = "6"},
		["6"]   = {main =  6, n = "8"},
		["8"]   = {main =  8, n = "12"},
		["12"]  = {main = 12, n = "16"},
		["16"]  = {main = 16, n = "e"},
		["e"] = {main = -1, n = "4"},
		["4"]  = {main =  4, n = advtrains.TRAIN_MAX_SPEED >= 6 and "6" or "e"},
		["6"]  = {main =  6, n = advtrains.TRAIN_MAX_SPEED >= 8 and "8" or "e"},
		["8"]  = {main =  8, n = advtrains.TRAIN_MAX_SPEED >= 12 and "12" or "e"},
		["12"] = {main = 12, n = advtrains.TRAIN_MAX_SPEED >= 16 and "16" or "e"},
		["16"] = {main = 16, n = advtrains.TRAIN_MAX_SPEED >= 20 and "20" or "e"},
		["20"] = {main = 20, n = advtrains.TRAIN_MAX_SPEED >= 24 and "24" or "e"},
		["24"] = {main = 24, n = advtrains.TRAIN_MAX_SPEED >= 28 and "28" or "e"},
		["28"] = {main = 28, n = advtrains.TRAIN_MAX_SPEED >= 30 and "30" or "e"},
		["30"] = {main = 30, n = advtrains.TRAIN_MAX_SPEED >= 32 and "32" or "e"},
		["32"] = {main = 32, n = advtrains.TRAIN_MAX_SPEED >= 40 and "40" or "e"},
		["36"] = {main = 36, n = advtrains.TRAIN_MAX_SPEED >= 40 and "40" or "e"},
		["40"] = {main = 40, n = "e"},
		["e"]  = {main = -1, n = "4"},
	} do
		local tile2 = "advtrains_signals_ks_sign_lf7.png^(advtrains_signals_ks_sign_"..typ..".png^[makealpha:255,255,255)"..(typ == "e" and "" or "^[multiply:orange")
		local inv = "advtrains_signals_ks_sign_lf7.png^(advtrains_signals_ks_sign_8.png^[makealpha:255,255,255)^[multiply:orange"
@@ -336,12 +349,18 @@ for _, rtab in ipairs({
	end

	for typ, prts in pairs {
		["4"]   = {main =  4, n = "6"},
		["6"]   = {main =  6, n = "8"},
		["8"]   = {main =  8, n = "12"},
		["12"]  = {main = 12, n = "16"},
		["16"]  = {main = 16, n = "20"},
		["20"]  = {main = 20, n = "4"},
		["4"]  = {main =  4, n = advtrains.TRAIN_MAX_SPEED >= 6 and "6" or "4"},
		["6"]  = {main =  6, n = advtrains.TRAIN_MAX_SPEED >= 8 and "8" or "4"},
		["8"]  = {main =  8, n = advtrains.TRAIN_MAX_SPEED >= 12 and "12" or "4"},
		["12"] = {main = 12, n = advtrains.TRAIN_MAX_SPEED >= 16 and "16" or "4"},
		["16"] = {main = 16, n = advtrains.TRAIN_MAX_SPEED >= 20 and "20" or "4"},
		["20"] = {main = 20, n = advtrains.TRAIN_MAX_SPEED >= 24 and "24" or "4"},
		["24"] = {main = 24, n = advtrains.TRAIN_MAX_SPEED >= 28 and "28" or "4"},
		["28"] = {main = 28, n = advtrains.TRAIN_MAX_SPEED >= 30 and "30" or "4"},
		["30"] = {main = 30, n = advtrains.TRAIN_MAX_SPEED >= 32 and "32" or "4"},
		["32"] = {main = 32, n = advtrains.TRAIN_MAX_SPEED >= 40 and "40" or "4"},
		["36"] = {main = 36, n = advtrains.TRAIN_MAX_SPEED >= 40 and "40" or "4"},
		["40"] = {main = 40, n = "4"},
	} do
		local tile2 = "advtrains_signals_ks_sign_lf7.png^(advtrains_signals_ks_sign_"..typ..".png^[makealpha:255,255,255)"
		local inv = "advtrains_signals_ks_sign_lf7.png^(advtrains_signals_ks_sign_8.png^[makealpha:255,255,255)"
diff --git a/advtrains_signals_ks/textures/advtrains_signals_ks_sign_24.png b/advtrains_signals_ks/textures/advtrains_signals_ks_sign_24.png
new file mode 100644
index 0000000000000000000000000000000000000000..29d54aeaae76483467de6a2bf6444794b0abdeea
GIT binary patch
literal 114
zcmeAS@N?(olHy`uVBq!ia0vp^3Lwk~Bp9L@-6MgNrKgKyNCji^4}O*#osa7qkGz}j
zut?11&)+VuJ*~p!iAVAUKGy0_sJPFd@~)ZZ2EWp)k3u~TOw)}Sgaayy-mEA+0W!?f
L)z4*}Q$iB}0;we}

literal 0
HcmV?d00001

diff --git a/advtrains_signals_ks/textures/advtrains_signals_ks_sign_28.png b/advtrains_signals_ks/textures/advtrains_signals_ks_sign_28.png
new file mode 100644
index 0000000000000000000000000000000000000000..ee4719186c6fe580deecb64229121a0c3521d08e
GIT binary patch
literal 112
zcmeAS@N?(olHy`uVBq!ia0vp^3Lwk~Bp9L@-6MgNxu=U`NCji^4}O*#osat)kG$LM
zu&7La!jJCx3@d;0Uiv8OvWLC!eY489=8md4EFQAT0qlC|3=G;@rKOKm!ka)wdAj<!
JtaD0e0sx;hB7^_{

literal 0
HcmV?d00001

diff --git a/advtrains_signals_ks/textures/advtrains_signals_ks_sign_30.png b/advtrains_signals_ks/textures/advtrains_signals_ks_sign_30.png
new file mode 100644
index 0000000000000000000000000000000000000000..97413bdc17477666ff4c38c4850b48bcffb684be
GIT binary patch
literal 97
zcmeAS@N?(olHy`uVBq!ia0vp^3Lwk~Bp9L@-6MgNhNp{TNCji^4}O*#oZpT+Jo+B1
t@UdLp@sW8)Li^@_Le34n?GY`PB^mt0%41FQ^LjvfJzf1=);T3K0RU*I8~OkM

literal 0
HcmV?d00001

diff --git a/advtrains_signals_ks/textures/advtrains_signals_ks_sign_32.png b/advtrains_signals_ks/textures/advtrains_signals_ks_sign_32.png
new file mode 100644
index 0000000000000000000000000000000000000000..039acaafcbc542fa3c82fe0a171adbd12f0c6289
GIT binary patch
literal 114
zcmeAS@N?(olHy`uVBq!ia0vp^3Lwk~Bp9L@-6MgNrKgKyNCji^4}O*#oZlWhJo=ue
z@Nv7C%b%m}f7k@y>~~!AUSZ>Rg-3QBH~5ua6$<QkWU+o+Kj$0+!`#BMr*n)XLO_Oj
My85}Sb4q9e04)F}1^@s6

literal 0
HcmV?d00001

diff --git a/advtrains_signals_ks/textures/advtrains_signals_ks_sign_36.png b/advtrains_signals_ks/textures/advtrains_signals_ks_sign_36.png
new file mode 100644
index 0000000000000000000000000000000000000000..e57231dcec50ddfdd8f03034a0c0428c47c8e0d8
GIT binary patch
literal 103
zcmeAS@N?(olHy`uVBq!ia0vp^3Lwk~Bp9L@-6MgNo~MgrNCji^4}O*#oZlWhJo=ue
z@Nv7C%azB<b<G@Q<pQUr7Bw3%n#m;z`lT~4%;_zBdbBU}HOK@{S3j3^P6<r_6;K{f

literal 0
HcmV?d00001

diff --git a/advtrains_signals_ks/textures/advtrains_signals_ks_sign_40.png b/advtrains_signals_ks/textures/advtrains_signals_ks_sign_40.png
new file mode 100644
index 0000000000000000000000000000000000000000..c555331f26135aae8cadfb51705bf0d8ac937657
GIT binary patch
literal 103
zcmeAS@N?(olHy`uVBq!ia0vp^3Lwk~Bp9L@-6MgNo~MgrNCji^4}O*#o%j12k38S4
zkR(5$qSxzAoAB<y&Mbk097=V<j(1ukS}sd6xLqkvJh7`b0%U@xtDnm{r-UW|FiIaS

literal 0
HcmV?d00001

-- 
2.46.0
Details
Message ID
<20241109222507.3353bd83@BARIUM>
In-Reply-To
<20241006091344.440680-1-yiufamily.hh@gmail.com> (view parent)
DKIM signature
pass
Download raw message
Hi 1F616EMO,

first of all thank you very much for all the patches you have submitted so far. This is really a lot of enhancements for advtrains. And sorry for only answering now, but I was quite occupied with the birth of my son 2 months ago.

This patch looks fine so far. I didn't test it yet though. Can you tell me, what are the changes in the textures of the Ks signals? Thanks!

Regards, orwell


Am Sun,  6 Oct 2024 17:13:36 +0800
schrieb 1F616EMO <yiufamily.hh@gmail.com>:

> From: 1F616EMO <root@1f616emo.xyz>
> 
> This patch de-hardcodes that speed limit. To adapt the changes,
> the following changes are made:
> 
> 1. Added a setting key: advtrains_max_speed, acceppting integers from 1 to 99.
>    Any values beyond the limit wil be capped. This setting is marked experimental
> 2. Added signal signs from 24 to 40 m/s.
> 3. Added max_speed = 20 m/s to the wagon metatable, so wagons not specifying a
>    maximum speed continues to use 20 m/s.
> 4. Adjusted the train HUD so trains with maximum speed more than 20 m/s
>    uses each segment to represent max / 20 m/s.
> 5. Adjusted speed target / limit / LZB indicators so they work well on the new
>    segment bar
> 6. (Not so related) Out-of-bound LZB limitations are marked with a
>    red arrow pointing right at where 20 m/s were.
> ---
>  advtrains/init.lua                            |   7 +++
>  advtrains/settingtypes.txt                    |   4 ++
>  advtrains/trainhud.lua                        |  44 +++++++++++++--
>  advtrains/trainlogic.lua                      |   2 +-
>  advtrains/wagons.lua                          |   1 +
>  advtrains_signals_ks/init.lua                 |  53 ++++++++++++------
>  .../textures/advtrains_signals_ks_sign_24.png | Bin 0 -> 114 bytes
>  .../textures/advtrains_signals_ks_sign_28.png | Bin 0 -> 112 bytes
>  .../textures/advtrains_signals_ks_sign_30.png | Bin 0 -> 97 bytes
>  .../textures/advtrains_signals_ks_sign_32.png | Bin 0 -> 114 bytes
>  .../textures/advtrains_signals_ks_sign_36.png | Bin 0 -> 103 bytes
>  .../textures/advtrains_signals_ks_sign_40.png | Bin 0 -> 103 bytes
>  12 files changed, 88 insertions(+), 23 deletions(-)
>  create mode 100644 advtrains_signals_ks/textures/advtrains_signals_ks_sign_24.png
>  create mode 100644 advtrains_signals_ks/textures/advtrains_signals_ks_sign_28.png
>  create mode 100644 advtrains_signals_ks/textures/advtrains_signals_ks_sign_30.png
>  create mode 100644 advtrains_signals_ks/textures/advtrains_signals_ks_sign_32.png
>  create mode 100644 advtrains_signals_ks/textures/advtrains_signals_ks_sign_36.png
>  create mode 100644 advtrains_signals_ks/textures/advtrains_signals_ks_sign_40.png
> 
> diff --git a/advtrains/init.lua b/advtrains/init.lua
> index 06e456f..ba62c4a 100644
> --- a/advtrains/init.lua
> +++ b/advtrains/init.lua
> @@ -66,6 +66,13 @@ if not advtrains.wagon_load_range then
>  	advtrains.wagon_load_range = tonumber(minetest.settings:get("active_block_range"))*16
>  end
>  
> +-- Maximum speed of trains
> +-- The real maximum speed is the minimum value of all wagon's max speed and this value
> +-- Default: 20; Min: 1; Max: 99
> +-- Max. 99 because of the train HUD 7-seg display
> +advtrains.TRAIN_MAX_SPEED = tonumber(minetest.settings:get("advtrains_max_speed")) or 20
> +advtrains.TRAIN_MAX_SPEED = math.max(math.min(advtrains.TRAIN_MAX_SPEED, 99), 1)
> +
>  --pcall
>  local no_action=false
>  
> diff --git a/advtrains/settingtypes.txt b/advtrains/settingtypes.txt
> index 2b627cb..3f02058 100644
> --- a/advtrains/settingtypes.txt
> +++ b/advtrains/settingtypes.txt
> @@ -61,3 +61,7 @@ advtrains_save_interval (Save Interval) int 60 20 3600
>  #    If enabled, trains only collide with nodes with "normal" drawtype.
>  advtrains_forgiving_collision (Forgiving Collision mode) bool false
>  
> +#    Maximum speed of all trains
> +#    The real maximum speed is the minimum value of all wagon's max speed and this value
> +#    This is experimental. USE THIS AT YOUR OWN RISK!
> +advtrains_max_speed (Maximum Train Speed) int 20 1 99
> diff --git a/advtrains/trainhud.lua b/advtrains/trainhud.lua
> index f9f4876..731ad6d 100644
> --- a/advtrains/trainhud.lua
> +++ b/advtrains/trainhud.lua
> @@ -220,12 +220,34 @@ function advtrains.hud_train_format(train, flip)
>  	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")
> +	do
> +		local segbar_pos
> +		if max > 20 then
> +			segbar_pos = math.floor(vel * 20 / max)
> +		else
> +			segbar_pos = vel
> +		end
> +		hud:add_segmentbar_leftright(10, 65, 217, 20, 3, 20, math.min(max, 20), 20, "darkslategray", 0, segbar_pos, "white")
> +	end
> +	if res and res > 0 and res <= max then
> +		local indi_pos
> +		if max > 20 then
> +			indi_pos = 7 + math.floor(res * 220 / max)
> +		else
> +			indi_pos = 7 + res * 11
> +		end
> +		hud:add_fill(indi_pos, 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")
> +		do
> +			local arrow_pos
> +			if max > 20 then
> +				arrow_pos = 1 + train.tarvelocity * 220 / max
> +			else
> +				arrow_pos = 1 + train.tarvelocity * 11
> +			end
> +			hud:add(arrow_pos, 85, T"advtrains_hud_arrow.png":transform"FY":multiply"cyan")
> +		end
>  	end
>  	local lzbdisp
>  	local lzb = train.lzb
> @@ -250,7 +272,19 @@ function advtrains.hud_train_format(train, flip)
>  			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")
> +					do
> +						local texture = T"advtrains_hud_arrow.png":multiply"red"
> +						local arrow_pos
> +						if spd > math.max(max, 20) then
> +							texture = texture:transform"R90"
> +							arrow_pos = 221 -- 20
> +						elseif max > 20 then
> +							arrow_pos = 1 + math.floor(spd * 220 / max)
> +						else
> +							arrow_pos = 1 + spd * 11
> +						end
> +						hud:add(arrow_pos, 50, texture)
> +					end
>  				end
>  				local dist = math.floor(((oc[i].index or train.index)-train.index))
>  				dist = math.max(0, math.min(999, dist))
> diff --git a/advtrains/trainlogic.lua b/advtrains/trainlogic.lua
> index f136577..0a3c6fe 100644
> --- a/advtrains/trainlogic.lua
> +++ b/advtrains/trainlogic.lua
> @@ -1039,7 +1039,7 @@ function advtrains.update_trainpart_properties(train_id, invert_flipstate)
>  	local train=advtrains.trains[train_id]
>  	train.drives_on=advtrains.merge_tables(advtrains.all_tracktypes)
>  	--FIX: deep-copy the table!!!
> -	train.max_speed=20
> +	train.max_speed=advtrains.TRAIN_MAX_SPEED
>  	train.extent_h = 0;
>  	
>  	local rel_pos=0
> diff --git a/advtrains/wagons.lua b/advtrains/wagons.lua
> index 536c8d4..156db06 100644
> --- a/advtrains/wagons.lua
> +++ b/advtrains/wagons.lua
> @@ -68,6 +68,7 @@ local wagon={
>  	wagon_width=3, -- Wagon width in meters
>  	has_inventory=false,
>  	static_save=false,
> +	max_speed = 20, -- Default value
>  }
>  
>  
> diff --git a/advtrains_signals_ks/init.lua b/advtrains_signals_ks/init.lua
> index 258b868..3b43955 100755
> --- a/advtrains_signals_ks/init.lua
> +++ b/advtrains_signals_ks/init.lua
> @@ -306,11 +306,17 @@ for _, rtab in ipairs({
>  	
>  	for typ, prts in pairs {
>  		-- Speed restrictions:
> -		["4"] = {asp = { main = 4, shunt = true }, n = "6"},
> -		["6"] = {asp = { main = 6, shunt = true }, n = "8"},
> -		["8"] = {asp = { main = 8, shunt = true }, n = "12"},
> -		["12"] = {asp = { main = 12, shunt = true }, n = "16"},
> -		["16"] = {asp = { main = 16, shunt = true }, n = "e"},
> +		["4"]  = {asp = { main =  4, shunt = true }, n = advtrains.TRAIN_MAX_SPEED >= 6 and "6" or "e"},
> +		["6"]  = {asp = { main =  6, shunt = true }, n = advtrains.TRAIN_MAX_SPEED >= 8 and "8" or "e"},
> +		["8"]  = {asp = { main =  8, shunt = true }, n = advtrains.TRAIN_MAX_SPEED >= 12 and "12" or "e"},
> +		["12"] = {asp = { main = 12, shunt = true }, n = advtrains.TRAIN_MAX_SPEED >= 16 and "16" or "e"},
> +		["16"] = {asp = { main = 16, shunt = true }, n = advtrains.TRAIN_MAX_SPEED >= 20 and "20" or "e"},
> +		["20"] = {asp = { main = 20, shunt = true }, n = advtrains.TRAIN_MAX_SPEED >= 24 and "24" or "e"},
> +		["24"] = {asp = { main = 24, shunt = true }, n = advtrains.TRAIN_MAX_SPEED >= 28 and "28" or "e"},
> +		["28"] = {asp = { main = 28, shunt = true }, n = advtrains.TRAIN_MAX_SPEED >= 30 and "30" or "e"},
> +		["30"] = {asp = { main = 30, shunt = true }, n = advtrains.TRAIN_MAX_SPEED >= 32 and "32" or "e"},
> +		["32"] = {asp = { main = 32, shunt = true }, n = advtrains.TRAIN_MAX_SPEED >= 40 and "40" or "e"},
> +		["36"] = {asp = { main = 36, shunt = true }, n = advtrains.TRAIN_MAX_SPEED >= 40 and "40" or "e"},
>  		-- Speed restriction lifted
>  		["e"] = {asp = { main = -1, shunt = true }, n = "4", mesh = "_zs10"},
>  	} do
> @@ -323,12 +329,19 @@ for _, rtab in ipairs({
>  	end
>  
>  	for typ, prts in pairs {
> -		["4"]   = {main =  4, n = "6"},
> -		["6"]   = {main =  6, n = "8"},
> -		["8"]   = {main =  8, n = "12"},
> -		["12"]  = {main = 12, n = "16"},
> -		["16"]  = {main = 16, n = "e"},
> -		["e"] = {main = -1, n = "4"},
> +		["4"]  = {main =  4, n = advtrains.TRAIN_MAX_SPEED >= 6 and "6" or "e"},
> +		["6"]  = {main =  6, n = advtrains.TRAIN_MAX_SPEED >= 8 and "8" or "e"},
> +		["8"]  = {main =  8, n = advtrains.TRAIN_MAX_SPEED >= 12 and "12" or "e"},
> +		["12"] = {main = 12, n = advtrains.TRAIN_MAX_SPEED >= 16 and "16" or "e"},
> +		["16"] = {main = 16, n = advtrains.TRAIN_MAX_SPEED >= 20 and "20" or "e"},
> +		["20"] = {main = 20, n = advtrains.TRAIN_MAX_SPEED >= 24 and "24" or "e"},
> +		["24"] = {main = 24, n = advtrains.TRAIN_MAX_SPEED >= 28 and "28" or "e"},
> +		["28"] = {main = 28, n = advtrains.TRAIN_MAX_SPEED >= 30 and "30" or "e"},
> +		["30"] = {main = 30, n = advtrains.TRAIN_MAX_SPEED >= 32 and "32" or "e"},
> +		["32"] = {main = 32, n = advtrains.TRAIN_MAX_SPEED >= 40 and "40" or "e"},
> +		["36"] = {main = 36, n = advtrains.TRAIN_MAX_SPEED >= 40 and "40" or "e"},
> +		["40"] = {main = 40, n = "e"},
> +		["e"]  = {main = -1, n = "4"},
>  	} do
>  		local tile2 = "advtrains_signals_ks_sign_lf7.png^(advtrains_signals_ks_sign_"..typ..".png^[makealpha:255,255,255)"..(typ == "e" and "" or "^[multiply:orange")
>  		local inv = "advtrains_signals_ks_sign_lf7.png^(advtrains_signals_ks_sign_8.png^[makealpha:255,255,255)^[multiply:orange"
> @@ -336,12 +349,18 @@ for _, rtab in ipairs({
>  	end
>  
>  	for typ, prts in pairs {
> -		["4"]   = {main =  4, n = "6"},
> -		["6"]   = {main =  6, n = "8"},
> -		["8"]   = {main =  8, n = "12"},
> -		["12"]  = {main = 12, n = "16"},
> -		["16"]  = {main = 16, n = "20"},
> -		["20"]  = {main = 20, n = "4"},
> +		["4"]  = {main =  4, n = advtrains.TRAIN_MAX_SPEED >= 6 and "6" or "4"},
> +		["6"]  = {main =  6, n = advtrains.TRAIN_MAX_SPEED >= 8 and "8" or "4"},
> +		["8"]  = {main =  8, n = advtrains.TRAIN_MAX_SPEED >= 12 and "12" or "4"},
> +		["12"] = {main = 12, n = advtrains.TRAIN_MAX_SPEED >= 16 and "16" or "4"},
> +		["16"] = {main = 16, n = advtrains.TRAIN_MAX_SPEED >= 20 and "20" or "4"},
> +		["20"] = {main = 20, n = advtrains.TRAIN_MAX_SPEED >= 24 and "24" or "4"},
> +		["24"] = {main = 24, n = advtrains.TRAIN_MAX_SPEED >= 28 and "28" or "4"},
> +		["28"] = {main = 28, n = advtrains.TRAIN_MAX_SPEED >= 30 and "30" or "4"},
> +		["30"] = {main = 30, n = advtrains.TRAIN_MAX_SPEED >= 32 and "32" or "4"},
> +		["32"] = {main = 32, n = advtrains.TRAIN_MAX_SPEED >= 40 and "40" or "4"},
> +		["36"] = {main = 36, n = advtrains.TRAIN_MAX_SPEED >= 40 and "40" or "4"},
> +		["40"] = {main = 40, n = "4"},
>  	} do
>  		local tile2 = "advtrains_signals_ks_sign_lf7.png^(advtrains_signals_ks_sign_"..typ..".png^[makealpha:255,255,255)"
>  		local inv = "advtrains_signals_ks_sign_lf7.png^(advtrains_signals_ks_sign_8.png^[makealpha:255,255,255)"
> diff --git a/advtrains_signals_ks/textures/advtrains_signals_ks_sign_24.png b/advtrains_signals_ks/textures/advtrains_signals_ks_sign_24.png
> new file mode 100644
> index 0000000000000000000000000000000000000000..29d54aeaae76483467de6a2bf6444794b0abdeea
> GIT binary patch
> literal 114
> zcmeAS@N?(olHy`uVBq!ia0vp^3Lwk~Bp9L@-6MgNrKgKyNCji^4}O*#osa7qkGz}j
> zut?11&)+VuJ*~p!iAVAUKGy0_sJPFd@~)ZZ2EWp)k3u~TOw)}Sgaayy-mEA+0W!?f
> L)z4*}Q$iB}0;we}
> 
> literal 0
> HcmV?d00001
> 
> diff --git a/advtrains_signals_ks/textures/advtrains_signals_ks_sign_28.png b/advtrains_signals_ks/textures/advtrains_signals_ks_sign_28.png
> new file mode 100644
> index 0000000000000000000000000000000000000000..ee4719186c6fe580deecb64229121a0c3521d08e
> GIT binary patch
> literal 112
> zcmeAS@N?(olHy`uVBq!ia0vp^3Lwk~Bp9L@-6MgNxu=U`NCji^4}O*#osat)kG$LM
> zu&7La!jJCx3@d;0Uiv8OvWLC!eY489=8md4EFQAT0qlC|3=G;@rKOKm!ka)wdAj<!
> JtaD0e0sx;hB7^_{
> 
> literal 0
> HcmV?d00001
> 
> diff --git a/advtrains_signals_ks/textures/advtrains_signals_ks_sign_30.png b/advtrains_signals_ks/textures/advtrains_signals_ks_sign_30.png
> new file mode 100644
> index 0000000000000000000000000000000000000000..97413bdc17477666ff4c38c4850b48bcffb684be
> GIT binary patch
> literal 97
> zcmeAS@N?(olHy`uVBq!ia0vp^3Lwk~Bp9L@-6MgNhNp{TNCji^4}O*#oZpT+Jo+B1
> t@UdLp@sW8)Li^@_Le34n?GY`PB^mt0%41FQ^LjvfJzf1=);T3K0RU*I8~OkM
> 
> literal 0
> HcmV?d00001
> 
> diff --git a/advtrains_signals_ks/textures/advtrains_signals_ks_sign_32.png b/advtrains_signals_ks/textures/advtrains_signals_ks_sign_32.png
> new file mode 100644
> index 0000000000000000000000000000000000000000..039acaafcbc542fa3c82fe0a171adbd12f0c6289
> GIT binary patch
> literal 114
> zcmeAS@N?(olHy`uVBq!ia0vp^3Lwk~Bp9L@-6MgNrKgKyNCji^4}O*#oZlWhJo=ue
> z@Nv7C%b%m}f7k@y>~~!AUSZ>Rg-3QBH~5ua6$<QkWU+o+Kj$0+!`#BMr*n)XLO_Oj  
> My85}Sb4q9e04)F}1^@s6
> 
> literal 0
> HcmV?d00001
> 
> diff --git a/advtrains_signals_ks/textures/advtrains_signals_ks_sign_36.png b/advtrains_signals_ks/textures/advtrains_signals_ks_sign_36.png
> new file mode 100644
> index 0000000000000000000000000000000000000000..e57231dcec50ddfdd8f03034a0c0428c47c8e0d8
> GIT binary patch
> literal 103
> zcmeAS@N?(olHy`uVBq!ia0vp^3Lwk~Bp9L@-6MgNo~MgrNCji^4}O*#oZlWhJo=ue
> z@Nv7C%azB<b<G@Q<pQUr7Bw3%n#m;z`lT~4%;_zBdbBU}HOK@{S3j3^P6<r_6;K{f
> 
> literal 0
> HcmV?d00001
> 
> diff --git a/advtrains_signals_ks/textures/advtrains_signals_ks_sign_40.png b/advtrains_signals_ks/textures/advtrains_signals_ks_sign_40.png
> new file mode 100644
> index 0000000000000000000000000000000000000000..c555331f26135aae8cadfb51705bf0d8ac937657
> GIT binary patch
> literal 103
> zcmeAS@N?(olHy`uVBq!ia0vp^3Lwk~Bp9L@-6MgNo~MgrNCji^4}O*#o%j12k38S4
> zkR(5$qSxzAoAB<y&Mbk097=V<j(1ukS}sd6xLqkvJh7`b0%U@xtDnm{r-UW|FiIaS
> 
> literal 0
> HcmV?d00001
> 
Reply to thread Export thread (mbox)