From f317d06b1742f954937448535414651d1bc32644 Mon Sep 17 00:00:00 2001 From: s33n Date: Fri, 2 Feb 2024 10:39:02 -0800 Subject: [PATCH 1/5] fixed removal_helper to only remove existing entities --- src/render/mod.rs | 34 +++++++++++++++++++++++++--------- 1 file changed, 25 insertions(+), 9 deletions(-) diff --git a/src/render/mod.rs b/src/render/mod.rs index 1f50d180..aea9aff0 100644 --- a/src/render/mod.rs +++ b/src/render/mod.rs @@ -116,7 +116,7 @@ impl Plugin for TilemapRenderingPlugin { app.add_systems(Update, set_texture_to_copy_src); app.add_systems(First, clear_removed); - app.add_systems(PostUpdate, (removal_helper_tilemap, removal_helper)); + app.add_systems(PostUpdate, removal_helper); app.add_plugins(MaterialTilemapPlugin::::default()); @@ -306,17 +306,33 @@ pub struct RemovedTileEntity(pub Entity); #[derive(Component)] pub struct RemovedMapEntity(pub Entity); -fn removal_helper(mut commands: Commands, mut removed_query: RemovedComponents) { - for entity in removed_query.read() { +// fn removal_helper(mut commands: Commands, mut removed_query: RemovedComponents) { +// for entity in removed_query.read() { +// commands.spawn(RemovedTileEntity(entity)); +// } +// } +// +// fn removal_helper_tilemap( +// mut commands: Commands, +// mut removed_query: RemovedComponents, +// ) { +// for entity in removed_query.read() { +// commands.spawn(RemovedMapEntity(entity)); +// } +// } + +fn removal_helper(mut commands: Commands, mut set: ParamSet<(&World, RemovedComponents, RemovedComponents)>) { + let tiles: Vec = set.p1().read().collect(); + let maps: Vec = set.p2().read().collect(); + + let world = set.p0(); + let entities = world.entities(); + + for entity in tiles.into_iter().filter(|entity| entities.contains(*entity)) { commands.spawn(RemovedTileEntity(entity)); } -} -fn removal_helper_tilemap( - mut commands: Commands, - mut removed_query: RemovedComponents, -) { - for entity in removed_query.read() { + for entity in maps.into_iter().filter(|entity| entities.contains(*entity)) { commands.spawn(RemovedMapEntity(entity)); } } From 2928c94e8f4d3667e8070b7d306843889d812760 Mon Sep 17 00:00:00 2001 From: s33n Date: Fri, 2 Feb 2024 10:40:21 -0800 Subject: [PATCH 2/5] removed old commented-out code --- src/render/mod.rs | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/src/render/mod.rs b/src/render/mod.rs index aea9aff0..601162a7 100644 --- a/src/render/mod.rs +++ b/src/render/mod.rs @@ -306,21 +306,6 @@ pub struct RemovedTileEntity(pub Entity); #[derive(Component)] pub struct RemovedMapEntity(pub Entity); -// fn removal_helper(mut commands: Commands, mut removed_query: RemovedComponents) { -// for entity in removed_query.read() { -// commands.spawn(RemovedTileEntity(entity)); -// } -// } -// -// fn removal_helper_tilemap( -// mut commands: Commands, -// mut removed_query: RemovedComponents, -// ) { -// for entity in removed_query.read() { -// commands.spawn(RemovedMapEntity(entity)); -// } -// } - fn removal_helper(mut commands: Commands, mut set: ParamSet<(&World, RemovedComponents, RemovedComponents)>) { let tiles: Vec = set.p1().read().collect(); let maps: Vec = set.p2().read().collect(); From c312e977f68fc7e8c52e5c98ff7a2ad3696dc378 Mon Sep 17 00:00:00 2001 From: s33n Date: Fri, 2 Feb 2024 10:44:59 -0800 Subject: [PATCH 3/5] refactored towards original design upon realizing Entities is SystemParam --- src/render/mod.rs | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/src/render/mod.rs b/src/render/mod.rs index 601162a7..b211deb4 100644 --- a/src/render/mod.rs +++ b/src/render/mod.rs @@ -12,6 +12,7 @@ use bevy::{ Render, RenderApp, RenderSet, }, }; +use bevy::ecs::entity::Entities; #[cfg(not(feature = "atlas"))] use bevy::render::renderer::RenderDevice; @@ -116,7 +117,7 @@ impl Plugin for TilemapRenderingPlugin { app.add_systems(Update, set_texture_to_copy_src); app.add_systems(First, clear_removed); - app.add_systems(PostUpdate, removal_helper); + app.add_systems(PostUpdate, (removal_helper, removal_helper_tilemap)); app.add_plugins(MaterialTilemapPlugin::::default()); @@ -306,18 +307,22 @@ pub struct RemovedTileEntity(pub Entity); #[derive(Component)] pub struct RemovedMapEntity(pub Entity); -fn removal_helper(mut commands: Commands, mut set: ParamSet<(&World, RemovedComponents, RemovedComponents)>) { - let tiles: Vec = set.p1().read().collect(); - let maps: Vec = set.p2().read().collect(); - - let world = set.p0(); - let entities = world.entities(); - - for entity in tiles.into_iter().filter(|entity| entities.contains(*entity)) { +fn removal_helper( + mut commands: Commands, + entities: &Entities, + mut removed_query: RemovedComponents, +) { + for entity in removed_query.read().filter(|entity| entities.contains(*entity)) { commands.spawn(RemovedTileEntity(entity)); } +} - for entity in maps.into_iter().filter(|entity| entities.contains(*entity)) { +fn removal_helper_tilemap( + mut commands: Commands, + entities: &Entities, + mut removed_query: RemovedComponents, +) { + for entity in removed_query.read().filter(|entity| entities.contains(*entity)) { commands.spawn(RemovedMapEntity(entity)); } } From ae12d4f994a3ca317dff223ad708bb86df763124 Mon Sep 17 00:00:00 2001 From: s33n Date: Fri, 2 Feb 2024 11:44:34 -0800 Subject: [PATCH 4/5] correctly addressed underlying issue with extract phase, rolled back problematic fix --- src/render/extract.rs | 16 ++++++++-------- src/render/mod.rs | 6 ++---- 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/src/render/extract.rs b/src/render/extract.rs index e44599ac..9eb38de9 100644 --- a/src/render/extract.rs +++ b/src/render/extract.rs @@ -377,15 +377,15 @@ pub fn extract( pub fn extract_removal( mut commands: Commands, - removed_tiles_query: Extract>, - removed_maps_query: Extract>, + removed_tiles_query: Extract>, + removed_maps_query: Extract>, ) { let mut removed_tiles: Vec<(Entity, ExtractedRemovedTileBundle)> = Vec::new(); - for entity in removed_tiles_query.iter() { + for (entity, removed) in removed_tiles_query.iter() { removed_tiles.push(( - entity.0, + entity, ExtractedRemovedTileBundle { - tile: ExtractedRemovedTile { entity: entity.0 }, + tile: ExtractedRemovedTile { entity: removed.0 }, }, )); } @@ -393,11 +393,11 @@ pub fn extract_removal( commands.insert_or_spawn_batch(removed_tiles); let mut removed_maps: Vec<(Entity, ExtractedRemovedMapBundle)> = Vec::new(); - for entity in removed_maps_query.iter() { + for (entity, removed) in removed_maps_query.iter() { removed_maps.push(( - entity.0, + entity, ExtractedRemovedMapBundle { - map: ExtractedRemovedMap { entity: entity.0 }, + map: ExtractedRemovedMap { entity: removed.0 }, }, )); } diff --git a/src/render/mod.rs b/src/render/mod.rs index b211deb4..c7701c80 100644 --- a/src/render/mod.rs +++ b/src/render/mod.rs @@ -309,20 +309,18 @@ pub struct RemovedMapEntity(pub Entity); fn removal_helper( mut commands: Commands, - entities: &Entities, mut removed_query: RemovedComponents, ) { - for entity in removed_query.read().filter(|entity| entities.contains(*entity)) { + for entity in removed_query.read() { commands.spawn(RemovedTileEntity(entity)); } } fn removal_helper_tilemap( mut commands: Commands, - entities: &Entities, mut removed_query: RemovedComponents, ) { - for entity in removed_query.read().filter(|entity| entities.contains(*entity)) { + for entity in removed_query.read() { commands.spawn(RemovedMapEntity(entity)); } } From 16cf328beee91c9469621fd5b4bd3bee7272a63b Mon Sep 17 00:00:00 2001 From: s33n Date: Sat, 10 Feb 2024 13:35:38 -0800 Subject: [PATCH 5/5] ran cargo fmt & cargo clippy --fix --- src/render/mod.rs | 6 +----- src/render/texture_array_cache.rs | 2 +- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/src/render/mod.rs b/src/render/mod.rs index c7701c80..923f7ede 100644 --- a/src/render/mod.rs +++ b/src/render/mod.rs @@ -12,7 +12,6 @@ use bevy::{ Render, RenderApp, RenderSet, }, }; -use bevy::ecs::entity::Entities; #[cfg(not(feature = "atlas"))] use bevy::render::renderer::RenderDevice; @@ -307,10 +306,7 @@ pub struct RemovedTileEntity(pub Entity); #[derive(Component)] pub struct RemovedMapEntity(pub Entity); -fn removal_helper( - mut commands: Commands, - mut removed_query: RemovedComponents, -) { +fn removal_helper(mut commands: Commands, mut removed_query: RemovedComponents) { for entity in removed_query.read() { commands.spawn(RemovedTileEntity(entity)); } diff --git a/src/render/texture_array_cache.rs b/src/render/texture_array_cache.rs index a678c586..270a7385 100644 --- a/src/render/texture_array_cache.rs +++ b/src/render/texture_array_cache.rs @@ -86,7 +86,7 @@ impl TextureArrayCache { "Expected image to have finished loading if \ it is being extracted as a texture!", ); - let this_tile_size: TilemapTileSize = image.size_f32().try_into().unwrap(); + let this_tile_size: TilemapTileSize = image.size_f32().into(); if this_tile_size != tile_size { panic!( "Expected all provided image assets to have size {tile_size:?}, \