aboutsummaryrefslogtreecommitdiff
path: root/advtrains
diff options
context:
space:
mode:
Diffstat (limited to 'advtrains')
-rw-r--r--advtrains/init.lua21
-rw-r--r--advtrains/wagons.lua4
2 files changed, 21 insertions, 4 deletions
diff --git a/advtrains/init.lua b/advtrains/init.lua
index 7d400dc..a6cd2f0 100644
--- a/advtrains/init.lua
+++ b/advtrains/init.lua
@@ -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
diff --git a/advtrains/wagons.lua b/advtrains/wagons.lua
index 7b6a381..38d81db 100644
--- a/advtrains/wagons.lua
+++ b/advtrains/wagons.lua
@@ -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)