bevy-compose

Crates.io version docs.rs docs CI status

Reactive ECS plugin for Bevy. This crate provides a framework for reactive systems using the ECS. ```rust use bevy::prelude::*; use bevy_compose::TemplatePlugin; #[derive(Component, Deref)] struct Health(i32); #[derive(Component, Deref)] struct Damage(i32); #[derive(Component)] struct Zombie; fn main() { App::new() .add_plugins(TemplatePlugin::default().with_template( // Spawning a Zombie will spawn the following components: Zombie, ( // This only runs once. || Health(100), // This runs every time a `Health` component is updated, // and it's guraranteed to run after the `Health` component is updated. |entity: In, health_query: Query<&Health>| { let health = health_query.get(*entity).unwrap(); Damage(**health * 2) }, ), )) .add_systems(Startup, setup) .add_systems(PostUpdate, debug) .run(); } fn setup(mut commands: Commands) { commands.spawn(Zombie); } fn debug(query: Query<&Damage>) { for dmg in &query { dbg!(**dmg); } } ``` ## Inspiration This crate is inspired by [Xilem](https://github.com/linebender/xilem), [Concoct](https://github.com/concoct-rs/concoct) and SwiftUI with its typed approach to reactivity.