bevy_mod_reaction

Crates.iobevy_mod_reaction
lib.rsbevy_mod_reaction
version0.2.0-alpha.1
sourcesrc
created_at2024-11-05 01:05:37.588672
updated_at2024-11-05 01:53:54.499548
descriptionReactive components for Bevy
homepage
repository
max_upload_size
id1435882
size139,869
Matt Hunzinger (matthunz)

documentation

README

bevy_mod_reaction

License Crates.io Downloads Docs CI

Reactive components for Bevy.

A Reaction is a component around a ReactiveSystem, which runs every time its parameters have changed. Bevy's built-in change detection mechanisms are used to efficiently react to changes in state.

/// This reaction will only run if a `Damage` component is changed.
commands.spawn(Reaction::new(|_: In<Scope>, query: Query<&Damage>| {
    for dmg in &query {
        dbg!(dmg.0);
    }
}));

For coarse-grained reactivity ReactiveQuery tracks the entities read and only re-runs the current system if those values have changed. Bundles of components can also be derived:

// Coarse-grained reactivity:
// This reaction will only run when the `Health` component belonging to `scope.entity` changes.
commands.spawn((
    Health(100),
    Reaction::derive(|scope: In<Scope>, mut query: ReactiveQuery<&Health>| {
        let health = query.get(scope.entity).unwrap();
        Damage(health.0 * 2)
    }),
));

Switch statements are also supported, with more primitives coming soon

commands.spawn((
    Health(0),
    Reaction::switch(
        |scope: In<Scope>, query: ReactiveQuery<&Health>| {
            let health = query.get(scope.entity).unwrap();
            health.0 == 0
        },
        || Armor(50),
        || Damage(100),
    ),
));
Commit count: 0

cargo fmt