aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authororwell96 <orwell@bleipb.de>2019-11-06 22:07:10 +0100
committerorwell96 <orwell@bleipb.de>2019-11-06 22:07:10 +0100
commit8c55442076c9d5cfed89bac3f4acd22ea7948dd3 (patch)
tree170bd44fdd0c015b9995e0cdb483e5f270433af4
parent43b4d863ec379f5b2639194b929a45fd3a18be78 (diff)
downloadadvtrains-8c55442076c9d5cfed89bac3f4acd22ea7948dd3.tar.gz
advtrains-8c55442076c9d5cfed89bac3f4acd22ea7948dd3.tar.bz2
advtrains-8c55442076c9d5cfed89bac3f4acd22ea7948dd3.zip
Add "discard all" function to scheduler events and use it to clear schedules in luaatc rails
-rw-r--r--advtrains_line_automation/scheduler.lua11
-rw-r--r--advtrains_luaautomation/active_common.lua5
2 files changed, 16 insertions, 0 deletions
diff --git a/advtrains_line_automation/scheduler.lua b/advtrains_line_automation/scheduler.lua
index b641597..3d8778a 100644
--- a/advtrains_line_automation/scheduler.lua
+++ b/advtrains_line_automation/scheduler.lua
@@ -116,4 +116,15 @@ function sched.enqueue_in(rwtime, handler, evtdata, unitid, unitlim)
sched.enqueue(ctime + rwtime, handler, evtdata, unitid, unitlim)
end
+-- Discards all schedules for unit "unitid" (removes them from the queue)
+function sched.discard_all(unitid)
+ for i=1,#queue do
+ if queue[i].u == unitid then
+ table.remove(queue,i)
+ i=i-1
+ end
+ end
+ units_cnt[unitid] = 0
+end
+
ln.sched = sched
diff --git a/advtrains_luaautomation/active_common.lua b/advtrains_luaautomation/active_common.lua
index 8d0975f..3dc018d 100644
--- a/advtrains_luaautomation/active_common.lua
+++ b/advtrains_luaautomation/active_common.lua
@@ -71,7 +71,12 @@ function ac.on_receive_fields(pos, formname, fields, player)
nodetbl.code=fields.code
end
if fields.save then
+ -- reset certain things
nodetbl.err=nil
+ if advtrains.lines and advtrains.lines.sched then
+ -- discard all schedules for this node
+ advtrains.lines.sched.discard_all(advtrains.encode_pos(pos))
+ end
end
if fields.cle then
nodetbl.data={}