TextPlugin + FontLoader
This commit is contained in:
parent
ad66f87ff6
commit
5d0d3d28c7
@ -7,7 +7,10 @@ edition = "2018"
|
|||||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
bevy_app = { path = "../bevy_app" }
|
||||||
|
bevy_asset = { path = "../bevy_asset" }
|
||||||
bevy_render = { path = "../bevy_render" }
|
bevy_render = { path = "../bevy_render" }
|
||||||
skribo = "0.1.0"
|
skribo = "0.1.0"
|
||||||
font-kit = "0.6"
|
font-kit = "0.6"
|
||||||
pathfinder_geometry = "0.5"
|
pathfinder_geometry = "0.5"
|
||||||
|
anyhow = "1.0"
|
||||||
@ -9,6 +9,9 @@ pub struct Font {
|
|||||||
pub metrics: Metrics,
|
pub metrics: Metrics,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unsafe impl Send for Font {}
|
||||||
|
unsafe impl Sync for Font {}
|
||||||
|
|
||||||
impl Font {
|
impl Font {
|
||||||
pub fn try_from_bytes(font_data: Vec<u8>) -> Result<Self, FontLoadingError> {
|
pub fn try_from_bytes(font_data: Vec<u8>) -> Result<Self, FontLoadingError> {
|
||||||
let font = font_kit::font::Font::from_bytes(Arc::new(font_data), 0)?;
|
let font = font_kit::font::Font::from_bytes(Arc::new(font_data), 0)?;
|
||||||
|
|||||||
16
crates/bevy_text/src/font_loader.rs
Normal file
16
crates/bevy_text/src/font_loader.rs
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
use crate::Font;
|
||||||
|
use bevy_asset::{AssetLoader, AssetPath};
|
||||||
|
use anyhow::Result;
|
||||||
|
|
||||||
|
#[derive(Clone)]
|
||||||
|
pub struct FontLoader;
|
||||||
|
|
||||||
|
impl AssetLoader<Font> for FontLoader {
|
||||||
|
fn from_bytes(&self, _asset_path: &AssetPath, bytes: Vec<u8>) -> Result<Font> {
|
||||||
|
Ok(Font::try_from_bytes(bytes)?)
|
||||||
|
}
|
||||||
|
fn extensions(&self) -> &[&str] {
|
||||||
|
static EXTENSIONS: &[&str] = &["ttf"];
|
||||||
|
EXTENSIONS
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,4 +1,20 @@
|
|||||||
mod font;
|
mod font;
|
||||||
|
mod font_loader;
|
||||||
mod render;
|
mod render;
|
||||||
|
|
||||||
pub use font::*;
|
pub use font::*;
|
||||||
|
pub use font_loader::*;
|
||||||
|
|
||||||
|
use bevy_app::{AppBuilder, AppPlugin};
|
||||||
|
use bevy_asset::AddAsset;
|
||||||
|
|
||||||
|
#[derive(Default)]
|
||||||
|
pub struct TextPlugin;
|
||||||
|
|
||||||
|
impl AppPlugin for TextPlugin {
|
||||||
|
fn build(&self, app: &mut AppBuilder) {
|
||||||
|
app
|
||||||
|
.add_asset::<Font>()
|
||||||
|
.add_asset_loader(FontLoader);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@ -1,5 +1,4 @@
|
|||||||
use bevy::prelude::*;
|
use bevy::prelude::*;
|
||||||
use std::{fs::File, io::Read};
|
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
App::build()
|
App::build()
|
||||||
@ -10,13 +9,13 @@ fn main() {
|
|||||||
|
|
||||||
fn setup(
|
fn setup(
|
||||||
command_buffer: &mut CommandBuffer,
|
command_buffer: &mut CommandBuffer,
|
||||||
|
asset_server: Res<AssetServer>,
|
||||||
|
mut fonts: ResMut<Assets<Font>>,
|
||||||
mut textures: ResMut<Assets<Texture>>,
|
mut textures: ResMut<Assets<Texture>>,
|
||||||
mut materials: ResMut<Assets<ColorMaterial>>,
|
mut materials: ResMut<Assets<ColorMaterial>>,
|
||||||
) {
|
) {
|
||||||
let mut font_file = File::open("assets/fonts/FiraSans-Bold.ttf").unwrap();
|
let font_handle = asset_server.load_sync(&mut fonts, "assets/fonts/FiraSans-Bold.ttf").unwrap();
|
||||||
let mut buffer = Vec::new();
|
let font = fonts.get(&font_handle).unwrap();
|
||||||
font_file.read_to_end(&mut buffer).unwrap();
|
|
||||||
let font = Font::try_from_bytes(buffer).unwrap();
|
|
||||||
|
|
||||||
let texture = font.render_text("Hello from Bevy!", Color::rgba(0.9, 0.9, 0.9, 1.0), 500, 60);
|
let texture = font.render_text("Hello from Bevy!", Color::rgba(0.9, 0.9, 0.9, 1.0), 500, 60);
|
||||||
let half_width = texture.width as f32 / 2.0;
|
let half_width = texture.width as f32 / 2.0;
|
||||||
|
|||||||
@ -33,6 +33,9 @@ impl AddDefaultPlugins for AppBuilder {
|
|||||||
#[cfg(feature = "gltf")]
|
#[cfg(feature = "gltf")]
|
||||||
self.add_plugin(bevy_gltf::GltfPlugin::default());
|
self.add_plugin(bevy_gltf::GltfPlugin::default());
|
||||||
|
|
||||||
|
#[cfg(feature = "text")]
|
||||||
|
self.add_plugin(bevy_text::TextPlugin::default());
|
||||||
|
|
||||||
#[cfg(feature = "winit")]
|
#[cfg(feature = "winit")]
|
||||||
self.add_plugin(bevy_winit::WinitPlugin::default());
|
self.add_plugin(bevy_winit::WinitPlugin::default());
|
||||||
#[cfg(not(feature = "winit"))]
|
#[cfg(not(feature = "winit"))]
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user