use super::{sprite::SpriteDraw, AtlasLayout, Renderer}; use hurrycurry_protocol::glam::Vec2; use sdl2::rect::Rect; pub struct FontTextures { pub glyphs: [Rect; 128], } impl FontTextures { pub fn init(layout: &AtlasLayout) -> Self { FontTextures { glyphs: (0..128) .into_iter() .map(|n| { layout .get(&format!("letter_{n}+a")) .copied() .unwrap_or(Rect::new(0, 0, 0, 0)) }) .collect::>() .try_into() .unwrap(), } } } impl<'a> Renderer<'a> { pub fn draw_text(&mut self, position: Vec2, text: &str) { let mut cursor = position; for c in text.chars() { if (c as u32) < 128 { let r = self.font_textures.glyphs[c as usize]; self.draw_ui(SpriteDraw::overlay( r, cursor, Vec2::new(r.width() as f32, r.height() as f32), None, )); cursor.x += r.width() as f32; } } } }