A very easy to use plugin for input text in Bevy. Good enough for game setting and command console.
Features:
- Switchable between multiple text boxes.
- Moving text cursor using arrow keys and Home/End.
- Limit input length.
- Filter input text with regex.
- Placeholder.
Missing:
- IME support.
- Select text.
- Copy/paste.
Add plugin TextEditPlugin
to the app and define which states it will run in:
#[derive(Clone, Debug, Default, Eq, PartialEq, Hash, States)]
enum GameState {
#[default]
Menu,
}
fn main() {
App::new()
.add_plugins(DefaultPlugins)
// Add the plugin
.add_plugins(TextEditPlugin::new(vec![GameState::Menu]))
.run;
}
If you don't care to game state and want to always run input text, use TextEditPluginNoState
:
fn main() {
App::new()
.add_plugins(DefaultPlugins)
// Add the plugin
.add_plugins(TextEditPluginNoState)
.add_systems(Startup, setup)
.run();
}
Insert component TextEditable
into any text entity that needs to be editable:
fn setup(mut commands: Commands) {
commands.spawn((
TextEditable::default(), // Mark text is editable
Text::new("Input Text 1"),
));
}
Only text that is focused by clicking gets keyboard input.
It is also possible to limit which characters are allowed to enter through filter_in
and filter_out
attribute
(regex is supported):
fn setup(mut commands: Commands) {
commands.spawn((
TextEditable {
filter_in: vec!["[0-9]".into(), " ".into()], // Only allow number and space
filter_out: vec!["5".into()], // Ignore number 5
..default()
},
Text::new("Input Text 1"),
));
}
The edited text can be retrieved from event or observe trigger TextEdited
.
fn get_text(
mut event: EventReader<TextEdited>,
) {
for e in event.read() {
info!("Entity {}: {}", e.entity, e.text);
}
}
fn setup(mut commands: Commands) {
commands.spawn((
TextEditable::default(),
Text::new("Input Text"),
)).observe(get_text);
}
fn get_text(
trigger: Trigger<TextEdited>,
) {
let text = trigger.text.as_str();
info!("{}", text);
}
Please see LICENSE.
bevy | bevy_text_edit |
---|---|
0.15 | 0.4, branch master |
0.14 | 0.1-0.3 |
0.13 | 0.0.1-0.0.5 |