[][src]Module dinotree_alg::collectable

A verion of dinotree where the user can collect and store queries to use later.

Examples


use dinotree_alg::*;
use axgeom::{vec2,Rect,Vec2};

struct Bot{
    pos:Vec2<isize>,
    inner:isize    
}

let radius=3;
let mut bots = [Bot{pos:vec2(4isize,8),inner:0isize},Bot{pos:vec2(4isize,6),inner:0}];

//Create a collectable dinotree.
let mut tree = collectable::CollectableDinoTree::new(&mut bots,|r|{
     Rect::from_point(r.pos,vec2(radius,radius))    
});

//Collect all intersections so we can iterate through them later
let mut intersections=tree.collect_intersections_list(|a,b|{
     a.inner+=1;
     b.inner+=2;
     Some(1) 
});

//We can perform other queries while we have the intersections stored from earlier
tree.get_mut().for_all_in_rect_mut(&axgeom::rect(0,10,0,10),|a|{
    a.inner+=10;  
});


for _ in 0..3{
     //Query all other intersections
     intersections.for_every_pair_mut(&mut tree,|a,b,d|{
         a.inner+=*d;
         b.inner+=*d;
     });
}

assert_eq!(bots[0].inner,5);
assert_eq!(bots[1].inner,17);

Structs

BotCollision
BotCollisionPar
CollectableDinoTree
SingleCollisionList