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::asset::backend::systems::{insert_parts, insert_requests};
use crate::asset::systems::process_requests;
use crate::prelude::*;
use bevy_app::{App, Plugin, PostUpdate, Update};
use bevy_ecs::prelude::*;
use bevy_pbr::prelude::*;
use bevy_state::prelude::*;
use std::marker::PhantomData;

pub struct ScatterAssetRequestPlugin<T = StandardMaterial>
where
    T: ScatterMaterial,
{
    _marker: PhantomData<T>,
}

impl<T> ScatterAssetRequestPlugin<T>
where
    T: ScatterMaterial,
{
    pub fn new() -> Self {
        Self {
            _marker: PhantomData,
        }
    }
}

impl<T> Default for ScatterAssetRequestPlugin<T>
where
    T: ScatterMaterial,
{
    fn default() -> Self {
        Self::new()
    }
}

impl<T> Plugin for ScatterAssetRequestPlugin<T>
where
    T: ScatterMaterial,
{
    fn build(&self, app: &mut App) {
        app.add_systems(
            PostUpdate,
            (insert_parts::<T>, insert_requests::<T>).run_if(in_state(ScatterState::Collecting)),
        )
        .add_systems(
            Update,
            process_requests::<T>.run_if(in_state(ScatterState::Collecting)),
        );
    }
}