aboutsummaryrefslogtreecommitdiff
path: root/advtrains_signals_ks
diff options
context:
space:
mode:
authororwell <orwell@bleipb.de>2026-03-29 19:30:00 +0200
committerorwell <orwell@bleipb.de>2026-03-29 19:30:00 +0200
commit39a8c4ede70378c85e5b1163bc93be3c9c41f237 (patch)
tree78892f0a2eb5fc49abaa1041280fb0ead0ad70a8 /advtrains_signals_ks
parent8567bcefb0f825d457f89c8533788815ee96374c (diff)
Ks signals: signal parts above rotated rotate with base
Diffstat (limited to 'advtrains_signals_ks')
-rw-r--r--advtrains_signals_ks/init.lua39
1 files changed, 29 insertions, 10 deletions
diff --git a/advtrains_signals_ks/init.lua b/advtrains_signals_ks/init.lua
index 5228271..b84b572 100644
--- a/advtrains_signals_ks/init.lua
+++ b/advtrains_signals_ks/init.lua
@@ -181,6 +181,18 @@ local mainaspects_ra = {
},
}
+-- mast rotation function: on rotate, also rotate all ks masts above it
+local function trackworker_on_cycle_rotation(pos, node, player, new_node, has_aux1_down)
+ -- find node above and try to rotate it as well
+ local upos = vector.add(pos, {x=0,y=1,z=0})
+ local unode = advtrains.ndb.get_node_or_nil(upos)
+ -- only if it is also a node added by this mod
+ if node and string.match(unode.name, "^advtrains_signals_ks:") then
+ advtrains.trackworker_cycle_node_rotation(upos, unode, player)
+ end
+ return true -- don't inhibit action
+end
+
for _, rtab in ipairs({
{rot = "0", sbox = {-1/8, -1/2, -1/2, 1/8, 1/2, -1/4}, ici=true, nextrot = "30"},
{rot = "30", sbox = {-3/8, -1/2, -1/2, -1/8, 1/2, -1/4}, nextrot = "45"},
@@ -259,7 +271,8 @@ for _, rtab in ipairs({
get_aspect_info = afunc,
route_role = "main_distant",
trackworker_next_rot = "advtrains_signals_ks:hs_"..typ.."_"..rtab.nextrot,
- trackworker_rot_incr_param2 = (rot=="offr")
+ trackworker_rot_incr_param2 = (rot=="offr"),
+ trackworker_on_cycle_rotation = trackworker_on_cycle_rotation,
},
on_rightclick = advtrains.interlocking.signal.on_rightclick,
can_dig = advtrains.interlocking.signal.can_dig,
@@ -332,7 +345,8 @@ for _, rtab in ipairs({
route_role = "distant",
pure_distant = true,
trackworker_next_rot = "advtrains_signals_ks:vs_"..typ.."_"..rtab.nextrot,
- trackworker_rot_incr_param2 = (rot=="offr")
+ trackworker_rot_incr_param2 = (rot=="offr"),
+ trackworker_on_cycle_rotation = trackworker_on_cycle_rotation,
},
on_rightclick = advtrains.interlocking.signal.on_rightclick,
can_dig = advtrains.interlocking.signal.can_dig,
@@ -387,7 +401,8 @@ for _, rtab in ipairs({
get_aspect_info = afunc,
route_role = "shunt",
trackworker_next_rot = "advtrains_signals_ks:ra_"..typ.."_"..rtab.nextrot,
- trackworker_rot_incr_param2 = (rot=="offr")
+ trackworker_rot_incr_param2 = (rot=="offr"),
+ trackworker_on_cycle_rotation = trackworker_on_cycle_rotation,
},
on_rightclick = advtrains.interlocking.signal.on_rightclick,
can_dig = advtrains.interlocking.signal.can_dig,
@@ -427,6 +442,7 @@ for _, rtab in ipairs({
trackworker_next_rot = "advtrains_signals_ks:"..prefix.."_"..typ.."_"..rtab.nextrot,
trackworker_rot_incr_param2 = (rot=="offr"),
trackworker_next_var = "advtrains_signals_ks:"..prefix.."_"..nxt.."_"..rot,
+ trackworker_on_cycle_rotation = trackworker_on_cycle_rotation,
},
on_rightclick = advtrains.interlocking.signal.on_rightclick,
can_dig = advtrains.interlocking.signal.can_dig,
@@ -534,9 +550,10 @@ for _, rtab in ipairs({
t.drop = "advtrains_signals_ks:zs3_off_0"
t.selection_box.fixed[1][5] = 0
t.advtrains = {
- trackworker_next_rot = "advtrains_signals_ks:zs3_"..typ.."_"..rtab.nextrot,
- trackworker_rot_incr_param2 = (rot=="offr")
- }
+ trackworker_next_rot = "advtrains_signals_ks:zs3_"..typ.."_"..rtab.nextrot,
+ trackworker_rot_incr_param2 = (rot=="offr"),
+ trackworker_on_cycle_rotation = trackworker_on_cycle_rotation,
+ }
minetest.register_node("advtrains_signals_ks:zs3_"..typ.."_"..rot, t)
--TODO add rotation using trackworker
@@ -547,9 +564,10 @@ for _, rtab in ipairs({
t.drop = "advtrains_signals_ks:zs3v_off_0"
t.tiles[3] = t.tiles[3] .. "^[multiply:yellow"
t.advtrains = {
- trackworker_next_rot = "advtrains_signals_ks:zs3v_"..typ.."_"..rtab.nextrot,
- trackworker_rot_incr_param2 = (rot=="offr")
- }
+ trackworker_next_rot = "advtrains_signals_ks:zs3v_"..typ.."_"..rtab.nextrot,
+ trackworker_rot_incr_param2 = (rot=="offr"),
+ trackworker_on_cycle_rotation = trackworker_on_cycle_rotation,
+ }
minetest.register_node("advtrains_signals_ks:zs3v_"..typ.."_"..rot, t)
--TODO add rotation using trackworker
end
@@ -576,7 +594,8 @@ for _, rtab in ipairs({
},
advtrains = {
trackworker_next_rot = "advtrains_signals_ks:mast_mast_"..rtab.nextrot,
- trackworker_rot_incr_param2 = (rot=="offr")
+ trackworker_rot_incr_param2 = (rot=="offr"),
+ trackworker_on_cycle_rotation = trackworker_on_cycle_rotation,
},
drop = "advtrains_signals_ks:mast_mast_0",
})