//! Shows text rendering with moving, rotating and scaling text. //! //! Note that this uses [`Text2dBundle`] to display text alongside your other entities in a 2D scene. //! //! For an example on how to render text as part of a user interface, independent from the world //! viewport, you may want to look at `2d/contributors.rs` or `ui/text.rs`. use bevy::{prelude::*, text::Text2dBounds}; fn main() { App::new() .add_plugins(DefaultPlugins) .add_startup_system(setup) .add_system(animate_translation) .add_system(animate_rotation) .add_system(animate_scale) .run(); } #[derive(Component)] struct AnimateTranslation; #[derive(Component)] struct AnimateRotation; #[derive(Component)] struct AnimateScale; fn setup(mut commands: Commands, asset_server: Res) { let font = asset_server.load("fonts/FiraSans-Bold.ttf"); let text_style = TextStyle { font, font_size: 60.0, color: Color::WHITE, }; let text_alignment = TextAlignment::Center; // 2d camera commands.spawn(Camera2dBundle::default()); // Demonstrate changing translation commands.spawn(( Text2dBundle { text: Text::from_section("translation", text_style.clone()) .with_alignment(text_alignment), ..default() }, AnimateTranslation, )); // Demonstrate changing rotation commands.spawn(( Text2dBundle { text: Text::from_section("rotation", text_style.clone()).with_alignment(text_alignment), ..default() }, AnimateRotation, )); // Demonstrate changing scale commands.spawn(( Text2dBundle { text: Text::from_section("scale", text_style.clone()).with_alignment(text_alignment), ..default() }, AnimateScale, )); // Demonstrate text wrapping let box_size = Vec2::new(300.0, 200.0); let box_position = Vec2::new(0.0, -250.0); commands .spawn(SpriteBundle { sprite: Sprite { color: Color::rgb(0.25, 0.25, 0.75), custom_size: Some(Vec2::new(box_size.x, box_size.y)), ..default() }, transform: Transform::from_translation(box_position.extend(0.0)), ..default() }) .with_children(|builder| { builder.spawn(Text2dBundle { text: Text::from_section("this text wraps in the box", text_style) .with_alignment(TextAlignment::Left), text_2d_bounds: Text2dBounds { // Wrap text in the rectangle size: box_size, }, // ensure the text is drawn on top of the box transform: Transform::from_translation(Vec3::Z), ..default() }); }); } fn animate_translation( time: Res