1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
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) -> Vec2 {
let mut cursor = position;
let mut line_height = 0f32;
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;
line_height = line_height.max(r.height() as f32)
}
}
cursor + Vec2::Y * line_height
}
}
|