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;

View source record →

📰 Research Paper
Loading…
⏳ Fetching content…