You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
56 lines
1.4 KiB
Rust
56 lines
1.4 KiB
Rust
use bevy::input::keyboard::KeyboardInput;
|
|
use bevy::input::ButtonState;
|
|
use bevy::prelude::*;
|
|
|
|
fn main() {
|
|
App::new()
|
|
.add_plugins(DefaultPlugins)
|
|
.add_systems(Startup, init)
|
|
.add_systems(Update, update)
|
|
.run();
|
|
}
|
|
|
|
fn init(mut commands: Commands) {
|
|
// UI Camera
|
|
commands.spawn((
|
|
Camera2dBundle { ..default() },
|
|
UiCameraConfig { show_ui: true },
|
|
));
|
|
|
|
// Text Box
|
|
commands.spawn(TextBundle::from_section(
|
|
"Start typing! (Escape to clear)\n",
|
|
TextStyle {
|
|
color: Color::WHITE,
|
|
..default()
|
|
},
|
|
));
|
|
}
|
|
|
|
fn update(mut query: Query<&mut Text>, mut events: EventReader<KeyboardInput>) {
|
|
for KeyboardInput {
|
|
key_code,
|
|
scan_code,
|
|
state,
|
|
..
|
|
} in events.iter()
|
|
{
|
|
if *state == ButtonState::Pressed {
|
|
let mut text = query.single_mut();
|
|
if *key_code == Some(KeyCode::Escape) {
|
|
text.sections.drain(1..);
|
|
} else {
|
|
let style = TextStyle {
|
|
color: Color::WHITE,
|
|
..default()
|
|
};
|
|
let added = format!(
|
|
"Pressed: KeyCode: {:?} / ScanCode {:?}\n",
|
|
key_code, scan_code
|
|
);
|
|
text.sections.push(TextSection::new(added, style));
|
|
}
|
|
}
|
|
}
|
|
}
|