Add global slowdown factor instead of hard dtime limiting

master
orwell96 2021-01-02 19:56:12 +01:00
parent 4f7c1b1b5d
commit 0cef88ba7f
2 changed files with 21 additions and 4 deletions

View File

@ -47,6 +47,10 @@ advtrains.IGNORE_WORLD = true
local NO_SAVE = true
-- Do not save any data to advtrains save files
-- Use a global slowdown factor to slow down train movements.
local USE_SLOWDOWN = false
local DTIME_LIMIT = 0.3
-- ==========================================================================
@ -563,7 +567,7 @@ local init_load=false
local save_interval=60
local save_timer=save_interval
advtrains.mainloop_runcnt=0
advtrains.global_slowdown = 1
local t = 0
minetest.register_globalstep(function(dtime_mt)
@ -579,7 +583,7 @@ minetest.register_globalstep(function(dtime_mt)
advtrains.load()
end
local dtime = dtime_mt
local dtime = dtime_mt * advtrains.global_slowdown
if GENERATE_ATRICIFIAL_LAG then
dtime = HOW_MANY_LAG
if os.clock()<t then
@ -588,6 +592,19 @@ minetest.register_globalstep(function(dtime_mt)
t = os.clock()+HOW_MANY_LAG
end
-- if dtime is too high, decrease global slowdown
if USE_SLOWDOWN then
if dtime > DTIME_LIMIT then
if advtrains.global_slowdown > 0.1 then
advtrains.global_slowdown = advtrains.global_slowdown - 0.05
else
advtrains.global_slowdown = advtrains.global_slowdown / 2
end
dtime = DTIME_LIMIT
end
end
-- recover global slowdown slowly over time
advtrains.global_slowdown = math.min(advtrains.global_slowdown*1.02, 1)
advtrains.mainloop_trainlogic(dtime,advtrains.mainloop_runcnt)
if advtrains_itm_mainloop then

View File

@ -495,8 +495,8 @@ function wagon:on_step(dtime)
end
--FIX: use index of the wagon, not of the train.
local velocity = train.velocity
local acceleration = (train.acceleration or 0)
local velocity = train.velocity * advtrains.global_slowdown
local acceleration = (train.acceleration or 0) * (advtrains.global_slowdown*advtrains.global_slowdown)
local velocityvec = vector.multiply(vdir, velocity)
local accelerationvec = vector.multiply(vdir, acceleration)