bevy_feronia 0.8.2

Foliage/grass scattering tools and wind simulation shaders/materials that prioritize visual fidelity/artistic freedom, a declarative api and modularity.
Documentation
use crate::scatter::prelude::*;

use bevy_ecs::prelude::*;
use bevy_ecs::system::Commands;

use crate::utils::despawn;

#[cfg(feature = "trace")]
use tracing::debug;

pub fn clear_scatter_layers(
    mut cmd: Commands,
    mut mr_clear_layers: MessageReader<ClearScatterLayer>,
    q_children: Query<&Children>,
    q_instances: Query<(Entity, &ScatteredInstance)>,
) {
    despawn(
        &mut cmd,
        mr_clear_layers
            .read()
            .filter_map(|trigger| {
                #[cfg(feature = "trace")]
                debug!("ClearScatterLayer triggered for layer {:?}", trigger);

                q_children.get(**trigger).ok()
            })
            .flatten()
            .filter_map(|x| q_instances.get(*x).ok())
            .map(|(child, _)| child),
    );
}