1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
use super::*;
use core::cmp::Ordering;
#[must_use]
pub fn is_sorted_by<I, F>(arr: &[I], mut compare: F) -> bool
where
F: FnMut(&I, &I) -> Option<Ordering>,
{
arr.windows(2)
.all(|w| compare(&w[1], &w[0]).unwrap() != Ordering::Less)
}
#[inline(always)]
#[must_use]
pub fn compare_bots<T: Aabb>(axis: impl Axis, a: &T, b: &T) -> core::cmp::Ordering {
let (p1, p2) = (a.get().get_range(axis).start, b.get().get_range(axis).start);
if p1 > p2 {
core::cmp::Ordering::Greater
} else {
core::cmp::Ordering::Less
}
}
#[inline(always)]
pub fn sweeper_update<I: Aabb, A: Axis>(axis: A, collision_botids: &mut [I]) {
let sclosure = |a: &I, b: &I| -> core::cmp::Ordering { compare_bots(axis, a, b) };
collision_botids.sort_unstable_by(sclosure);
}