diff --git a/crates/bevy_sprite/src/tilemap_chunk/mod.rs b/crates/bevy_sprite/src/tilemap_chunk/mod.rs index 174816154bc6e..39471368736cd 100644 --- a/crates/bevy_sprite/src/tilemap_chunk/mod.rs +++ b/crates/bevy_sprite/src/tilemap_chunk/mod.rs @@ -91,8 +91,8 @@ fn on_insert_tilemap_chunk(mut world: DeferredWorld, HookContext { entity, .. }: "Invalid indices length for tilemap chunk {} of size {}. Expected {}, got {}", entity, chunk_size, + expected_indices_length, indices.len(), - expected_indices_length ); return; } diff --git a/examples/2d/tilemap_chunk.rs b/examples/2d/tilemap_chunk.rs index 8663b036b1574..796ce8757f11a 100644 --- a/examples/2d/tilemap_chunk.rs +++ b/examples/2d/tilemap_chunk.rs @@ -28,21 +28,32 @@ fn setup(mut commands: Commands, assets: Res) { let chunk_size = UVec2::splat(64); let tile_display_size = UVec2::splat(8); - let indices: Vec> = (0..chunk_size.element_product()) - .map(|_| rng.gen_range(0..5)) - .map(|i| if i == 0 { None } else { Some(i - 1) }) - .collect(); - commands.spawn(( - TilemapChunk { - chunk_size, - tile_display_size, - tileset: assets.load("textures/array_texture.png"), - ..default() - }, - TilemapChunkIndices(indices), - UpdateTimer(Timer::from_seconds(0.1, TimerMode::Repeating)), - )); + let tileset = assets.load("textures/array_texture.png"); + + for x in 0..2 { + for y in 0..2 { + let indices: Vec> = (0..chunk_size.element_product()) + .map(|_| rng.gen_range(0..5)) + .map(|i| if i == 0 { None } else { Some(i - 1) }) + .collect(); + commands.spawn(( + TilemapChunk { + chunk_size, + tile_display_size, + tileset: tileset.clone(), + ..default() + }, + TilemapChunkIndices(indices), + Transform::from_translation(Vec3::new( + x as f32 * 512.0 - 256.0, + y as f32 * 512.0 - 256.0, + 0.0, + )), + UpdateTimer(Timer::from_seconds(0.1, TimerMode::Repeating)), + )); + } + } commands.spawn(Camera2d); @@ -50,15 +61,19 @@ fn setup(mut commands: Commands, assets: Res) { } fn update_tileset_image( - chunk_query: Single<&TilemapChunk>, + chunk_query: Query<&TilemapChunk>, mut events: EventReader>, mut images: ResMut>, ) { - let chunk = *chunk_query; for event in events.read() { - if event.is_loaded_with_dependencies(chunk.tileset.id()) { - let image = images.get_mut(&chunk.tileset).unwrap(); - image.reinterpret_stacked_2d_as_array(4); + if let AssetEvent::LoadedWithDependencies { id } = event { + for chunk in chunk_query.iter() { + if chunk.tileset.id() == *id { + let image = images.get_mut(&chunk.tileset).unwrap(); + image.reinterpret_stacked_2d_as_array(4); + break; + } + } } } }