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::prelude::{Chunk, ClearScatterLayer, ScatteredInstance};
use crate::utils::despawn;

use bevy_ecs::prelude::*;
use bevy_platform::collections::HashSet;

pub fn clear_chunks(
    mut cmd: Commands,
    mut mr_clear_layers: MessageReader<ClearScatterLayer>,
    q_children: Query<&Children>,
    q_instances: Query<(Entity, &ScatteredInstance)>,
    q_chunks: Query<Entity, With<Chunk>>,
) {
    if mr_clear_layers.is_empty() {
        return;
    }

    let layers: HashSet<Entity> = mr_clear_layers.read().fold(HashSet::new(), |mut acc, e| {
        acc.insert(**e);
        acc
    });

    despawn(
        &mut cmd,
        q_chunks
            .iter()
            .filter_map(|chunk| q_children.get(chunk).ok())
            .flatten()
            .filter_map(|child| {
                q_instances
                    .get(*child)
                    .ok()
                    .and_then(|(_, instance)| layers.contains(&**instance).then_some(child))
                    .cloned()
            }),
    );
}