Skip to content

Commit efb0f19

Browse files
authored
fix(bvh-region): get_closest on empty bvh (#829)
Previously, the code would panic when calling get_closest on an empty bvh. One way to trigger this is to use the /spawn command and then leave the game. This fix makes it return None with an empty bvh.
1 parent 57f5652 commit efb0f19

File tree

2 files changed

+14
-2
lines changed

2 files changed

+14
-2
lines changed

crates/bvh-region/src/query/closest.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,15 +59,17 @@ impl<T: Debug> Bvh<T> {
5959
}));
6060
}
6161
Node::Leaf(leaf) => {
62-
let (elem, dist2) = leaf
62+
let Some((elem, dist2)) = leaf
6363
.iter()
6464
.map(|elem| {
6565
let aabb = get_aabb(elem);
6666
let dist2 = aabb.dist2(target);
6767
(elem, dist2)
6868
})
6969
.min_by_key(|(_, dist)| dist.to_bits())
70-
.unwrap();
70+
else {
71+
continue;
72+
};
7173

7274
if dist2 < min_dist2 {
7375
min_dist2 = dist2;

crates/bvh-region/tests/simple.rs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,16 @@ fn simple() {
114114
assert_relative_eq!(dist2, 0.0);
115115
}
116116

117+
#[test]
118+
fn test_empty_get_closest() {
119+
let elements = vec![];
120+
121+
let target = Vec3::new(0.0, 0.0, 0.0);
122+
let bvh = Bvh::build(elements, copied);
123+
124+
assert_eq!(bvh.get_closest(target, copied), None);
125+
}
126+
117127
proptest! {
118128
#[test]
119129
fn test_get_closest_correctness(

0 commit comments

Comments
 (0)