aboutsummaryrefslogtreecommitdiff
path: root/advtrains_interlocking/signal_api.lua
diff options
context:
space:
mode:
authorY. Wang <yw05@forksworld.de>2022-06-11 18:07:00 +0200
committerY. Wang <yw05@forksworld.de>2023-03-23 20:06:02 +0100
commit98c37108762c6d7c9f1d691b84f49bfa65b81b28 (patch)
tree32402fd5365d14470016562f16a5bc5f560eec87 /advtrains_interlocking/signal_api.lua
parentd1a0d8f2654d6ee64c1a43de7958b1eadfaff6b0 (diff)
downloadadvtrains-98c37108762c6d7c9f1d691b84f49bfa65b81b28.tar.gz
advtrains-98c37108762c6d7c9f1d691b84f49bfa65b81b28.tar.bz2
advtrains-98c37108762c6d7c9f1d691b84f49bfa65b81b28.zip
Implement primitive distant signaling
Diffstat (limited to 'advtrains_interlocking/signal_api.lua')
-rw-r--r--advtrains_interlocking/signal_api.lua85
1 files changed, 3 insertions, 82 deletions
diff --git a/advtrains_interlocking/signal_api.lua b/advtrains_interlocking/signal_api.lua
index 5b3baf8..1fd4e34 100644
--- a/advtrains_interlocking/signal_api.lua
+++ b/advtrains_interlocking/signal_api.lua
@@ -167,7 +167,6 @@ This function will query get_aspect to retrieve the new aspect.
local DANGER = {
main = 0,
- dst = false,
shunt = false,
}
advtrains.interlocking.DANGER = DANGER
@@ -178,8 +177,6 @@ advtrains.interlocking.GENERIC_FREE = {
dst = false,
}
-local supposed_aspects = {}
-
local function convert_aspect_if_necessary(asp)
if type(asp.main) == "table" then
local newasp = {}
@@ -200,24 +197,7 @@ local function convert_aspect_if_necessary(asp)
end
return asp
end
-
-function advtrains.interlocking.load_supposed_aspects(tbl)
- if tbl then
- supposed_aspects = tbl
- end
-end
-
-function advtrains.interlocking.save_supposed_aspects()
- return supposed_aspects
-end
-
-local function set_supposed_aspect(pos, asp)
- supposed_aspects[advtrains.roundfloorpts(pos)] = asp
-end
-
-local function get_supposed_aspect(pos)
- return supposed_aspects[advtrains.roundfloorpts(pos)]
-end
+advtrains.interlocking.signal_convert_aspect_if_necessary = convert_aspect_if_necessary
function advtrains.interlocking.update_signal_aspect(tcbs)
if tcbs.signal then
@@ -233,27 +213,8 @@ end
function advtrains.interlocking.signal_after_dig(pos)
-- clear influence point
advtrains.interlocking.db.clear_ip_by_signalpos(pos)
- set_supposed_aspect(pos, nil)
-end
-
-function advtrains.interlocking.signal_set_aspect(pos, asp)
- asp = convert_aspect_if_necessary(asp)
- local node=advtrains.ndb.get_node(pos)
- local ndef=minetest.registered_nodes[node.name]
- if ndef and ndef.advtrains and ndef.advtrains.set_aspect then
- local oldasp = advtrains.interlocking.signal_get_aspect(pos) or DANGER
- local suppasp = advtrains.interlocking.signal_get_supported_aspects(pos) or {}
- local newasp = asp
- if suppasp.type == 2 then
- asp = advtrains.interlocking.aspects.type1_to_type2main(asp, suppasp.group)
- end
- set_supposed_aspect(pos, newasp)
- ndef.advtrains.set_aspect(pos, node, asp)
- local aspect_changed = advtrains.interlocking.aspects.not_equalp(oldasp, newasp)
- if aspect_changed then
- advtrains.interlocking.signal_on_aspect_changed(pos)
- end
- end
+ advtrains.interlocking.signal_clear_aspect(pos)
+ advtrains.distant.unassign_all(pos, true)
end
-- should be called when aspect has changed on this signal.
@@ -312,46 +273,6 @@ function advtrains.interlocking.signal_get_supposed_aspect(pos)
return DANGER;
end
--- Returns the actual aspect of the signal at position, as returned by the nodedef.
--- returns nil when there's no signal at the position
-function advtrains.interlocking.signal_get_real_aspect(pos)
- local node=advtrains.ndb.get_node(pos)
- local ndef=minetest.registered_nodes[node.name]
- if ndef and ndef.advtrains and ndef.advtrains.get_aspect then
- local asp = ndef.advtrains.get_aspect(pos, node)
- local suppasp = advtrains.interlocking.signal_get_supported_aspects(pos) or {}
- if suppasp.type == 2 then
- asp = advtrains.interlocking.aspects.type2main_to_type1(suppasp.group, asp)
- end
- if not asp then asp = DANGER end
- asp = convert_aspect_if_necessary(asp)
- return asp
- end
- return nil
-end
-
--- Returns the signal aspect as reported in the suppasp table.
-function advtrains.interlocking.signal_get_aspect(pos)
- local asp = get_supposed_aspect(pos)
- if not asp then
- asp = advtrains.interlocking.signal_get_real_aspect(pos)
- set_supposed_aspect(pos, asp)
- end
- return asp
-end
-
--- Returns the "supported_aspects" of the signal at position, as returned by the nodedef.
--- returns nil when there's no signal at the position
-function advtrains.interlocking.signal_get_supported_aspects(pos)
- local node=advtrains.ndb.get_node(pos)
- local ndef=minetest.registered_nodes[node.name]
- if ndef and ndef.advtrains and ndef.advtrains.supported_aspects then
- local asp = ndef.advtrains.supported_aspects
- return asp
- end
- return nil
-end
-
local players_assign_ip = {}
local function ipmarker(ipos, connid)