maplibre/render/systems/
tile_view_pattern_system.rs1use crate::{
4 context::MapContext,
5 render::{
6 eventually::{Eventually, Eventually::Initialized},
7 tile_view_pattern::{ViewTileSources, WgpuTileViewPattern, DEFAULT_TILE_SIZE},
8 view_state::ViewStatePadding,
9 },
10 tcs::system::{SystemError, SystemResult},
11};
12
13pub fn tile_view_pattern_system(
14 MapContext {
15 view_state, world, ..
16 }: &mut MapContext,
17) -> SystemResult {
18 let Some((Initialized(tile_view_pattern), view_tile_sources)) = world
19 .resources
20 .query::<(&Eventually<WgpuTileViewPattern>, &ViewTileSources)>()
21 else {
22 return Err(SystemError::Dependencies);
23 };
24
25 let view_region = view_state.create_view_region(
27 view_state.zoom().zoom_level(DEFAULT_TILE_SIZE),
28 ViewStatePadding::Tight,
29 );
30
31 if let Some(view_region) = &view_region {
32 let zoom = view_state.zoom();
33
34 let view_tiles =
35 tile_view_pattern.generate_pattern(view_region, view_tile_sources, zoom, world);
36
37 let Some(Initialized(tile_view_pattern)) = world
39 .resources
40 .query_mut::<&mut Eventually<WgpuTileViewPattern>>()
41 else {
42 return Err(SystemError::Dependencies);
43 };
44
45 log::trace!("Tiles in view: {}", view_tiles.len());
46
47 tile_view_pattern.update_pattern(view_tiles);
48 }
49
50 Ok(())
51}