From 036bace9e9fa48d15d7864d6506f654bb4c7b409 Mon Sep 17 00:00:00 2001 From: lawnjelly Date: Sat, 26 Feb 2022 11:36:27 +0000 Subject: [PATCH] BVH - Fix area-area collision regression Minimal approach to fixing regression whereby static areas where not detect dynamic areas. --- servers/physics/broad_phase_bvh.cpp | 4 ++-- servers/physics_2d/broad_phase_2d_bvh.cpp | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/servers/physics/broad_phase_bvh.cpp b/servers/physics/broad_phase_bvh.cpp index 9439ef14cfa..220d3e1f977 100644 --- a/servers/physics/broad_phase_bvh.cpp +++ b/servers/physics/broad_phase_bvh.cpp @@ -34,7 +34,7 @@ BroadPhaseSW::ID BroadPhaseBVH::create(CollisionObjectSW *p_object, int p_subindex, const AABB &p_aabb, bool p_static) { uint32_t tree_id = p_static ? TREE_STATIC : TREE_DYNAMIC; - uint32_t tree_collision_mask = p_static ? 0 : (TREE_FLAG_STATIC | TREE_FLAG_DYNAMIC); + uint32_t tree_collision_mask = p_static ? TREE_FLAG_DYNAMIC : (TREE_FLAG_STATIC | TREE_FLAG_DYNAMIC); ID oid = bvh.create(p_object, true, tree_id, tree_collision_mask, p_aabb, p_subindex); // Pair everything, don't care? return oid + 1; } @@ -49,7 +49,7 @@ void BroadPhaseBVH::recheck_pairs(ID p_id) { void BroadPhaseBVH::set_static(ID p_id, bool p_static) { uint32_t tree_id = p_static ? TREE_STATIC : TREE_DYNAMIC; - uint32_t tree_collision_mask = p_static ? 0 : (TREE_FLAG_STATIC | TREE_FLAG_DYNAMIC); + uint32_t tree_collision_mask = p_static ? TREE_FLAG_DYNAMIC : (TREE_FLAG_STATIC | TREE_FLAG_DYNAMIC); bvh.set_tree(p_id - 1, tree_id, tree_collision_mask, false); } diff --git a/servers/physics_2d/broad_phase_2d_bvh.cpp b/servers/physics_2d/broad_phase_2d_bvh.cpp index 431111a70ff..258bf6ee710 100644 --- a/servers/physics_2d/broad_phase_2d_bvh.cpp +++ b/servers/physics_2d/broad_phase_2d_bvh.cpp @@ -34,7 +34,7 @@ BroadPhase2DSW::ID BroadPhase2DBVH::create(CollisionObject2DSW *p_object, int p_subindex, const Rect2 &p_aabb, bool p_static) { uint32_t tree_id = p_static ? TREE_STATIC : TREE_DYNAMIC; - uint32_t tree_collision_mask = p_static ? 0 : (TREE_FLAG_STATIC | TREE_FLAG_DYNAMIC); + uint32_t tree_collision_mask = p_static ? TREE_FLAG_DYNAMIC : (TREE_FLAG_STATIC | TREE_FLAG_DYNAMIC); ID oid = bvh.create(p_object, true, tree_id, tree_collision_mask, p_aabb, p_subindex); // Pair everything, don't care? return oid + 1; } @@ -49,7 +49,7 @@ void BroadPhase2DBVH::recheck_pairs(ID p_id) { void BroadPhase2DBVH::set_static(ID p_id, bool p_static) { uint32_t tree_id = p_static ? TREE_STATIC : TREE_DYNAMIC; - uint32_t tree_collision_mask = p_static ? 0 : (TREE_FLAG_STATIC | TREE_FLAG_DYNAMIC); + uint32_t tree_collision_mask = p_static ? TREE_FLAG_DYNAMIC : (TREE_FLAG_STATIC | TREE_FLAG_DYNAMIC); bvh.set_tree(p_id - 1, tree_id, tree_collision_mask, false); }