#[derive(Component, Default)]
struct Counter {
value: i32,
}
impl Counter {
pub fn spawn() -> impl Bundle {
(
Self::default(),
Node {
justify_content: JustifyContent::Center,
align_items: AlignItems::Center,
width: Val::Percent(100.0),
height: Val::Percent(100.0),
..Default::default()
},
children![
(Button, children![Text::new("-")], observers![
|trigger: Trigger<Pointer<Click>>, world: &mut World| {
let parent = world.get::<ChildOf>(trigger.target()).unwrap().0;
let mut counter = world.get_mut::<Counter>(parent).unwrap();
counter.value -= 1;
}
]),
Text::new("0"),
(Button, children![Text::new("+")], observers![
|trigger: Trigger<Pointer<Click>>, world: &mut World| {
let parent = world.get::<ChildOf>(trigger.target()).unwrap().0;
let mut counter = world.get_mut::<Counter>(parent).unwrap();
counter.value += 1;
}
]),
],
)
}
pub fn changed_system(
query: Query<(Entity, &Counter), Changed<Counter>>,
mut commands: Commands,
) {
for (entity, counter) in query {
let value = counter.value;
commands.queue(move |world: &mut World| {
let text = world.get_mut::<Children>(entity).unwrap()[1];
world.get_mut::<Text>(text).unwrap().0 = value.to_string();
});
}
}
}