From 8427d072f03780c819521cd593ac72b772a34a33 Mon Sep 17 00:00:00 2001 From: teknomunk Date: Wed, 10 Apr 2024 09:03:59 +0000 Subject: [PATCH] Fix cart controls, cart pushing --- mods/ENTITIES/mcl_minecarts/carts.lua | 7 +++++-- mods/ENTITIES/mcl_minecarts/movement.lua | 13 +++++++------ 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/mods/ENTITIES/mcl_minecarts/carts.lua b/mods/ENTITIES/mcl_minecarts/carts.lua index 00ee39356..dce5124d3 100644 --- a/mods/ENTITIES/mcl_minecarts/carts.lua +++ b/mods/ENTITIES/mcl_minecarts/carts.lua @@ -229,8 +229,11 @@ function DEFAULT_CART_DEF:on_step(dtime) end -- Experimental controls - self._go_forward = ctrl.up - self._brake = ctrl.down + local now_time = minetest.get_gametime() + local controls = {} + if ctrl.up then controls.forward = now_time end + if ctrl.down then controls.brake = now_time end + staticdata.controls = controls end -- Give achievement when player reached a distance of 1000 nodes from the start position diff --git a/mods/ENTITIES/mcl_minecarts/movement.lua b/mods/ENTITIES/mcl_minecarts/movement.lua index 13f881187..a0b053a2a 100644 --- a/mods/ENTITIES/mcl_minecarts/movement.lua +++ b/mods/ENTITIES/mcl_minecarts/movement.lua @@ -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 if player_repel(obj) then - return obj:get_pos() - self.object:get_pos() + return obj:get_pos() - cart_pos end end @@ -202,7 +202,7 @@ local function vector_away_from_players(cart, staticdata) end 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 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 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 - elseif ctrl.brake then + elseif (ctrl.brake or 0) > time_active then acceleration = -1.5 elseif (staticdata.fueltime or 0) > 0 and staticdata.velocity <= 4 then acceleration = 0.6 @@ -285,11 +286,11 @@ local function do_movement_step(staticdata, dtime) local v_0 = staticdata.velocity -- Repel minecarts - local away = direction_away_from_players(nil, staticdata) + local away = direction_away_from_players(staticdata) if away > 0 then v_0 = away elseif away < 0 then - reverse_direction(self, staticdata) + reverse_direction(staticdata) v_0 = -away end