summaryrefslogtreecommitdiff
path: root/pixel-client/src/render/font.rs
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2024-07-21 18:45:11 +0200
committermetamuffin <metamuffin@disroot.org>2024-07-21 22:17:54 +0200
commit64e00aad013da92d29851d3e8109a006b4dff8c5 (patch)
tree081e9a2829f3c247d48bf6468030f35c85b2db4f /pixel-client/src/render/font.rs
parentb1eba76afaf7a506ff912634da6220db15d0023e (diff)
downloadhurrycurry-64e00aad013da92d29851d3e8109a006b4dff8c5.tar
hurrycurry-64e00aad013da92d29851d3e8109a006b4dff8c5.tar.bz2
hurrycurry-64e00aad013da92d29851d3e8109a006b4dff8c5.tar.zst
pc: draw text
Diffstat (limited to 'pixel-client/src/render/font.rs')
-rw-r--r--pixel-client/src/render/font.rs43
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;
+ }
+ }
+ }
+}