aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authororwell96 <orwell@bleipb.de>2021-02-10 18:27:09 +0100
committerorwell96 <orwell@bleipb.de>2021-02-10 18:27:09 +0100
commit96bb7d5e7edfde49f639f797ed71087d70470386 (patch)
treebfbd786b2a5e8449391770ca772144a281cc923d
parent0859e50c6ea514dd5329ecc12581e0b01d1c981e (diff)
downloadadvtrains-96bb7d5e7edfde49f639f797ed71087d70470386.tar.gz
advtrains-96bb7d5e7edfde49f639f797ed71087d70470386.tar.bz2
advtrains-96bb7d5e7edfde49f639f797ed71087d70470386.zip
LZB: don't look ahead past red signal
-rw-r--r--advtrains/lzb.lua16
1 files changed, 13 insertions, 3 deletions
diff --git a/advtrains/lzb.lua b/advtrains/lzb.lua
index 15d217e..f24ab4b 100644
--- a/advtrains/lzb.lua
+++ b/advtrains/lzb.lua
@@ -75,6 +75,12 @@ local function resolve_latest_lzbdata(ckp, index)
end
local function look_ahead(id, train)
+ local lzb = train.lzb
+ if lzb.zero_checkpoint then
+ -- if the checkpoints list contains a zero checkpoint, don't look ahead
+ -- in order to not trigger approach callbacks on the wrong path
+ return
+ end
local acc = advtrains.get_acceleration(train, 1)
-- worst-case: the starting point is maximum speed
@@ -88,7 +94,6 @@ local function look_ahead(id, train)
--local aware_i = advtrains.path_get_index_by_offset(train, brake_i, AWARE_ZONE)
- local lzb = train.lzb
local trav = lzb.trav_index
-- retrieve latest lzbdata
if not lzb.trav_lzbdata then
@@ -99,7 +104,7 @@ local function look_ahead(id, train)
--previous position was off track, do not scan any further
end
- while trav <= brake_i do
+ while trav <= brake_i and not lzb.zero_checkpoint do
local pos = advtrains.path_get(train, trav)
-- check offtrack
if trav - 1 == train.path_trk_f then
@@ -147,6 +152,11 @@ local function apply_checkpoint_to_path(train, checkpoint)
return
end
atprint("LZB: applying checkpoint: i=",checkpoint.index,"s=",checkpoint.speed)
+
+ if checkpoint.speed == 0 then
+ train.lzb.zero_checkpoint = true
+ end
+
-- make sure path exists until checkpoint
local pos = advtrains.path_get(train, checkpoint.index)
@@ -172,7 +182,6 @@ local function apply_checkpoint_to_path(train, checkpoint)
c_speed = math.sqrt( (c_speed * c_speed) - (2 * brake_accel * eldist) )
index = index - 1
end
-
end
--[[
@@ -209,6 +218,7 @@ function advtrains.lzb_invalidate_ahead(train, start_idx)
train.lzb.trav_lzbdata = nil
-- re-apply all checkpoints to path_speed
train.path_speed = {}
+ train.lzb.zero_checkpoint = false
for _,ckp in ipairs(train.lzb.checkpoints) do
apply_checkpoint_to_path(train, ckp)
end