diff options
Diffstat (limited to 'pixel-client/src/render/font.rs')
-rw-r--r-- | pixel-client/src/render/font.rs | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/pixel-client/src/render/font.rs b/pixel-client/src/render/font.rs new file mode 100644 index 00000000..ff4abade --- /dev/null +++ b/pixel-client/src/render/font.rs @@ -0,0 +1,43 @@ +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::<Vec<_>>() + .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; + } + } + } +} |