diff options
| author | Freya Murphy <freya@freyacat.org> | 2025-11-07 23:09:05 -0500 |
|---|---|---|
| committer | Freya Murphy <freya@freyacat.org> | 2025-11-07 23:09:05 -0500 |
| commit | ea5e91458eddbf9944a62b85a7fc44a476e69bbb (patch) | |
| tree | 423f61aa746a431cb07ec223324ef5fb174b4644 /graphics/src/render.rs | |
| parent | Moved Enemy logic to Entity Struct, fixed enemy drift while moving (diff) | |
| download | DungeonCrawl-ea5e91458eddbf9944a62b85a7fc44a476e69bbb.tar.gz DungeonCrawl-ea5e91458eddbf9944a62b85a7fc44a476e69bbb.tar.bz2 DungeonCrawl-ea5e91458eddbf9944a62b85a7fc44a476e69bbb.zip | |
graphics: convert font to bitmap texture
Diffstat (limited to 'graphics/src/render.rs')
| -rw-r--r-- | graphics/src/render.rs | 58 |
1 files changed, 27 insertions, 31 deletions
diff --git a/graphics/src/render.rs b/graphics/src/render.rs index 1fe4b85..085f9c9 100644 --- a/graphics/src/render.rs +++ b/graphics/src/render.rs @@ -10,7 +10,6 @@ use raylib::{ color::Color, math::{Rectangle, Vector2}, prelude::{RaylibDraw, RaylibMode2DExt, RaylibTextureModeExt}, - text::Font, texture::{RaylibTexture2D, RenderTexture2D, Texture2D}, }; @@ -84,25 +83,20 @@ struct Textures { // Misc error: Texture2D, // Fonts - nes_font: Font, + font: Texture2D, } impl Textures { fn new(handle: &mut RaylibHandle, thread: &RaylibThread) -> crate::Result<Self> { let atlas = handle.load_texture(thread, "assets/atlas.bmp")?; let player = handle.load_texture(thread, "assets/player.bmp")?; let error = handle.load_texture(thread, "assets/error.bmp")?; - let nes_font = handle.load_font_ex( - thread, - "assets/nintendo-nes-font.otf", - BASE_TEXTURE_SIZE.into(), - None, - )?; + let font = handle.load_texture(thread, "assets/font.bmp")?; Ok(Self { atlas, player, error, - nes_font, + font, }) } @@ -443,7 +437,7 @@ impl Renderer { // Draw MAP vert text let text_x = padding; - self.draw_vertical_text(r, text_x, y, "MAP", Color::WHITE); + self.draw_vertical_text(r, text_x, y, "MAP"); // Draw minimap in top left of UI bar let minimap_x = text_x + self.get_ui_font_size() + padding; @@ -476,7 +470,7 @@ impl Renderer { } /// Draws vertical text - fn draw_vertical_text<R>(&self, r: &mut R, x: u16, y: u16, text: &str, color: Color) + fn draw_vertical_text<R>(&self, r: &mut R, x: u16, y: u16, text: &str) where R: RaylibDraw, { @@ -489,7 +483,7 @@ impl Renderer { let byte_len = char.len_utf8(); let str = &text[byte_off..byte_off + byte_len]; let char_y = y + idx * spacing; - self.draw_text(r, str, x, char_y, color); + self.draw_text(r, str, x, char_y); byte_off += byte_len; } } @@ -515,7 +509,7 @@ impl Renderer { let slots_x = text_x + text_len; // Draw text - self.draw_vertical_text(r, text_x, padding, "INV", Color::WHITE); + self.draw_vertical_text(r, text_x, padding, "INV"); // Draw slots for idx in 0..PLAYER_INVENTORY_SIZE { @@ -586,13 +580,7 @@ impl Renderer { icon_width, 0.0, ); - self.draw_text( - r, - &format!("x{health:02}"), - text_x, - heart_y + padding, - Color::WHITE, - ); + self.draw_text(r, &format!("x{health:02}"), text_x, heart_y + padding); // draw damage let damage_y = heart_y + font_size + padding; @@ -604,13 +592,7 @@ impl Renderer { icon_width, 0.0, ); - self.draw_text( - r, - &format!("x{damage:02}"), - text_x, - damage_y + padding, - Color::WHITE, - ); + self.draw_text(r, &format!("x{damage:02}"), text_x, damage_y + padding); } /// Draws debug information ontop of other UI elements @@ -634,13 +616,27 @@ impl Renderer { } /// Draw text helper function - fn draw_text<R>(&self, r: &mut R, text: &str, x: u16, y: u16, color: Color) + fn draw_text<R>(&self, r: &mut R, text: &str, x_start: u16, y: u16) where R: RaylibDraw, { - let font = &self.textures.nes_font; - let font_size = self.get_ui_font_size(); - r.draw_text_ex(font, text, vec2! {x, y}, font_size.into(), 0.0, color); + for (idx, char) in text.bytes().enumerate() { + if !(32..=127).contains(&char) { + println!("{char}"); + continue; + } + let ax = char % 16; + let ay = (char - 32) / 16; + let x = x_start + downcast!(idx, u16) * self.get_ui_font_size(); + r.draw_inv_atlas( + &self.textures.font, + (ax.into(), ay.into()), + x, + y, + self.get_ui_font_size(), + 0.0, + ); + } } } |