aboutsummaryrefslogtreecommitdiff
path: root/advtrains/signals.lua
diff options
context:
space:
mode:
authororwell <orwell@bleipb.de>2025-05-27 21:03:14 +0200
committerorwell <orwell@bleipb.de>2025-05-27 21:03:14 +0200
commit8506dd2825b715293138976a5ad1fa11a46206a7 (patch)
tree1f48c1dc03c3bbc6ed6762bd04d10e543a3a580c /advtrains/signals.lua
parent2a9891577c1b00068cc4ec858c7dc6c5196f0a2b (diff)
parentadc01a0bba29b40278e45c50caa954c435374f7b (diff)
downloadadvtrains-8506dd2825b715293138976a5ad1fa11a46206a7.tar.gz
advtrains-8506dd2825b715293138976a5ad1fa11a46206a7.tar.bz2
advtrains-8506dd2825b715293138976a5ad1fa11a46206a7.zip
Merge branch 'master' into cesky-hvozd
Throw away most of the changes in everything except line_automation. Merge line_automation changes between CH and master
Diffstat (limited to 'advtrains/signals.lua')
-rw-r--r--advtrains/signals.lua74
1 files changed, 25 insertions, 49 deletions
diff --git a/advtrains/signals.lua b/advtrains/signals.lua
index 93fd99e..35e118c 100644
--- a/advtrains/signals.lua
+++ b/advtrains/signals.lua
@@ -42,9 +42,6 @@ end
for r,f in pairs({on={as="off", ls="green", als="red"}, off={as="on", ls="red", als="green"}}) do
- -- advtrains.trackplacer.register_tracktype("advtrains:retrosignal", "")
- -- advtrains.trackplacer.register_tracktype("advtrains:signal", "")
-
for rotid, rotation in ipairs({"", "_30", "_45", "_60"}) do
local crea=1
if rotid==1 and r=="off" then crea=0 end
@@ -52,7 +49,7 @@ for r,f in pairs({on={as="off", ls="green", als="red"}, off={as="on", ls="red",
minetest.register_node("advtrains:retrosignal_"..r..rotation, {
drawtype = "mesh",
paramtype="light",
- paramtype2="4dir",
+ paramtype2="facedir",
walkable = false,
selection_box = {
type = "fixed",
@@ -60,10 +57,9 @@ for r,f in pairs({on={as="off", ls="green", als="red"}, off={as="on", ls="red",
},
mesh = "advtrains_retrosignal_"..r..rotation..".b3d",
tiles = {"advtrains_retrosignal.png"},
- use_texture_alpha = "opaque",
inventory_image="advtrains_retrosignal_inv.png",
drop="advtrains:retrosignal_off",
- description=attrans("Lampless Signal (@1)", attrans(r..rotation)),
+ description=attrans("Lampless Signal"),
sunlight_propagates=true,
groups = {
cracky=3,
@@ -87,7 +83,7 @@ for r,f in pairs({on={as="off", ls="green", als="red"}, off={as="on", ls="red",
on_rightclick=function(pos, node, player)
local pname = player:get_player_name()
local sigd = advtrains.interlocking and advtrains.interlocking.db.get_sigd_for_signal(pos)
- if sigd then
+ if sigd and not player:get_player_control().aux1 then
advtrains.interlocking.show_signalling_form(sigd, pname)
elseif advtrains.interlocking and player:get_player_control().aux1 then
advtrains.interlocking.show_ip_form(pos, pname)
@@ -106,17 +102,17 @@ for r,f in pairs({on={as="off", ls="green", als="red"}, off={as="on", ls="red",
main_aspects = main_aspects,
apply_aspect = simple_apply_aspect("advtrains:retrosignal_off"..rotation, "advtrains:retrosignal_on"..rotation),
get_aspect_info = function() return aspect(r=="on") end,
+ route_role = "main",
},
can_dig = can_dig_func,
after_dig_node = after_dig_func,
--TODO add rotation using trackworker
})
- -- advtrains.trackplacer.add_worked("advtrains:retrosignal", r, rotation, nil)
minetest.register_node("advtrains:signal_"..r..rotation, {
drawtype = "mesh",
paramtype="light",
- paramtype2="4dir",
+ paramtype2="facedir",
walkable = false,
selection_box = {
type = "fixed",
@@ -126,7 +122,7 @@ for r,f in pairs({on={as="off", ls="green", als="red"}, off={as="on", ls="red",
tiles = {"advtrains_signal_"..r..".png"},
inventory_image="advtrains_signal_inv.png",
drop="advtrains:signal_off",
- description=attrans("Signal (@1)", attrans(r..rotation)),
+ description=attrans("Signal"),
groups = {
cracky=3,
not_blocking_trains=1,
@@ -145,7 +141,7 @@ for r,f in pairs({on={as="off", ls="green", als="red"}, off={as="on", ls="red",
on_rightclick=function(pos, node, player)
local pname = player:get_player_name()
local sigd = advtrains.interlocking and advtrains.interlocking.db.get_sigd_for_signal(pos)
- if sigd then
+ if sigd and not player:get_player_control().aux1 then
advtrains.interlocking.show_signalling_form(sigd, pname)
elseif advtrains.interlocking and player:get_player_control().aux1 then
advtrains.interlocking.show_ip_form(pos, pname)
@@ -158,6 +154,7 @@ for r,f in pairs({on={as="off", ls="green", als="red"}, off={as="on", ls="red",
main_aspects = main_aspects,
apply_aspect = simple_apply_aspect("advtrains:signal_off"..rotation, "advtrains:signal_on"..rotation),
get_aspect_info = function() return aspect(r=="on") end,
+ route_role = "main",
node_state = f.ls,
node_state_map = { red = "advtrains:signal_off"..rotation, green = "advtrains:signal_on"..rotation},
node_on_switch_state = function(pos, new_node, old_state, new_state)
@@ -173,24 +170,22 @@ for r,f in pairs({on={as="off", ls="green", als="red"}, off={as="on", ls="red",
after_dig_node = after_dig_func,
--TODO add rotation using trackworker
})
- -- advtrains.trackplacer.add_worked("advtrains:signal", r, rotation, nil)
end
local crea=1
if r=="off" then crea=0 end
--tunnel signals. no rotations.
- for loc, sbox in pairs({
- l={-1/2, -1/2, -1/4, 0, 1/2, 1/4},
- r={0, -1/2, -1/4, 1/2, 1/2, 1/4},
- t={-1/2, 0, -1/4, 1/2, 1/2, 1/4},
- b={-1/4, -1/2, 1/2 - 1/8, 1/4, 1/2, 1/2},
- p={-1/4, -1/2, 5/8, 1/4, 1/2, 7/8},
- }) do
- local def = {
+ local swdesc = { -- needed for xgettext
+ l = attrans("Wallmounted Signal (left)"),
+ r = attrans("Wallmounted Signal (right)"),
+ t = attrans("Wallmounted Signal (top)"),
+ }
+ for loc, sbox in pairs({l={-1/2, -1/2, -1/4, 0, 1/2, 1/4}, r={0, -1/2, -1/4, 1/2, 1/2, 1/4}, t={-1/2, 0, -1/4, 1/2, 1/2, 1/4}}) do
+ minetest.register_node("advtrains:signal_wall_"..loc.."_"..r, {
drawtype = "mesh",
paramtype="light",
- paramtype2="4dir",
+ paramtype2="facedir",
walkable = false,
selection_box = {
type = "fixed",
@@ -199,7 +194,7 @@ for r,f in pairs({on={as="off", ls="green", als="red"}, off={as="on", ls="red",
mesh = "advtrains_signal_wall_"..loc..".b3d",
tiles = {"advtrains_signal_wall_"..r..".png"},
drop="advtrains:signal_wall_"..loc.."_off",
- description=attrans("Wallmounted Signal ("..loc..")"),
+ description=swdesc[loc],
groups = {
cracky=3,
not_blocking_trains=1,
@@ -218,7 +213,7 @@ for r,f in pairs({on={as="off", ls="green", als="red"}, off={as="on", ls="red",
on_rightclick=function(pos, node, player)
local pname = player:get_player_name()
local sigd = advtrains.interlocking and advtrains.interlocking.db.get_sigd_for_signal(pos)
- if sigd then
+ if sigd and not player:get_player_control().aux1 then
advtrains.interlocking.show_signalling_form(sigd, pname)
elseif advtrains.interlocking and player:get_player_control().aux1 then
advtrains.interlocking.show_ip_form(pos, pname)
@@ -231,6 +226,7 @@ for r,f in pairs({on={as="off", ls="green", als="red"}, off={as="on", ls="red",
main_aspects = main_aspects,
apply_aspect = simple_apply_aspect("advtrains:signal_wall_"..loc.."_off", "advtrains:signal_wall_"..loc.."_on"),
get_aspect_info = function() return aspect(r=="on") end,
+ route_role = "main",
node_state = f.ls,
node_state_map = { red = "advtrains:signal_wall_"..loc.."_off", green = "advtrains:signal_wall_"..loc.."_on" },
node_on_switch_state = function(pos, new_node, old_state, new_state)
@@ -244,11 +240,7 @@ for r,f in pairs({on={as="off", ls="green", als="red"}, off={as="on", ls="red",
},
can_dig = can_dig_func,
after_dig_node = after_dig_func,
- }
- if loc == "b" or loc == "p" then
- def.mesh = "advtrains_signal_wall_"..loc..".obj"
- end
- minetest.register_node("advtrains:signal_wall_"..loc.."_"..r, def)
+ })
end
end
@@ -330,15 +322,6 @@ minetest.register_node("advtrains:across_on", {
end,
})
-minetest.register_craft({
- output = "advtrains:across_off",
- recipe = {
- {"default:steel_ingot", "", "default:steel_ingot"},
- {"", "mesecons_lightstone:lightstone_red_off", ""},
- {"default:steel_ingot", "", "default:steel_ingot"},
- },
-})
-
minetest.register_abm(
{
label = "Sound for Level Crossing",
@@ -346,18 +329,11 @@ minetest.register_abm(
interval = 3,
chance = 1,
action = function(pos, node, active_object_count, active_object_count_wider)
- local meta = minetest.get_meta(pos)
- local state = meta:get_int("crossing_state")
- if state <= 0 then
- minetest.sound_play("advtrains_crossing_bell", {
- pos = pos,
- gain = 1.0, -- default
- max_hear_distance = 16, -- default, uses an euclidean metric
- })
- meta:set_int("crossing_state", 2)
- else
- meta:set_int("crossing_state", state - 1)
- end
+ minetest.sound_play("advtrains_crossing_bell", {
+ pos = pos,
+ gain = 1.0, -- default
+ max_hear_distance = 16, -- default, uses an euclidean metric
+ })
end,
}
)