aboutsummaryrefslogtreecommitdiff
path: root/advtrains_interlocking/distant.lua
diff options
context:
space:
mode:
authorY. Wang <yw05@forksworld.de>2023-01-06 18:23:15 +0100
committerY. Wang <yw05@forksworld.de>2023-03-23 20:06:02 +0100
commitd443d8e07af89665a6bb3d87af91f43f08a6c47e (patch)
treeccb18a6ba184ec5b08835ed2762e680a1cb44f01 /advtrains_interlocking/distant.lua
parent2d072cdc67ec3018eaba36b7c79c2b19e574a94d (diff)
downloadadvtrains-d443d8e07af89665a6bb3d87af91f43f08a6c47e.tar.gz
advtrains-d443d8e07af89665a6bb3d87af91f43f08a6c47e.tar.bz2
advtrains-d443d8e07af89665a6bb3d87af91f43f08a6c47e.zip
Distant signaling: avoid signal signs
Diffstat (limited to 'advtrains_interlocking/distant.lua')
-rw-r--r--advtrains_interlocking/distant.lua21
1 files changed, 21 insertions, 0 deletions
diff --git a/advtrains_interlocking/distant.lua b/advtrains_interlocking/distant.lua
index 726c2b3..4175875 100644
--- a/advtrains_interlocking/distant.lua
+++ b/advtrains_interlocking/distant.lua
@@ -85,6 +85,23 @@ local function unassign_all(pos, force)
unassign_dst(pos, force)
end
+--- Check whether a signal is "appropriate" for the distant signal system.
+-- Currently, a signal is considered appropriate if its signal aspect can be set.
+-- @function appropriate_signal
+-- @param pos The position of the signal
+local function appropriate_signal(pos)
+ local node = advtrains.ndb.get_node(pos)
+ local ndef = minetest.registered_nodes[node.name] or {}
+ if not ndef then
+ return false
+ end
+ local atdef = ndef.advtrains
+ if not atdef then
+ return false
+ end
+ return atdef.supported_aspects and atdef.set_aspect and true
+end
+
--- Assign a distant signal to a main signal.
-- @function assign
-- @param main The position of the main signal.
@@ -92,6 +109,9 @@ end
-- @param[opt="manual"] by The method of assignment.
-- @param[opt=false] skip_update Whether to skip callbacks.
local function assign(main, dst, by, skip_update)
+ if not (appropriate_signal(main) and appropriate_signal(dst)) then
+ return
+ end
local pts_main = pts(main)
local pts_dst = pts(dst)
local t = db_distant[pts_main]
@@ -177,4 +197,5 @@ advtrains.distant = {
update_main = update_main,
update_dst = update_dst,
update_signal = update_signal,
+ appropriate_signal = appropriate_signal,
}