Skip to content

Commit

Permalink
Enable collide_with_objects for falling entities
Browse files Browse the repository at this point in the history
falling nodes intentionally still fall through players
fixes #5313
  • Loading branch information
sfan5 committed May 6, 2020
1 parent 723926a commit e8e5d28
Showing 1 changed file with 21 additions and 2 deletions.
23 changes: 21 additions & 2 deletions builtin/game/falling.lua
Expand Up @@ -43,7 +43,7 @@ core.register_entity(":__builtin:falling_node", {
textures = {},
physical = true,
is_visible = false,
collide_with_objects = false,
collide_with_objects = true,
collisionbox = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
},

Expand Down Expand Up @@ -272,9 +272,14 @@ core.register_entity(":__builtin:falling_node", {
end

local bcp, bcn
local player_collision
if moveresult.touching_ground then
for _, info in ipairs(moveresult.collisions) do
if info.axis == "y" then
if info.type == "object" then
if info.axis == "y" and info.object:is_player() then
player_collision = info
end
elseif info.axis == "y" then
bcp = info.node_pos
bcn = core.get_node(bcp)
break
Expand All @@ -284,6 +289,20 @@ core.register_entity(":__builtin:falling_node", {

if not bcp then
-- We're colliding with something, but not the ground. Irrelevant to us.
if player_collision then
-- Continue falling through players by moving a little into
-- their collision box
-- TODO: this hack could be avoided in the future if objects
-- could choose who to collide with
local vel = self.object:get_velocity()
self.object:set_velocity({
x = vel.x,
y = player_collision.old_velocity.y,
z = vel.z
})
self.object:set_pos(vector.add(self.object:get_pos(),
{x = 0, y = -0.2, z = 0}))
end
return
elseif bcn.name == "ignore" then
-- Delete on contact with ignore at world edges
Expand Down

0 comments on commit e8e5d28

Please sign in to comment.