diff options
| author | Freya Murphy <freya@freyacat.org> | 2025-10-08 20:37:19 -0400 |
|---|---|---|
| committer | Freya Murphy <freya@freyacat.org> | 2025-10-08 20:39:00 -0400 |
| commit | f7d7a32fe0efa34cb0c3be7feac747752de428c9 (patch) | |
| tree | 5a75df9228b2f0038fb54750e0ff1df4ab7f90d6 /graphics/src/render.rs | |
| parent | Rebase changes into docs and README (diff) | |
| download | DungeonCrawl-f7d7a32fe0efa34cb0c3be7feac747752de428c9.tar.gz DungeonCrawl-f7d7a32fe0efa34cb0c3be7feac747752de428c9.tar.bz2 DungeonCrawl-f7d7a32fe0efa34cb0c3be7feac747752de428c9.zip | |
graphics: create Renderer struct
Diffstat (limited to 'graphics/src/render.rs')
| -rw-r--r-- | graphics/src/render.rs | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/graphics/src/render.rs b/graphics/src/render.rs new file mode 100644 index 0000000..6a566ce --- /dev/null +++ b/graphics/src/render.rs @@ -0,0 +1,93 @@ +use dungeon::Dungeon; +use raylib::{ + color::Color, + prelude::{RaylibDraw, RaylibDrawHandle}, +}; + +#[cfg(debug_assertions)] +use raylib::RaylibHandle; + +/// Debug information used each frame +#[cfg(debug_assertions)] +pub struct DebugInfo { + pub fps: u32, +} + +#[cfg(debug_assertions)] +impl DebugInfo { + pub fn new(handle: &RaylibHandle) -> Self { + let fps = handle.get_fps(); + Self { fps } + } +} + +/// A `Renderer` is a renderer for a single +/// frame of the game. It is created per frame. +pub struct Renderer<'a> { + handle: RaylibDrawHandle<'a>, + #[cfg(debug_assertions)] + debug: DebugInfo, +} +impl<'a> Renderer<'a> { + /// Creates the renderer for the current frame + #[cfg(debug_assertions)] + pub(crate) fn new(handle: RaylibDrawHandle<'a>, debug: DebugInfo) -> Self { + Self { handle, debug } + } + + /// Creates the renderer for the current frame + #[cfg(not(debug_assertions))] + pub(crate) fn new(handle: RaylibDrawHandle<'a>) -> Self { + Self { handle } + } + + /// Returns the current render width + pub fn render_width(&mut self) -> i32 { + self.handle.get_render_width() + } + + /// Returns the current render height + pub fn render_height(&mut self) -> i32 { + self.handle.get_render_height() + } + + /// Clear the screen + pub fn clear(&mut self) { + self.handle.clear_background(Color::BLACK); + } + + /// Draws an entire frame + pub fn draw_frame(&mut self, dungeon: &Dungeon) { + // Clear the background to black + self.clear(); + + // Draw the dungeon + self.draw_tiles(dungeon); + self.draw_player(dungeon); + + // Draw fps (debug mode only) + #[cfg(debug_assertions)] + self.draw_fps(self.debug.fps); + } + + /// Draw game over screen + pub fn draw_game_over(&mut self) { + // TODO: + } + + /// Draw the player sprite + pub fn draw_player(&mut self, _dungeon: &Dungeon) { + // TODO: + } + + /// Draw dungeon tiles + pub fn draw_tiles(&mut self, _dungeon: &Dungeon) { + // TODO: + } + + /// Draw FPS counter + pub fn draw_fps(&mut self, fps: u32) { + let fps_str = format!("{fps}"); + self.handle.draw_text(&fps_str, 10, 10, 30, Color::YELLOW); + } +} |