From e0e5f3acd4f024fa05dd166e51d155c7e405602b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois?= Date: Sat, 22 Apr 2023 00:30:18 +0200 Subject: [PATCH] add a default font (#8445) # Objective - Have a default font ## Solution - Add a font based on FiraMono containing only ASCII characters and use it as the default font - It is behind a feature `default_font` enabled by default - I also updated examples to use it, but not UI examples to still show how to use a custom font --- ## Changelog * If you display text without using the default handle provided by `TextStyle`, the text will be displayed --- Cargo.toml | 4 ++ crates/bevy_internal/Cargo.toml | 2 + crates/bevy_text/Cargo.toml | 1 + crates/bevy_text/src/FiraMono-subset.ttf | Bin 0 -> 18848 bytes crates/bevy_text/src/lib.rs | 16 +++++++- crates/bevy_text/src/text.rs | 4 +- docs/cargo_features.md | 1 + examples/2d/bloom_2d.rs | 2 +- examples/3d/3d_gizmos.rs | 3 +- examples/3d/anti_aliasing.rs | 2 +- examples/3d/atmospheric_fog.rs | 4 +- examples/3d/blend_modes.rs | 5 +-- examples/3d/bloom_3d.rs | 3 +- examples/3d/fog.rs | 4 +- examples/3d/parallax_mapping.rs | 2 +- examples/3d/pbr.rs | 6 +-- examples/3d/tonemapping.rs | 5 +-- .../external_source_external_thread.rs | 14 ++----- examples/ecs/apply_system_buffers.rs | 6 +-- examples/ecs/state.rs | 4 +- examples/games/alien_cake_addict.rs | 6 +-- examples/games/breakout.rs | 4 +- examples/games/game_menu.rs | 36 ++++++------------ examples/mobile/src/lib.rs | 3 +- examples/scene/scene.rs | 4 +- examples/shader/shader_prepass.rs | 2 +- examples/stress_tests/bevymark.rs | 2 +- examples/stress_tests/many_buttons.rs | 26 ++----------- examples/stress_tests/many_gizmos.rs | 3 +- examples/stress_tests/many_glyphs.rs | 4 +- examples/tools/gamepad_viewer.rs | 19 ++------- examples/window/low_power.rs | 9 ++--- examples/window/scale_factor_override.rs | 4 +- examples/window/window_resizing.rs | 4 +- 34 files changed, 90 insertions(+), 124 deletions(-) create mode 100644 crates/bevy_text/src/FiraMono-subset.ttf diff --git a/Cargo.toml b/Cargo.toml index ba49a55ecd..d1cc871372 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -52,6 +52,7 @@ default = [ "bevy_gizmos", "android_shared_stdcxx", "tonemapping_luts", + "default_font", ] # Force dynamic linking, which improves iterative compile times @@ -225,6 +226,9 @@ accesskit_unix = ["bevy_internal/accesskit_unix"] # Enable assertions to check the validity of parameters passed to glam glam_assert = ["bevy_internal/glam_assert"] +# Include a default font, containing only ASCII characters, at the cost of a 20kB binary size increase +default_font = ["bevy_internal/default_font"] + [dependencies] bevy_dylib = { path = "crates/bevy_dylib", version = "0.11.0-dev", default-features = false, optional = true } bevy_internal = { path = "crates/bevy_internal", version = "0.11.0-dev", default-features = false } diff --git a/crates/bevy_internal/Cargo.toml b/crates/bevy_internal/Cargo.toml index 1f498e22c5..51fe644c92 100644 --- a/crates/bevy_internal/Cargo.toml +++ b/crates/bevy_internal/Cargo.toml @@ -97,6 +97,8 @@ bevy_render = ["dep:bevy_render", "bevy_scene?/bevy_render"] # Enable assertions to check the validity of parameters passed to glam glam_assert = ["bevy_math/glam_assert"] +default_font = ["bevy_text?/default_font"] + [dependencies] # bevy bevy_a11y = { path = "../bevy_a11y", version = "0.11.0-dev" } diff --git a/crates/bevy_text/Cargo.toml b/crates/bevy_text/Cargo.toml index e34ffad8f4..7e17ab8c56 100644 --- a/crates/bevy_text/Cargo.toml +++ b/crates/bevy_text/Cargo.toml @@ -10,6 +10,7 @@ keywords = ["bevy"] [features] subpixel_glyph_atlas = [] +default_font = [] [dependencies] # bevy diff --git a/crates/bevy_text/src/FiraMono-subset.ttf b/crates/bevy_text/src/FiraMono-subset.ttf new file mode 100644 index 0000000000000000000000000000000000000000..6989c2e4835006627b2daf6660f65b40cfa5edc4 GIT binary patch literal 18848 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 K|J8p_=>Gr=x%t5W literal 0 HcmV?d00001 diff --git a/crates/bevy_text/src/lib.rs b/crates/bevy_text/src/lib.rs index a3478780de..4f9ab2497d 100644 --- a/crates/bevy_text/src/lib.rs +++ b/crates/bevy_text/src/lib.rs @@ -26,8 +26,11 @@ pub mod prelude { } use bevy_app::prelude::*; -use bevy_asset::AddAsset; +#[cfg(feature = "default_font")] +use bevy_asset::load_internal_binary_asset; +use bevy_asset::{AddAsset, HandleUntyped}; use bevy_ecs::prelude::*; +use bevy_reflect::TypeUuid; use bevy_render::{camera::CameraUpdateSystem, ExtractSchedule, RenderApp}; use bevy_sprite::SpriteSystem; use std::num::NonZeroUsize; @@ -67,6 +70,9 @@ pub enum YAxisOrientation { BottomToTop, } +pub const DEFAULT_FONT_HANDLE: HandleUntyped = + HandleUntyped::weak_from_u64(Font::TYPE_UUID, 1491772431825224042); + impl Plugin for TextPlugin { fn build(&self, app: &mut App) { app.add_asset::() @@ -98,5 +104,13 @@ impl Plugin for TextPlugin { extract_text2d_sprite.after(SpriteSystem::ExtractSprites), ); } + + #[cfg(feature = "default_font")] + load_internal_binary_asset!( + app, + DEFAULT_FONT_HANDLE, + "FiraMono-subset.ttf", + |bytes: &[u8]| { Font::try_from_bytes(bytes.to_vec()).unwrap() } + ); } } diff --git a/crates/bevy_text/src/text.rs b/crates/bevy_text/src/text.rs index 9d4a4c1615..c1e3584e39 100644 --- a/crates/bevy_text/src/text.rs +++ b/crates/bevy_text/src/text.rs @@ -6,6 +6,8 @@ use bevy_utils::default; use serde::{Deserialize, Serialize}; use crate::Font; +#[cfg(feature = "default_font")] +use crate::DEFAULT_FONT_HANDLE; #[derive(Component, Debug, Clone, Reflect)] #[reflect(Component, Default)] @@ -167,7 +169,7 @@ pub struct TextStyle { impl Default for TextStyle { fn default() -> Self { Self { - font: Default::default(), + font: DEFAULT_FONT_HANDLE.typed(), font_size: 12.0, color: Color::WHITE, } diff --git a/docs/cargo_features.md b/docs/cargo_features.md index f3ee40a873..d2a876d10f 100644 --- a/docs/cargo_features.md +++ b/docs/cargo_features.md @@ -27,6 +27,7 @@ The default feature set enables most of the expected features of a game engine, |bevy_text|Provides text functionality| |bevy_ui|A custom ECS-driven UI framework| |bevy_winit|winit window and input backend| +|default_font|Include a default font, containing only ASCII characters, at the cost of a 20kB binary size increase| |filesystem_watcher|Enable watching file system for asset hot reload| |hdr|HDR image format support| |ktx2|KTX2 compressed texture support| diff --git a/examples/2d/bloom_2d.rs b/examples/2d/bloom_2d.rs index 95b3323d5f..108cc94c57 100644 --- a/examples/2d/bloom_2d.rs +++ b/examples/2d/bloom_2d.rs @@ -72,9 +72,9 @@ fn setup( TextBundle::from_section( "", TextStyle { - font: asset_server.load("fonts/FiraMono-Medium.ttf"), font_size: 18.0, color: Color::WHITE, + ..default() }, ) .with_style(Style { diff --git a/examples/3d/3d_gizmos.rs b/examples/3d/3d_gizmos.rs index 6157ea8466..0499e6c66e 100644 --- a/examples/3d/3d_gizmos.rs +++ b/examples/3d/3d_gizmos.rs @@ -15,7 +15,6 @@ fn setup( mut commands: Commands, mut meshes: ResMut>, mut materials: ResMut>, - asset_server: Res, ) { commands.spawn(Camera3dBundle { transform: Transform::from_xyz(0., 1.5, 6.).looking_at(Vec3::ZERO, Vec3::Y), @@ -48,9 +47,9 @@ fn setup( commands.spawn(TextBundle::from_section( "Press 't' to toggle drawing gizmos on top of everything else in the scene", TextStyle { - font: asset_server.load("fonts/FiraMono-Medium.ttf"), font_size: 24., color: Color::WHITE, + ..default() }, )); } diff --git a/examples/3d/anti_aliasing.rs b/examples/3d/anti_aliasing.rs index 084a39a2eb..55ee85f863 100644 --- a/examples/3d/anti_aliasing.rs +++ b/examples/3d/anti_aliasing.rs @@ -329,9 +329,9 @@ fn setup( TextBundle::from_section( "", TextStyle { - font: asset_server.load("fonts/FiraMono-Medium.ttf"), font_size: 20.0, color: Color::BLACK, + ..default() }, ) .with_style(Style { diff --git a/examples/3d/atmospheric_fog.rs b/examples/3d/atmospheric_fog.rs index c61176e1b9..10082abae0 100644 --- a/examples/3d/atmospheric_fog.rs +++ b/examples/3d/atmospheric_fog.rs @@ -93,13 +93,13 @@ fn setup_terrain_scene( )); } -fn setup_instructions(mut commands: Commands, asset_server: Res) { +fn setup_instructions(mut commands: Commands) { commands.spawn((TextBundle::from_section( "Press Spacebar to Toggle Atmospheric Fog.\nPress S to Toggle Directional Light Fog Influence.", TextStyle { - font: asset_server.load("fonts/FiraMono-Medium.ttf"), font_size: 15.0, color: Color::WHITE, + ..default() }, ) .with_style(Style { diff --git a/examples/3d/blend_modes.rs b/examples/3d/blend_modes.rs index 1fa14e8e8f..262728dbfc 100644 --- a/examples/3d/blend_modes.rs +++ b/examples/3d/blend_modes.rs @@ -34,7 +34,6 @@ fn setup( mut commands: Commands, mut meshes: ResMut>, mut materials: ResMut>, - asset_server: Res, ) { let base_color = Color::rgba(0.9, 0.2, 0.3, 1.0); let icosphere_mesh = meshes.add( @@ -186,15 +185,15 @@ fn setup( // Controls Text let text_style = TextStyle { - font: asset_server.load("fonts/FiraMono-Medium.ttf"), font_size: 18.0, color: Color::BLACK, + ..default() }; let label_text_style = TextStyle { - font: asset_server.load("fonts/FiraMono-Medium.ttf"), font_size: 25.0, color: Color::ORANGE, + ..default() }; commands.spawn( diff --git a/examples/3d/bloom_3d.rs b/examples/3d/bloom_3d.rs index b59fb59177..057df68d1d 100644 --- a/examples/3d/bloom_3d.rs +++ b/examples/3d/bloom_3d.rs @@ -25,7 +25,6 @@ fn setup_scene( mut commands: Commands, mut meshes: ResMut>, mut materials: ResMut>, - asset_server: Res, ) { commands.spawn(( Camera3dBundle { @@ -96,9 +95,9 @@ fn setup_scene( TextBundle::from_section( "", TextStyle { - font: asset_server.load("fonts/FiraMono-Medium.ttf"), font_size: 18.0, color: Color::BLACK, + ..default() }, ) .with_style(Style { diff --git a/examples/3d/fog.rs b/examples/3d/fog.rs index bfad6400dd..21500cbe71 100644 --- a/examples/3d/fog.rs +++ b/examples/3d/fog.rs @@ -137,13 +137,13 @@ fn setup_pyramid_scene( }); } -fn setup_instructions(mut commands: Commands, asset_server: Res) { +fn setup_instructions(mut commands: Commands) { commands.spawn((TextBundle::from_section( "", TextStyle { - font: asset_server.load("fonts/FiraMono-Medium.ttf"), font_size: 15.0, color: Color::WHITE, + ..default() }, ) .with_style(Style { diff --git a/examples/3d/parallax_mapping.rs b/examples/3d/parallax_mapping.rs index 16a893260a..c8f2585e6c 100644 --- a/examples/3d/parallax_mapping.rs +++ b/examples/3d/parallax_mapping.rs @@ -315,9 +315,9 @@ fn setup( commands.spawn(background_cube_bundle(Vec3::new(0., 0., -45.))); let style = TextStyle { - font: asset_server.load("fonts/FiraMono-Medium.ttf"), font_size: 18.0, color: Color::WHITE, + ..default() }; commands.spawn( diff --git a/examples/3d/pbr.rs b/examples/3d/pbr.rs index e5d41eccf9..a1f01106cd 100644 --- a/examples/3d/pbr.rs +++ b/examples/3d/pbr.rs @@ -78,9 +78,9 @@ fn setup( TextBundle::from_section( "Perceptual Roughness", TextStyle { - font: asset_server.load("fonts/FiraMono-Medium.ttf"), font_size: 36.0, color: Color::WHITE, + ..default() }, ) .with_style(Style { @@ -95,9 +95,9 @@ fn setup( text: Text::from_section( "Metallic", TextStyle { - font: asset_server.load("fonts/FiraMono-Medium.ttf"), font_size: 36.0, color: Color::WHITE, + ..default() }, ), style: Style { @@ -117,9 +117,9 @@ fn setup( TextBundle::from_section( "Loading Environment Map...", TextStyle { - font: asset_server.load("fonts/FiraMono-Medium.ttf"), font_size: 36.0, color: Color::RED, + ..default() }, ) .with_style(Style { diff --git a/examples/3d/tonemapping.rs b/examples/3d/tonemapping.rs index 946f5ab859..482d2bd182 100644 --- a/examples/3d/tonemapping.rs +++ b/examples/3d/tonemapping.rs @@ -75,9 +75,9 @@ fn setup( TextBundle::from_section( "", TextStyle { - font: asset_server.load("fonts/FiraMono-Medium.ttf"), font_size: 18.0, color: Color::WHITE, + ..default() }, ) .with_style(Style { @@ -243,7 +243,6 @@ fn setup_image_viewer_scene( mut meshes: ResMut>, mut materials: ResMut>, camera_transform: Res, - asset_server: Res, ) { let mut transform = camera_transform.0; transform.translation += transform.forward(); @@ -273,9 +272,9 @@ fn setup_image_viewer_scene( TextBundle::from_section( "Drag and drop an HDR or EXR file", TextStyle { - font: asset_server.load("fonts/FiraMono-Medium.ttf"), font_size: 36.0, color: Color::BLACK, + ..default() }, ) .with_text_alignment(TextAlignment::Center) diff --git a/examples/async_tasks/external_source_external_thread.rs b/examples/async_tasks/external_source_external_thread.rs index 173420ca60..57a403ef29 100644 --- a/examples/async_tasks/external_source_external_thread.rs +++ b/examples/async_tasks/external_source_external_thread.rs @@ -19,10 +19,7 @@ fn main() { struct StreamReceiver(Receiver); struct StreamEvent(u32); -#[derive(Resource, Deref)] -struct LoadedFont(Handle); - -fn setup(mut commands: Commands, asset_server: Res) { +fn setup(mut commands: Commands) { commands.spawn(Camera2dBundle::default()); let (tx, rx) = bounded::(10); @@ -40,7 +37,6 @@ fn setup(mut commands: Commands, asset_server: Res) { }); commands.insert_resource(StreamReceiver(rx)); - commands.insert_resource(LoadedFont(asset_server.load("fonts/FiraSans-Bold.ttf"))); } // This system reads from the receiver and sends events to Bevy @@ -50,15 +46,11 @@ fn read_stream(receiver: Res, mut events: EventWriter, - loaded_font: Res, -) { +fn spawn_text(mut commands: Commands, mut reader: EventReader) { let text_style = TextStyle { - font: loaded_font.clone(), font_size: 20.0, color: Color::WHITE, + ..default() }; for (per_frame, event) in reader.iter().enumerate() { diff --git a/examples/ecs/apply_system_buffers.rs b/examples/ecs/apply_system_buffers.rs index b9a2053ec6..893dc71cd5 100644 --- a/examples/ecs/apply_system_buffers.rs +++ b/examples/ecs/apply_system_buffers.rs @@ -63,7 +63,7 @@ struct AppleCount; struct OrangeCount; // Setup the counters in the UI. -fn setup(mut commands: Commands, asset_server: Res) { +fn setup(mut commands: Commands) { commands.spawn(Camera2dBundle::default()); commands @@ -82,9 +82,9 @@ fn setup(mut commands: Commands, asset_server: Res) { TextBundle::from_section( "Apple: nothing counted yet".to_string(), TextStyle { - font: asset_server.load("fonts/FiraSans-Bold.ttf"), font_size: 80.0, color: Color::ORANGE, + ..default() }, ), AppleCount, @@ -93,9 +93,9 @@ fn setup(mut commands: Commands, asset_server: Res) { TextBundle::from_section( "Orange: nothing counted yet".to_string(), TextStyle { - font: asset_server.load("fonts/FiraSans-Bold.ttf"), font_size: 80.0, color: Color::ORANGE, + ..default() }, ), OrangeCount, diff --git a/examples/ecs/state.rs b/examples/ecs/state.rs index 76869db18e..af4da80d18 100644 --- a/examples/ecs/state.rs +++ b/examples/ecs/state.rs @@ -48,7 +48,7 @@ fn setup(mut commands: Commands) { commands.spawn(Camera2dBundle::default()); } -fn setup_menu(mut commands: Commands, asset_server: Res) { +fn setup_menu(mut commands: Commands) { let button_entity = commands .spawn(NodeBundle { style: Style { @@ -78,9 +78,9 @@ fn setup_menu(mut commands: Commands, asset_server: Res) { parent.spawn(TextBundle::from_section( "Play", TextStyle { - font: asset_server.load("fonts/FiraSans-Bold.ttf"), font_size: 40.0, color: Color::rgb(0.9, 0.9, 0.9), + ..default() }, )); }); diff --git a/examples/games/alien_cake_addict.rs b/examples/games/alien_cake_addict.rs index 6726108435..a61c4f3e12 100644 --- a/examples/games/alien_cake_addict.rs +++ b/examples/games/alien_cake_addict.rs @@ -168,9 +168,9 @@ fn setup(mut commands: Commands, asset_server: Res, mut game: ResMu TextBundle::from_section( "Score:", TextStyle { - font: asset_server.load("fonts/FiraSans-Bold.ttf"), font_size: 40.0, color: Color::rgb(0.5, 0.5, 1.0), + ..default() }, ) .with_style(Style { @@ -384,7 +384,7 @@ fn gameover_keyboard( } // display the number of cake eaten before losing -fn display_score(mut commands: Commands, asset_server: Res, game: Res) { +fn display_score(mut commands: Commands, game: Res) { commands .spawn(NodeBundle { style: Style { @@ -399,9 +399,9 @@ fn display_score(mut commands: Commands, asset_server: Res, game: R parent.spawn(TextBundle::from_section( format!("Cake eaten: {}", game.cake_eaten), TextStyle { - font: asset_server.load("fonts/FiraSans-Bold.ttf"), font_size: 80.0, color: Color::rgb(0.5, 0.5, 1.0), + ..default() }, )); }); diff --git a/examples/games/breakout.rs b/examples/games/breakout.rs index a10b194edb..577b5fe681 100644 --- a/examples/games/breakout.rs +++ b/examples/games/breakout.rs @@ -223,15 +223,15 @@ fn setup( TextSection::new( "Score: ", TextStyle { - font: asset_server.load("fonts/FiraSans-Bold.ttf"), font_size: SCOREBOARD_FONT_SIZE, color: TEXT_COLOR, + ..default() }, ), TextSection::from_style(TextStyle { - font: asset_server.load("fonts/FiraMono-Medium.ttf"), font_size: SCOREBOARD_FONT_SIZE, color: SCORE_COLOR, + ..default() }), ]) .with_style(Style { diff --git a/examples/games/game_menu.rs b/examples/games/game_menu.rs index 0ba535928c..ff39d23d44 100644 --- a/examples/games/game_menu.rs +++ b/examples/games/game_menu.rs @@ -145,12 +145,9 @@ mod game { fn game_setup( mut commands: Commands, - asset_server: Res, display_quality: Res, volume: Res, ) { - let font = asset_server.load("fonts/FiraSans-Bold.ttf"); - commands .spawn(( NodeBundle { @@ -187,9 +184,9 @@ mod game { TextBundle::from_section( "Will be back to the menu shortly...", TextStyle { - font: font.clone(), font_size: 80.0, color: TEXT_COLOR, + ..default() }, ) .with_style(Style { @@ -202,25 +199,25 @@ mod game { TextSection::new( format!("quality: {:?}", *display_quality), TextStyle { - font: font.clone(), font_size: 60.0, color: Color::BLUE, + ..default() }, ), TextSection::new( " - ", TextStyle { - font: font.clone(), font_size: 60.0, color: TEXT_COLOR, + ..default() }, ), TextSection::new( format!("volume: {:?}", *volume), TextStyle { - font: font.clone(), font_size: 60.0, color: Color::GREEN, + ..default() }, ), ]) @@ -398,7 +395,6 @@ mod menu { } fn main_menu_setup(mut commands: Commands, asset_server: Res) { - let font = asset_server.load("fonts/FiraSans-Bold.ttf"); // Common style for all buttons on the screen let button_style = Style { size: Size::new(Val::Px(250.0), Val::Px(65.0)), @@ -417,9 +413,9 @@ mod menu { ..default() }; let button_text_style = TextStyle { - font: font.clone(), font_size: 40.0, color: TEXT_COLOR, + ..default() }; commands @@ -452,9 +448,9 @@ mod menu { TextBundle::from_section( "Bevy Game Menu UI", TextStyle { - font: font.clone(), font_size: 80.0, color: TEXT_COLOR, + ..default() }, ) .with_style(Style { @@ -531,7 +527,7 @@ mod menu { }); } - fn settings_menu_setup(mut commands: Commands, asset_server: Res) { + fn settings_menu_setup(mut commands: Commands) { let button_style = Style { size: Size::new(Val::Px(200.0), Val::Px(65.0)), margin: UiRect::all(Val::Px(20.0)), @@ -541,9 +537,9 @@ mod menu { }; let button_text_style = TextStyle { - font: asset_server.load("fonts/FiraSans-Bold.ttf"), font_size: 40.0, color: TEXT_COLOR, + ..default() }; commands @@ -596,11 +592,7 @@ mod menu { }); } - fn display_settings_menu_setup( - mut commands: Commands, - asset_server: Res, - display_quality: Res, - ) { + fn display_settings_menu_setup(mut commands: Commands, display_quality: Res) { let button_style = Style { size: Size::new(Val::Px(200.0), Val::Px(65.0)), margin: UiRect::all(Val::Px(20.0)), @@ -609,9 +601,9 @@ mod menu { ..default() }; let button_text_style = TextStyle { - font: asset_server.load("fonts/FiraSans-Bold.ttf"), font_size: 40.0, color: TEXT_COLOR, + ..default() }; commands @@ -698,11 +690,7 @@ mod menu { }); } - fn sound_settings_menu_setup( - mut commands: Commands, - asset_server: Res, - volume: Res, - ) { + fn sound_settings_menu_setup(mut commands: Commands, volume: Res) { let button_style = Style { size: Size::new(Val::Px(200.0), Val::Px(65.0)), margin: UiRect::all(Val::Px(20.0)), @@ -711,9 +699,9 @@ mod menu { ..default() }; let button_text_style = TextStyle { - font: asset_server.load("fonts/FiraSans-Bold.ttf"), font_size: 40.0, color: TEXT_COLOR, + ..default() }; commands diff --git a/examples/mobile/src/lib.rs b/examples/mobile/src/lib.rs index 052e363d90..843b5cb539 100644 --- a/examples/mobile/src/lib.rs +++ b/examples/mobile/src/lib.rs @@ -55,7 +55,6 @@ fn setup_scene( mut commands: Commands, mut meshes: ResMut>, mut materials: ResMut>, - asset_server: Res, ) { // plane commands.spawn(PbrBundle { @@ -122,9 +121,9 @@ fn setup_scene( TextBundle::from_section( "Test Button", TextStyle { - font: asset_server.load("fonts/FiraSans-Bold.ttf"), font_size: 30.0, color: Color::BLACK, + ..default() }, ) .with_text_alignment(TextAlignment::Center), diff --git a/examples/scene/scene.rs b/examples/scene/scene.rs index e066ba6207..537d669e7b 100644 --- a/examples/scene/scene.rs +++ b/examples/scene/scene.rs @@ -140,15 +140,15 @@ fn save_scene_system(world: &mut World) { // This is only necessary for the info message in the UI. See examples/ui/text.rs for a standalone // text example. -fn infotext_system(mut commands: Commands, asset_server: Res) { +fn infotext_system(mut commands: Commands) { commands.spawn(Camera2dBundle::default()); commands.spawn( TextBundle::from_section( "Nothing to see in this window! Check the console output!", TextStyle { - font: asset_server.load("fonts/FiraSans-Bold.ttf"), font_size: 50.0, color: Color::WHITE, + ..default() }, ) .with_style(Style { diff --git a/examples/shader/shader_prepass.rs b/examples/shader/shader_prepass.rs index 5d34f44b0a..f333b00384 100644 --- a/examples/shader/shader_prepass.rs +++ b/examples/shader/shader_prepass.rs @@ -126,9 +126,9 @@ fn setup( }); let style = TextStyle { - font: asset_server.load("fonts/FiraMono-Medium.ttf"), font_size: 18.0, color: Color::WHITE, + ..default() }; commands.spawn( diff --git a/examples/stress_tests/bevymark.rs b/examples/stress_tests/bevymark.rs index 83c1abfa56..4518b804e7 100644 --- a/examples/stress_tests/bevymark.rs +++ b/examples/stress_tests/bevymark.rs @@ -103,9 +103,9 @@ fn setup(mut commands: Commands, asset_server: Res) { TextSection::new( value, TextStyle { - font: asset_server.load("fonts/FiraSans-Bold.ttf"), font_size: 40.0, color, + ..default() }, ) }; diff --git a/examples/stress_tests/many_buttons.rs b/examples/stress_tests/many_buttons.rs index 2b177c16d4..139e4d7340 100644 --- a/examples/stress_tests/many_buttons.rs +++ b/examples/stress_tests/many_buttons.rs @@ -32,7 +32,6 @@ fn main() { })) .add_plugin(FrameTimeDiagnosticsPlugin::default()) .add_plugin(LogDiagnosticsPlugin::default()) - .init_resource::() .add_systems(Startup, setup) .add_systems(Update, button_system); @@ -69,17 +68,7 @@ fn button_system( } } -#[derive(Resource)] -struct UiFont(Handle); - -impl FromWorld for UiFont { - fn from_world(world: &mut World) -> Self { - let asset_server = world.resource::(); - UiFont(asset_server.load("fonts/FiraSans-Bold.ttf")) - } -} - -fn setup(mut commands: Commands, font: Res) { +fn setup(mut commands: Commands) { let count = ROW_COLUMN_COUNT; let count_f = count as f32; let as_rainbow = |i: usize| Color::hsl((i as f32 / count_f) * 360.0, 0.9, 0.8); @@ -97,15 +86,7 @@ fn setup(mut commands: Commands, font: Res) { for i in 0..count { for j in 0..count { let color = as_rainbow(j % i.max(1)).into(); - spawn_button( - commands, - font.0.clone_weak(), - color, - count_f, - i, - j, - spawn_text, - ); + spawn_button(commands, color, count_f, i, j, spawn_text); } } }); @@ -113,7 +94,6 @@ fn setup(mut commands: Commands, font: Res) { fn spawn_button( commands: &mut ChildBuilder, - font: Handle, color: BackgroundColor, total: f32, i: usize, @@ -142,9 +122,9 @@ fn spawn_button( commands.spawn(TextBundle::from_section( format!("{i}, {j}"), TextStyle { - font, font_size: FONT_SIZE, color: Color::rgb(0.2, 0.2, 0.2), + ..default() }, )); }); diff --git a/examples/stress_tests/many_gizmos.rs b/examples/stress_tests/many_gizmos.rs index 5d7350a22d..817a2e8aae 100644 --- a/examples/stress_tests/many_gizmos.rs +++ b/examples/stress_tests/many_gizmos.rs @@ -73,7 +73,7 @@ fn system(config: Res, time: Res