//! Example demonstrating text gizmos. use bevy::color::palettes::css::{BLUE, GREEN, RED, YELLOW}; use bevy::diagnostic::{DiagnosticsStore, FrameTimeDiagnosticsPlugin, LogDiagnosticsPlugin}; use bevy::math::Isometry2d; use bevy::prelude::*; use bevy::window::{PresentMode, WindowResolution}; use bevy::winit::WinitSettings; const TEXT_COUNT: usize = 50; const START_X: f32 = -800.0; const START_Y: f32 = 200.0; const X_STEP: f32 = 250.0; const Y_STEP: f32 = 50.0; fn main() { App::new() .insert_resource(WinitSettings::continuous()) .add_plugins(( DefaultPlugins.set(WindowPlugin { primary_window: Some(Window { present_mode: PresentMode::AutoNoVsync, resolution: WindowResolution::new(1920, 1080).with_scale_factor_override(1.0), ..default() }), ..default() }), LogDiagnosticsPlugin::default(), FrameTimeDiagnosticsPlugin::default(), )) .add_systems(Startup, setup) .add_systems(Update, (draw_labels, draw_all_glyphs)) .run(); } fn setup(mut commands: Commands, mut gizmo_config_store: ResMut) { commands.spawn(Camera2d); let (config, _) = gizmo_config_store.config_mut::(); config.line.width = 1.; } fn draw_labels(mut text_gizmos: Gizmos, diagnostic: Res) { let colors = [RED, GREEN, BLUE, YELLOW]; for i in 0..TEXT_COUNT { let row = i / 5; let col = i % 5; let color = colors[i % 4]; text_gizmos.text_2d( Isometry2d { translation: Vec2::new( START_X + col as f32 * X_STEP, START_Y - row as f32 * Y_STEP, ), rotation: Rot2::degrees(2.), }, &format!("label {i}"), 25., Vec2::ZERO, color, ); } if let Some(fps) = diagnostic.get(&FrameTimeDiagnosticsPlugin::FPS) && let Some(fps_smoothed) = fps.smoothed() { text_gizmos.text_2d( Isometry2d::from_translation(Vec2::new(600., START_Y + 150.)), &format!("fps: {:.1}", fps_smoothed), 25., Vec2::ZERO, Color::WHITE, ); } text_gizmos.text_2d( Isometry2d::from_translation(Vec2::new(-300., START_Y + 200.)), "lxgh", 150., Vec2::ZERO, Color::WHITE, ); text_gizmos.text_2d( Isometry2d::from_translation(Vec2::new( -300., START_Y - TEXT_COUNT as f32 / 5.0 * Y_STEP - 100., )), "a\tb\tcd\tef", 50., Vec2::ZERO, Color::WHITE, ); } const ALL_GLYPHS: &str = " !\"#$%&'()*\n\ +,-./012345\n\ 6789:;<=>?@\n\ ABCDEFGHIJK\n\ LMNOPQRSTUV\n\ WXYZ[\\]^_`a\n\ bcdefghijkl\n\ mnopqrstuvw\n\ xyz{|}~"; fn draw_all_glyphs(mut text_gizmos: Gizmos) { text_gizmos.text_2d( Isometry2d::from_xy(600., 0.), ALL_GLYPHS, 30.0, Vec2::ZERO, Color::WHITE, ); }