Add global slowdown factor instead of hard dtime limiting
parent
4f7c1b1b5d
commit
0cef88ba7f
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
Loading…
Reference in New Issue