@@ -6,10 +6,12 @@ use bevy::{
66 image:: ImageSamplerDescriptor ,
77 prelude:: * ,
88 render:: {
9+ extract_component:: { ExtractComponent , ExtractComponentPlugin } ,
910 extract_resource:: { extract_resource, ExtractResource } ,
1011 mesh:: MeshVertexAttribute ,
1112 render_phase:: AddRenderCommand ,
1213 render_resource:: { FilterMode , SpecializedRenderPipelines , VertexFormat } ,
14+ sync_world:: RenderEntity ,
1315 view:: { check_visibility, VisibilitySystems } ,
1416 Render , RenderApp , RenderSet ,
1517 } ,
@@ -114,7 +116,12 @@ impl Plugin for TilemapRenderingPlugin {
114116 app. add_systems ( Update , set_texture_to_copy_src) ;
115117
116118 app. add_systems ( First , clear_removed. in_set ( TilemapFirstSet ) ) ;
117- app. add_systems ( PostUpdate , ( removal_helper, removal_helper_tilemap) ) ;
119+
120+ app. add_observer ( on_remove_tile) ;
121+ app. add_observer ( on_remove_tilemap) ;
122+
123+ app. add_plugins ( ExtractComponentPlugin :: < RemovedTileEntity > :: default ( ) ) ;
124+ app. add_plugins ( ExtractComponentPlugin :: < RemovedMapEntity > :: default ( ) ) ;
118125
119126 app. add_plugins ( MaterialTilemapPlugin :: < StandardTilemapMaterial > :: default ( ) ) ;
120127
@@ -246,11 +253,7 @@ impl Plugin for TilemapRenderingPlugin {
246253 . insert_resource ( SecondsSinceStartup ( 0.0 ) )
247254 . add_systems (
248255 ExtractSchedule ,
249- (
250- extract:: extract,
251- extract:: extract_removal,
252- extract_resource :: < ModifiedImageIds > ,
253- ) ,
256+ ( extract:: extract, extract_resource :: < ModifiedImageIds > ) ,
254257 )
255258 . add_systems (
256259 Render ,
@@ -303,24 +306,30 @@ pub const ATTRIBUTE_TEXTURE: MeshVertexAttribute =
303306pub const ATTRIBUTE_COLOR : MeshVertexAttribute =
304307 MeshVertexAttribute :: new ( "Color" , 231497124 , VertexFormat :: Float32x4 ) ;
305308
306- #[ derive( Component ) ]
307- pub struct RemovedTileEntity ( pub Entity ) ;
309+ #[ derive( Component , ExtractComponent , Clone ) ]
308310
309- #[ derive( Component ) ]
310- pub struct RemovedMapEntity ( pub Entity ) ;
311+ pub struct RemovedTileEntity ( pub RenderEntity ) ;
311312
312- fn removal_helper ( mut commands : Commands , mut removed_query : RemovedComponents < TilePos > ) {
313- for entity in removed_query. read ( ) {
314- commands. spawn ( RemovedTileEntity ( entity) ) ;
313+ #[ derive( Component , ExtractComponent , Clone ) ]
314+ pub struct RemovedMapEntity ( pub RenderEntity ) ;
315+
316+ fn on_remove_tile (
317+ trigger : Trigger < OnRemove , TilePos > ,
318+ mut commands : Commands ,
319+ query : Query < & RenderEntity > ,
320+ ) {
321+ if let Ok ( render_entity) = query. get ( trigger. entity ( ) ) {
322+ commands. spawn ( RemovedTileEntity ( * render_entity) ) ;
315323 }
316324}
317325
318- fn removal_helper_tilemap (
326+ fn on_remove_tilemap (
327+ trigger : Trigger < OnRemove , TileStorage > ,
319328 mut commands : Commands ,
320- mut removed_query : RemovedComponents < TileStorage > ,
329+ query : Query < & RenderEntity > ,
321330) {
322- for entity in removed_query . read ( ) {
323- commands. spawn ( RemovedMapEntity ( entity ) ) ;
331+ if let Ok ( render_entity ) = query . get ( trigger . entity ( ) ) {
332+ commands. spawn ( RemovedMapEntity ( * render_entity ) ) ;
324333 }
325334}
326335
0 commit comments