From 6d687de9b84f85c87846e6a48b81b1c495bb926b Mon Sep 17 00:00:00 2001 From: lawnjelly Date: Thu, 24 Dec 2020 10:59:57 +0000 Subject: Fix BVH to world_aabb, and call update The calls to the BVH need to use the world space AABB, rather than local space for it to work. Also, update was not being called which is required to update the AABB as objects move. --- core/math/dynamic_bvh.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'core') diff --git a/core/math/dynamic_bvh.cpp b/core/math/dynamic_bvh.cpp index 5f87f75b61..a53f8d1eb8 100644 --- a/core/math/dynamic_bvh.cpp +++ b/core/math/dynamic_bvh.cpp @@ -354,10 +354,17 @@ void DynamicBVH::_update(Node *leaf, int lookahead) { void DynamicBVH::update(const ID &p_id, const AABB &p_box) { ERR_FAIL_COND(!p_id.is_valid()); Node *leaf = p_id.node; - Node *base = _remove_leaf(leaf); + Volume volume; volume.min = p_box.position; volume.max = p_box.position + p_box.size; + + if ((leaf->volume.min == volume.min) && (leaf->volume.max == volume.max)) { + // noop + return; + } + + Node *base = _remove_leaf(leaf); if (base) { if (lkhd >= 0) { for (int i = 0; (i < lkhd) && base->parent; ++i) { -- cgit v1.2.3