use bevy::prelude::*;
use bevy::text::{Font, FontSource};
pub const DEFAULT_FAMILY: &str = "Fira Sans";
#[derive(Resource, Debug)]
pub struct PfFonts {
pub faces: Vec<Handle<Font>>,
}
pub(crate) fn register_builtin_fonts(app: &mut App) {
let Some(mut fonts) = app.world_mut().get_resource_mut::<Assets<Font>>() else {
return;
};
let faces = vec![
fonts.add(Font::from_bytes(
include_bytes!("../assets/fonts/FiraSans-Regular.ttf").to_vec(),
)),
fonts.add(Font::from_bytes(
include_bytes!("../assets/fonts/FiraSans-Bold.ttf").to_vec(),
)),
fonts.add(Font::from_bytes(
include_bytes!("../assets/fonts/FiraSans-Italic.ttf").to_vec(),
)),
fonts.add(Font::from_bytes(
include_bytes!("../assets/fonts/FiraSans-BoldItalic.ttf").to_vec(),
)),
];
app.insert_resource(PfFonts { faces });
}
pub fn default_font() -> FontSource {
FontSource::Family(DEFAULT_FAMILY.into())
}
pub fn resolve_family(family: &str) -> FontSource {
let name = family.trim();
let lower = name.to_ascii_lowercase();
match lower.as_str() {
"segoe ui"
| "arial"
| "helvetica"
| "helvetica neue"
| "tahoma"
| "verdana"
| "calibri"
| "trebuchet ms"
| "global user interface"
| "sans-serif"
| "sans serif" => default_font(),
"consolas" | "courier new" | "courier" | "cascadia code" | "cascadia mono"
| "lucida console" | "monospace" | "global monospace" => FontSource::Monospace,
"times new roman" | "georgia" | "cambria" | "serif" | "global serif" => FontSource::Serif,
_ => FontSource::Family(name.into()),
}
}