summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--assets/font.bmpbin0 -> 49290 bytes
-rw-r--r--assets/nintendo-nes-font.otfbin12696 -> 0 bytes
-rw-r--r--graphics/src/render.rs58
3 files changed, 27 insertions, 31 deletions
diff --git a/assets/font.bmp b/assets/font.bmp
new file mode 100644
index 0000000..79594c6
--- /dev/null
+++ b/assets/font.bmp
Binary files differ
diff --git a/assets/nintendo-nes-font.otf b/assets/nintendo-nes-font.otf
deleted file mode 100644
index 277da68..0000000
--- a/assets/nintendo-nes-font.otf
+++ /dev/null
Binary files differ
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,
+ );
+ }
}
}