| 1 |
|
| 2 |
|
| 3 |
use bevy::color::palettes::css::{BLUE, GREEN, RED, YELLOW}; |
| 4 |
use bevy::diagnostic::{DiagnosticsStore, FrameTimeDiagnosticsPlugin, LogDiagnosticsPlugin}; |
| 5 |
use bevy::math::Isometry2d; |
| 6 |
use bevy::prelude::*; |
| 7 |
use bevy::window::{PresentMode, WindowResolution}; |
| 8 |
use bevy::winit::WinitSettings; |
| 9 |
|
| 10 |
const TEXT_COUNT: usize = 50; |
| 11 |
const START_X: f32 = -800.0; |
| 12 |
const START_Y: f32 = 200.0; |
| 13 |
const X_STEP: f32 = 250.0; |
| 14 |
const Y_STEP: f32 = 50.0; |
| 15 |
|
| 16 |
fn main() { |
| 17 |
App::new() |
| 18 |
.insert_resource(WinitSettings::continuous()) |
| 19 |
.add_plugins(( |
| 20 |
DefaultPlugins.set(WindowPlugin { |
| 21 |
primary_window: Some(Window { |
| 22 |
present_mode: PresentMode::AutoNoVsync, |
| 23 |
resolution: WindowResolution::new(1920, 1080).with_scale_factor_override(1.0), |
| 24 |
..default() |
| 25 |
}), |
| 26 |
..default() |
| 27 |
}), |
| 28 |
LogDiagnosticsPlugin::default(), |
| 29 |
FrameTimeDiagnosticsPlugin::default(), |
| 30 |
)) |
| 31 |
.add_systems(Startup, setup) |
| 32 |
.add_systems(Update, (draw_labels, draw_all_glyphs)) |
| 33 |
.run(); |
| 34 |
} |
| 35 |
|
| 36 |
fn setup(mut commands: Commands, mut gizmo_config_store: ResMut<GizmoConfigStore>) { |
| 37 |
commands.spawn(Camera2d); |
| 38 |
|
| 39 |
let (config, _) = gizmo_config_store.config_mut::<DefaultGizmoConfigGroup>(); |
| 40 |
|
| 41 |
config.line.width = 1.; |
| 42 |
} |
| 43 |
|
| 44 |
fn draw_labels(mut text_gizmos: Gizmos, diagnostic: Res<DiagnosticsStore>) { |
| 45 |
let colors = [RED, GREEN, BLUE, YELLOW]; |
| 46 |
for i in 0..TEXT_COUNT { |
| 47 |
let row = i / 5; |
| 48 |
let col = i % 5; |
| 49 |
let color = colors[i % 4]; |
| 50 |
text_gizmos.text_2d( |
| 51 |
Isometry2d { |
| 52 |
translation: Vec2::new( |
| 53 |
START_X + col as f32 * X_STEP, |
| 54 |
START_Y - row as f32 * Y_STEP, |
| 55 |
), |
| 56 |
rotation: Rot2::degrees(2.), |
| 57 |
}, |
| 58 |
&format!("label {i}"), |
| 59 |
25., |
| 60 |
Vec2::ZERO, |
| 61 |
color, |
| 62 |
); |
| 63 |
} |
| 64 |
|
| 65 |
if let Some(fps) = diagnostic.get(&FrameTimeDiagnosticsPlugin::FPS) |
| 66 |
&& let Some(fps_smoothed) = fps.smoothed() |
| 67 |
{ |
| 68 |
text_gizmos.text_2d( |
| 69 |
Isometry2d::from_translation(Vec2::new(600., START_Y + 150.)), |
| 70 |
&format!("fps: {:.1}", fps_smoothed), |
| 71 |
25., |
| 72 |
Vec2::ZERO, |
| 73 |
Color::WHITE, |
| 74 |
); |
| 75 |
} |
| 76 |
|
| 77 |
text_gizmos.text_2d( |
| 78 |
Isometry2d::from_translation(Vec2::new(-300., START_Y + 200.)), |
| 79 |
"lxgh", |
| 80 |
150., |
| 81 |
Vec2::ZERO, |
| 82 |
Color::WHITE, |
| 83 |
); |
| 84 |
|
| 85 |
text_gizmos.text_2d( |
| 86 |
Isometry2d::from_translation(Vec2::new( |
| 87 |
-300., |
| 88 |
START_Y - TEXT_COUNT as f32 / 5.0 * Y_STEP - 100., |
| 89 |
)), |
| 90 |
"a\tb\tcd\tef", |
| 91 |
50., |
| 92 |
Vec2::ZERO, |
| 93 |
Color::WHITE, |
| 94 |
); |
| 95 |
} |
| 96 |
|
| 97 |
const ALL_GLYPHS: &str = " !\"#$%&'()*\n\ |
| 98 |
+,-./012345\n\ |
| 99 |
6789:;<=>?@\n\ |
| 100 |
ABCDEFGHIJK\n\ |
| 101 |
LMNOPQRSTUV\n\ |
| 102 |
WXYZ[\\]^_`a\n\ |
| 103 |
bcdefghijkl\n\ |
| 104 |
mnopqrstuvw\n\ |
| 105 |
xyz{|}~"; |
| 106 |
|
| 107 |
fn draw_all_glyphs(mut text_gizmos: Gizmos) { |
| 108 |
text_gizmos.text_2d( |
| 109 |
Isometry2d::from_xy(600., 0.), |
| 110 |
ALL_GLYPHS, |
| 111 |
30.0, |
| 112 |
Vec2::ZERO, |
| 113 |
Color::WHITE, |
| 114 |
); |
| 115 |
} |