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 { vertical: VerticalAlign::Center, horizontal: HorizontalAlign::Center, }; // 2d camera commands.spawn_bundle(OrthographicCameraBundle::new_2d()); // Demonstrate changing translation commands .spawn_bundle(Text2dBundle { text: Text::with_section("translation", text_style.clone(), text_alignment), ..default() }) .insert(AnimateTranslation); // Demonstrate changing rotation commands .spawn_bundle(Text2dBundle { text: Text::with_section("rotation", text_style.clone(), text_alignment), ..default() }) .insert(AnimateRotation); // Demonstrate changing scale commands .spawn_bundle(Text2dBundle { text: Text::with_section("scale", text_style.clone(), text_alignment), ..default() }) .insert(AnimateScale); // Demonstrate text wrapping let box_size = Size::new(300.0, 200.0); let box_position = Vec2::new(0.0, -250.0); commands.spawn_bundle(SpriteBundle { sprite: Sprite { color: Color::rgb(0.25, 0.25, 0.75), custom_size: Some(Vec2::new(box_size.width, box_size.height)), ..default() }, transform: Transform::from_translation(box_position.extend(0.0)), ..default() }); let text_alignment_topleft = TextAlignment { vertical: VerticalAlign::Top, horizontal: HorizontalAlign::Left, }; commands.spawn_bundle(Text2dBundle { text: Text::with_section( "this text wraps in the box", text_style, text_alignment_topleft, ), text_2d_bounds: Text2dBounds { // Wrap text in the rectangle size: box_size, }, // We align text to the top-left, so this transform is the top-left corner of our text. The // box is centered at box_position, so it is necessary to move by half of the box size to // keep the text in the box. transform: Transform::from_xyz( box_position.x - box_size.width / 2.0, box_position.y + box_size.height / 2.0, 1.0, ), ..default() }); } fn animate_translation( time: Res