diff options
| author | stujones11 <stujones111@gmail.com> | 2016-01-29 19:56:16 +0000 | 
|---|---|---|
| committer | stujones11 <stujones111@gmail.com> | 2016-01-29 20:11:53 +0000 | 
| commit | 99f5ffddfb603068249d1ac0b9682d8531213842 (patch) | |
| tree | d2fe5d1da0c4a2661551b7abfaefd58fcf2e7065 | |
| parent | 7c967dc6de05975a933576ccf82dbabfd7cb3eb7 (diff) | |
Prevent carts from travelling through nodes
| -rw-r--r-- | railcart/railcart.lua | 18 | ||||
| -rw-r--r-- | railtrack/railtrack.lua | 2 | 
2 files changed, 14 insertions, 6 deletions
| diff --git a/railcart/railcart.lua b/railcart/railcart.lua index 8f89649..6a3a22b 100644 --- a/railcart/railcart.lua +++ b/railcart/railcart.lua @@ -135,6 +135,9 @@ function railcart:get_rail_direction(pos)  		end  	end  	if target then +		if #cons == 1 then +			target.y = pos.y +		end  		return railtrack:get_direction(target, pos)  	end  	return {x=0, y=0, z=0} @@ -283,11 +286,7 @@ function railcart:update(cart, time, object)  	end  	local speed = railcart:velocity_to_speed(cart.vel)  	if cart.target then -		if vector.equals(cart.target, cart.pos) then -			cart.dir = railcart:get_rail_direction(cart.pos) -		else -			cart.dir = railtrack:get_direction(cart.target, cart.pos) -		end +		cart.dir = railtrack:get_direction(cart.target, cart.pos)  	else  		speed = 0  	end @@ -300,6 +299,14 @@ function railcart:update(cart, time, object)  				blocked = true  			end  		end +		local p1 = vector.add(cart.pos, {x=0, y=1, z=0}) +		local p2 = vector.add(cart.target, {x=0, y=1, z=0}) +		local los, bp = minetest.line_of_sight(p1, p2) +		if los == false then +			bp.y = bp.y - 1 +			cart.target = vector.subtract(bp, cart.dir) +			blocked = true +		end  		local d1 = railtrack:get_distance(cart.prev, cart.target)  		local d2 = railtrack:get_distance(cart.prev, cart.pos)  		local dist = d1 - d2 @@ -344,6 +351,7 @@ function railcart:update(cart, time, object)  			end  		end  	else +		cart.dir = railcart:get_rail_direction(cart.pos)  		cart.vel = {x=0, y=0, z=0}  		cart.acc = {x=0, y=0, z=0}  	end diff --git a/railtrack/railtrack.lua b/railtrack/railtrack.lua index a72898f..75a62a6 100644 --- a/railtrack/railtrack.lua +++ b/railtrack/railtrack.lua @@ -192,7 +192,7 @@ end  function railtrack:get_connections(pos)  	local connections = {} -	for y = -1, 1 do +	for y = 1, -1, -1 do  		for x = -1, 1 do  			for z = -1, 1 do  				if math.abs(x) ~= math.abs(z) then | 
