2 unstable releases
0.2.0-alpha.1 | Nov 5, 2024 |
---|---|
0.1.0 | Nov 5, 2024 |
#832 in Game dev
36KB
489 lines
bevy_mod_reaction
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),
),
));
Dependencies
~24MB
~456K SLoC