diff options
author | ywang <yw05@forksworld.de> | 2019-12-16 19:53:03 +0100 |
---|---|---|
committer | ywang <yw05@forksworld.de> | 2019-12-16 19:53:03 +0100 |
commit | a2da32b536646085fdbf0a4d0714d49171093726 (patch) | |
tree | 8b9caeb9e30234ac0bd7170faf67509e0f0a8b75 /advtrains/trainlogic.lua | |
parent | a404f83ebb6aa26b16e56debc2d6d86f52df680e (diff) | |
download | advtrains-a2da32b536646085fdbf0a4d0714d49171093726.tar.gz advtrains-a2da32b536646085fdbf0a4d0714d49171093726.tar.bz2 advtrains-a2da32b536646085fdbf0a4d0714d49171093726.zip |
Stable code
Diffstat (limited to 'advtrains/trainlogic.lua')
-rw-r--r-- | advtrains/trainlogic.lua | 27 |
1 files changed, 4 insertions, 23 deletions
diff --git a/advtrains/trainlogic.lua b/advtrains/trainlogic.lua index 441a11a..7999984 100644 --- a/advtrains/trainlogic.lua +++ b/advtrains/trainlogic.lua @@ -420,9 +420,9 @@ function advtrains.train_step_b(id, train, dtime) train.lever = tmp_lever --- 4a. Calculate movement --- - local lzbnxt = advtrains.lzb_get_next(train) - local lzblimit = advtrains.lzb_get_limit_by_entry(train, lzbnxt) - local lzbmap = advtrains.lzb_map_entry(train, lzbnxt) + local lzbnxt,lzblever = advtrains.lzb_get_next(train,dtime) + if lzblever and lzblever < tmp_lever then tmp_lever = lzblever train.ctrl.lzb = true + else train.ctrl.lzb = false end local a = advtrains.get_acceleration(train, tmp_lever) local v0 = train.velocity local v1 = a*dtime+v0 @@ -432,28 +432,9 @@ function advtrains.train_step_b(id, train, dtime) if a == 0 then s = v1*dtime else s = (v1*v1 - v0*v0)/2/a end - train.ctrl.lzb = nil - if lzblimit.velocity and lzblimit.lever < train.lever then - tmp_lever = lzblimit.lever - while (lzbmap[tmp_lever].t > dtime) do - tmp_lever = tmp_lever - 1 - end - train.ctrl.lzb = tmp_lever - a = advtrains.get_acceleration(train, tmp_lever) - v0 = lzbmap[tmp_lever].v - t = dtime - lzbmap[tmp_lever].t - v1 = a*t+v0 - v1 = math.min(v1, (train.max_speed or 10)) - v1 = math.max(v1, 0) - s = lzbmap[tmp_lever].i - train.index - if a == 0 then s = s + v1*t - else s = s + (v1*v1-v0*v0)/2/a - end - end -- FIX: calculate the average acceleration, as if it is static, to avoid -- weird wagon positions - -- Since v0 might have been changed, we should use train.velocity instead. - a = (v1 - train.velocity)/dtime + a = (v1 - v0)/dtime --- 4b. Move train and update train properties --- local pdist = train.path_dist[math.floor(train.index)] or 1 local distance = pdist == 0 and s or s / pdist |