Fix cart controls, cart pushing

This commit is contained in:
teknomunk 2024-04-10 09:03:59 +00:00
parent a95923ad18
commit 8427d072f0
2 changed files with 12 additions and 8 deletions

View File

@ -229,8 +229,11 @@ function DEFAULT_CART_DEF:on_step(dtime)
end end
-- Experimental controls -- Experimental controls
self._go_forward = ctrl.up local now_time = minetest.get_gametime()
self._brake = ctrl.down local controls = {}
if ctrl.up then controls.forward = now_time end
if ctrl.down then controls.brake = now_time end
staticdata.controls = controls
end end
-- Give achievement when player reached a distance of 1000 nodes from the start position -- Give achievement when player reached a distance of 1000 nodes from the start position

View File

@ -194,7 +194,7 @@ local function vector_away_from_players(cart, staticdata)
for _,obj in pairs(minetest.get_objects_inside_radius(cart_pos, 1.1)) do for _,obj in pairs(minetest.get_objects_inside_radius(cart_pos, 1.1)) do
if player_repel(obj) then if player_repel(obj) then
return obj:get_pos() - self.object:get_pos() return obj:get_pos() - cart_pos
end end
end end
@ -202,7 +202,7 @@ local function vector_away_from_players(cart, staticdata)
end end
local function direction_away_from_players(staticdata) local function direction_away_from_players(staticdata)
local diff = vector_away_from_players(staticdata) local diff = vector_away_from_players(nil,staticdata)
if not diff then return 0 end if not diff then return 0 end
local length = vector.distance(vector.new(0,0,0),diff) local length = vector.distance(vector.new(0,0,0),diff)
@ -242,10 +242,11 @@ local function calculate_acceleration(staticdata)
local max_vel = mcl_minecarts.speed_max local max_vel = mcl_minecarts.speed_max
local ctrl = staticdata.controls or {} local ctrl = staticdata.controls or {}
local time_active = minetest.get_gametime() - 0.25
if ctrl.go_forward then if (ctrl.forward or 0) > time_active then
acceleration = 4 acceleration = 4
elseif ctrl.brake then elseif (ctrl.brake or 0) > time_active then
acceleration = -1.5 acceleration = -1.5
elseif (staticdata.fueltime or 0) > 0 and staticdata.velocity <= 4 then elseif (staticdata.fueltime or 0) > 0 and staticdata.velocity <= 4 then
acceleration = 0.6 acceleration = 0.6
@ -285,11 +286,11 @@ local function do_movement_step(staticdata, dtime)
local v_0 = staticdata.velocity local v_0 = staticdata.velocity
-- Repel minecarts -- Repel minecarts
local away = direction_away_from_players(nil, staticdata) local away = direction_away_from_players(staticdata)
if away > 0 then if away > 0 then
v_0 = away v_0 = away
elseif away < 0 then elseif away < 0 then
reverse_direction(self, staticdata) reverse_direction(staticdata)
v_0 = -away v_0 = -away
end end