1+ use std:: collections:: BTreeMap ;
12use ncollide2d:: math:: Point ;
23use nalgebra:: base:: Vector4 ;
34
@@ -7,13 +8,18 @@ pub struct Collider {
78}
89
910impl Collider {
10- pub fn get_hovered_objects < ' a > ( cache : & ' a TileCache , screen : & Screen , zoom : f32 , point : ( f32 , f32 ) ) -> Vec < Object > {
11+ pub fn get_hovered_objects < ' a > (
12+ visible_tiles : & ' a BTreeMap < TileId , VisibleTile > ,
13+ screen : & Screen ,
14+ zoom : f32 ,
15+ point : ( f32 , f32 )
16+ ) -> Vec < Object > {
1117 let mut return_objects = vec ! [ ] ;
1218 let tile_field = screen. get_tile_boundaries_for_zoom_level ( zoom, 1 ) ;
1319
1420 for tile_id in tile_field. iter ( ) {
15- if let Some ( tile ) = cache . try_get_tile ( & tile_id) {
16- let read_tile = tile . read ( ) . unwrap ( ) ;
21+ if let Some ( visible_tile ) = visible_tiles . get ( & tile_id) {
22+ let extent = visible_tile . extent ( ) as f32 ;
1723 let matrix = screen. tile_to_global_space (
1824 zoom,
1925 & tile_id
@@ -24,12 +30,12 @@ impl Collider {
2430 point. 1 / ( screen. height / 2 ) as f32 - 1.0
2531 ) ;
2632 let global_point = matrix * Vector4 :: new ( screen_point. x , screen_point. y , 0.0 , 1.0 ) ;
27- let tile_point = Point :: new ( global_point. x , global_point. y ) * read_tile . extent ( ) as f32 ;
33+ let tile_point = Point :: new ( global_point. x , global_point. y ) * extent;
2834
29- if tile_point. x >= 0.0 && tile_point. x <= read_tile . extent ( ) as f32
30- && tile_point. y >= 0.0 && tile_point. y <= read_tile . extent ( ) as f32 {
31- if let Ok ( collider) = read_tile . collider ( ) . try_read ( ) {
32- if let Ok ( objects) = read_tile . objects ( ) . try_read ( ) {
35+ if tile_point. x >= 0.0 && tile_point. x <= extent
36+ && tile_point. y >= 0.0 && tile_point. y <= extent {
37+ if let Ok ( collider) = visible_tile . collider ( ) . try_read ( ) {
38+ if let Ok ( objects) = visible_tile . objects ( ) . try_read ( ) {
3339 let object_ids = collider. get_hovered_objects ( & tile_point) ;
3440 for object_id in object_ids {
3541 return_objects. push ( objects[ object_id] . clone ( ) )
0 commit comments