From 535729a548645800f468560074f3b813b4d9c9d8 Mon Sep 17 00:00:00 2001 From: teknomunk Date: Wed, 30 Oct 2024 07:47:42 -0500 Subject: [PATCH] Fix friction on slopes, fix cart reversal when timestep is very small or zero --- mods/ENTITIES/mcl_minecarts/movement.lua | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/mods/ENTITIES/mcl_minecarts/movement.lua b/mods/ENTITIES/mcl_minecarts/movement.lua index b6ee1f12f..fc9b4279b 100644 --- a/mods/ENTITIES/mcl_minecarts/movement.lua +++ b/mods/ENTITIES/mcl_minecarts/movement.lua @@ -7,7 +7,7 @@ local submod = {} -- Constants local mcl_debug,DEBUG = mcl_util.make_mcl_logger("mcl_logging_minecart_debug", "Minecart Debug") --DEBUG = false ---mcl_debug = function(msg) print(msg) end +--mcl_debug,DEBUG = function(msg) print(msg) end,true -- Imports local env_physics @@ -362,6 +362,9 @@ local function do_movement_step(staticdata, dtime) -- Would stop or reverse direction inside this block, calculate time to v_1 = 0 timestep = -v_0 / a stops_in_block = true + if timestep <= 0.01 then + reverse_direction(staticdata) + end elseif a ~= 0 then -- Setting x_1 = x_0 + remaining_in_block, and solving for t gives: timestep = ( math.sqrt( v_0 * v_0 + 2 * a * remaining_in_block) - v_0 ) / a @@ -387,7 +390,7 @@ local function do_movement_step(staticdata, dtime) local v_1 = v_0 + a * timestep if v_1 > v_max then v_1 = v_max - elseif v_1 < FRICTION / 5 then + elseif v_1 < 0.025 then v_1 = 0 end @@ -398,7 +401,7 @@ local function do_movement_step(staticdata, dtime) staticdata.velocity = v_1 staticdata.distance = x_1 - if DEBUG and (1==0) and ( v_0 > 0 or a ~= 0 ) then + if DEBUG and ( v_0 > 0 or a ~= 0 ) then mcl_debug( "- cart #"..tostring(staticdata.uuid).. ": a="..tostring(a).. ",v_0="..tostring(v_0)..