Calculate acceleration of trains based on average of acceleration for all carts in the train, make velocity not change on slopes and 45 degree track

This commit is contained in:
teknomunk 2024-09-12 08:28:34 -05:00
parent 53e94e1c38
commit 57bce03a33
2 changed files with 20 additions and 3 deletions

View File

@ -305,8 +305,23 @@ local function do_movement_step(staticdata, dtime)
-- Calculate timestep remaiing in this block -- Calculate timestep remaiing in this block
local x_0 = staticdata.distance or 0 local x_0 = staticdata.distance or 0
local remaining_in_block = 1 - x_0 local remaining_in_block = 1 - x_0
local a = calculate_acceleration(staticdata)
-- Calculate acceleration
local v_0 = staticdata.velocity local v_0 = staticdata.velocity
local a = 0
if staticdata.ahead or staticdata.behind then
-- Calculate acceleration of the entire train
local count = 0
for cart in mod.train_cars(staticdata) do
count = count + 1
if cart.behind then
a = a + calculate_acceleration(cart)
end
end
a = a / count
else
a = calculate_acceleration(staticdata)
end
-- Repel minecarts -- Repel minecarts
local away = direction_away_from_players(staticdata) local away = direction_away_from_players(staticdata)
@ -370,7 +385,7 @@ local function do_movement_step(staticdata, dtime)
end end
-- Calculate x_1 -- Calculate x_1
local x_1 = x_0 + timestep * v_0 + 0.5 * a * timestep * timestep local x_1 = x_0 + (timestep * v_0 + 0.5 * a * timestep * timestep) / vector.length(staticdata.dir)
-- Update position and velocity of the minecart -- Update position and velocity of the minecart
staticdata.velocity = v_1 staticdata.velocity = v_1

View File

@ -20,7 +20,7 @@ local function find_back(start)
end end
-- Iterate across all the cars in a train -- Iterate across all the cars in a train
local function train_cars(staticdata) function mod.train_cars(staticdata)
assert(staticdata) assert(staticdata)
local back = find_back(staticdata) local back = find_back(staticdata)
@ -38,6 +38,8 @@ local function train_cars(staticdata)
return ret return ret
end end
end end
local train_cars = mod.train_cars
function mod.train_length(cart) function mod.train_length(cart)
local count = 0 local count = 0
for cart in train_cars(cart) do for cart in train_cars(cart) do