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::*;
use bevy_ecs::prelude::*;
use bevy_ecs::relationship::Relationship;

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

pub fn on_add_scatter_item(
    trigger: On<Add, ScatterItem>,
    mut cmd: Commands,
    q_item: Query<(&ChildOf, Option<&ScatterLayer>, Option<&ScatterItemOf>), With<ScatterItem>>,
) {
    let Ok((parent, layer, scatter_item_of)) = q_item.get(trigger.entity) else {
        #[cfg(feature = "trace")]
        warn!(
            "Could not get ScatterItemLayer for ScatterItem {}",
            trigger.entity
        );
        return;
    };

    if layer.is_some() || scatter_item_of.is_some() {
        return;
    };

    cmd.entity(trigger.entity)
        .insert(ScatterItemOf(parent.get()));
}