bevy_life 0.13.0

Generic and dynamic cellular automaton lib for bevy
Documentation
use crate::{CellState, SimulationBatch};
use bevy::prelude::*;

#[inline]
fn apply_color<S>(state: &S, visible: &mut Visibility, sprite: &mut Sprite)
where
    S: CellState,
{
    match state.color() {
        Some(c) => {
            sprite.color = c;
            if *visible != Visibility::Inherited {
                *visible = Visibility::Inherited;
            }
        }
        None => *visible = Visibility::Hidden,
    }
}

#[allow(clippy::needless_pass_by_value)]
pub fn color_sprites<S>(
    mut query: Query<(&S, &mut Visibility, &mut Sprite), Changed<S>>,
    batch: Option<Res<SimulationBatch>>,
) where
    S: CellState,
{
    if batch.is_some() {
        query
            .par_iter_mut()
            .for_each(|(state, mut visible, mut sprite)| {
                apply_color(state, &mut visible, &mut sprite);
            });
    } else {
        for (state, mut visible, mut sprite) in &mut query {
            apply_color(state, &mut visible, &mut sprite);
        }
    }
}