mirror of
https://git.minetest.land/VoxeLibre/VoxeLibre.git
synced 2024-11-28 05:21:05 +01:00
Fix cart controls, cart pushing
This commit is contained in:
parent
581dcd7b3f
commit
5c351ae258
2 changed files with 12 additions and 8 deletions
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue