12 unstable releases (3 breaking)

0.3.1 Oct 7, 2024
0.3.0 Aug 7, 2024
0.2.0 Jul 23, 2024
0.1.2 Jul 12, 2024
0.0.4 Jun 16, 2024

#631 in Game dev

29 downloads per month

MIT/Apache

34KB
322 lines

bevy_text_edit

crates.io docs.rs dependency status pipeline status

Quickstart

Plugin

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();
}

Component

Insert component TextEditable and Interaction into any text entity that needs to be editable:

commands.spawn((
    TextEditable::default(), // Mark text is editable
    Interaction::None,       // Mark entity is interactable
    TextBundle::from_section(
        "Input Text 1",
        TextStyle::default(),
    ),
));

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:

commands.spawn((
    TextEditable {
        filter_in: vec!["[0-9]".into(), " ".into()], // Only allow number and space
        filter_out: vec!["5".into()],                // Ignore number 5
    },
    Interaction::None,
    TextBundle::from_section(
        "Input Text 1",
        TextStyle::default(),
    ),
));

License

Please see LICENSE.

Compatible Bevy Versions

bevy bevy_text_edit
0.14 0.1-0.3, branch master
0.13 0.0.1-0.0.5

Dependencies

~42–83MB
~1.5M SLoC