INNER CODE UNIT · Rust
resolve_map
OpenGMK/OpenGMK · gm8decompiler/src/collision.rs:21
pub fn resolve_map(sprite: &Sprite) -> Option<GmkCollision> {
let maps = &sprite.colliders;
// Return None if empty
if sprite.frames.is_empty() || maps.is_empty() {
return None
}
// Return None if there are less colliders than there should be
let n_colliders = if sprite.per_frame_colliders { sprite.frames.len() } else { 1 };
if sprite.colliders.len() < n_colliders {
return None
}
// Each map has its own bounds, so we need to find out the outmost bounds
let left = maps.iter().min_by(|x, y| x.bbox_left.cmp(&y.bbox_left))?.bbox_left;
let right = maps.iter().max_by(|x, y| x.bbox_right.cmp(&y.bbox_right))?.bbox_right;
let bottom = maps.iter().max_by(|x, y| x.bbox_bottom.cmp(&y.bbox_bottom))?.bbox_bottom;
let top = maps.iter().min_by(|x, y| x.bbox_top.cmp(&y.bbox_top))?.bbox_top;