//! This example shows how you can know when a `Component` has been removed, so you can react to it. use bevy::prelude::*; fn main() { // Information regarding removed `Component`s is discarded at the end of each frame, so you need // to react to the removal before the frame is over. // // Also, `Components` are removed via a `Command`, which are not applied immediately. // So you need to react to the removal at some stage after `apply_system_buffers` has run, // and the Component` is removed. // // With these constraints in mind we make sure to place the system that removes a `Component` in // `CoreSet::Update', and the system that reacts on the removal in `CoreSet::PostUpdate`. App::new() .add_plugins(DefaultPlugins) .add_startup_system(setup) .add_system(remove_component) .add_system(react_on_removal.in_base_set(CoreSet::PostUpdate)) .run(); } // This `Struct` is just used for convenience in this example. This is the `Component` we'll be // giving to the `Entity` so we have a `Component` to remove in `remove_component()`. #[derive(Component)] struct MyComponent; fn setup(mut commands: Commands, asset_server: Res) { commands.spawn(Camera2dBundle::default()); commands.spawn(( SpriteBundle { texture: asset_server.load("branding/icon.png"), ..default() }, // Add the `Component`. MyComponent, )); } fn remove_component( time: Res