use bevy::{
ecs::schedule::{LogLevel, ScheduleBuildSettings},
prelude::*,
};
fn main() {
App::new()
.edit_schedule(Update, |schedule| {
schedule.set_build_settings(ScheduleBuildSettings {
ambiguity_detection: LogLevel::Warn,
..default()
});
})
.init_resource::<A>()
.init_resource::<B>()
.add_systems(
Update,
(
reads_a,
writes_a,
adds_one_to_b,
doubles_b.after(adds_one_to_b),
reads_b.after(doubles_b),
reads_a_and_b.ambiguous_with(adds_one_to_b),
),
)
.add_plugins(DefaultPlugins)
.run();
}
#[derive(Resource, Debug, Default)]
struct A(usize);
#[derive(Resource, Debug, Default)]
struct B(usize);
fn reads_a(_a: Res<A>) {}
fn writes_a(mut a: ResMut<A>) {
a.0 += 1;
}
fn adds_one_to_b(mut b: ResMut<B>) {
b.0 = b.0.saturating_add(1);
}
fn doubles_b(mut b: ResMut<B>) {
b.0 = b.0.saturating_mul(2);
}
fn reads_b(b: Res<B>) {
assert!((b.0.is_multiple_of(2)) || (b.0 == usize::MAX));
}
fn reads_a_and_b(a: Res<A>, b: Res<B>) {
if b.0 < 10 {
info!("{}, {}", a.0, b.0);
}
}