Train-World collisions: Collide only with 'normal'-drawtype nodes.

As per discussion on the forum (https://forum.minetest.net/viewtopic.php?p=396745#p396745), changes the train-world collision logic to make trains only collide with nodes that are solid cubes.
This allows for more creative freedom, but shifts the responsibility of building realistic railways to the players.

In the future, a more sophisticated environment collision system might be invented, but this is low-priority and should be optional to save CPU.
master
orwell96 2021-06-29 16:12:29 +02:00
parent 0efe7ef1f3
commit 9b0ec771d7
1 changed files with 8 additions and 35 deletions

View File

@ -1369,43 +1369,16 @@ end
--not blocking trains group --not blocking trains group
function advtrains.train_collides(node) function advtrains.train_collides(node)
if node and minetest.registered_nodes[node.name] and minetest.registered_nodes[node.name].walkable then if node and minetest.registered_nodes[node.name] then
if not minetest.registered_nodes[node.name].groups.not_blocking_trains then local ndef = minetest.registered_nodes[node.name]
-- if the node is drawtype normal (that is a full cube) then it does collide
if ndef.drawtype == "normal" then
-- except if it is not_blocking_trains
if ndef.groups.not_blocking_trains and ndef.groups.not_blocking_trains ~= 0 then
return false
end
return true return true
end end
end end
return false return false
end end
local nonblocknodes={
"default:fence_wood",
"default:fence_acacia_wood",
"default:fence_aspen_wood",
"default:fence_pine_wood",
"default:fence_junglewood",
"default:torch",
"bones:bones",
"default:sign_wall",
"signs:sign_wall",
"signs:sign_wall_blue",
"signs:sign_wall_brown",
"signs:sign_wall_orange",
"signs:sign_wall_green",
"signs:sign_yard",
"signs:sign_wall_white_black",
"signs:sign_wall_red",
"signs:sign_wall_white_red",
"signs:sign_wall_yellow",
"signs:sign_post",
"signs:sign_hanging",
}
minetest.after(0, function()
for _,name in ipairs(nonblocknodes) do
if minetest.registered_nodes[name] then
minetest.registered_nodes[name].groups.not_blocking_trains=1
end
end
end)