use bevy::{input::keyboard::KeyboardInput, prelude::*};
use bevy_mod_async::prelude::*;
use futures::StreamExt;
fn main() {
App::new()
.add_plugins((DefaultPlugins, AsyncTasksPlugin))
.add_systems(Startup, setup)
.run();
}
fn setup(mut commands: Commands) {
commands.spawn(Camera3d::default());
commands.spawn_task(|cx| async move {
let container = cx
.spawn(Node {
justify_self: JustifySelf::Center,
align_self: AlignSelf::Center,
..default()
})
.await;
let text_entity = cx
.spawn((
Text::new("Waiting for keyboard event"),
TextFont {
font_size: 36.0,
..default()
},
ChildOf(container),
))
.await;
let mut messages = cx.message_stream::<KeyboardInput>();
while let Some(m) = messages.next().await {
cx.with_entity(text_entity, move |mut text_entity| {
let mut text = text_entity.get_mut::<Text>().unwrap();
text.0 = format!("Got keyboard message: {:?}", m.key_code);
})
.detach();
}
});
}