diff options
Diffstat (limited to 'graphics/src/lib.rs')
| -rw-r--r-- | graphics/src/lib.rs | 37 |
1 files changed, 22 insertions, 15 deletions
diff --git a/graphics/src/lib.rs b/graphics/src/lib.rs index 1ca03b3..08faae3 100644 --- a/graphics/src/lib.rs +++ b/graphics/src/lib.rs @@ -2,12 +2,11 @@ //! rendering using the `raylib` library. use std::cell::RefCell; -use std::error::Error; use raylib::prelude::*; -use crate::assets::{Assets, AudioData}; -use crate::render::{FrameInfo, Renderer}; +use crate::assets::{AudioData, ImageData}; +use crate::render::{FrameRenderer, Renderer}; mod assets; mod render; @@ -15,14 +14,22 @@ mod render; /// The `KeyCode` type represents different keys being pressed on the users keyboard pub use raylib::consts::KeyboardKey as KeyCode; +/// The `Error` type used within this crate +pub type Error = Box<dyn std::error::Error>; + +/// The `Result` type used witin this crate +pub type Result<T> = std::result::Result<T, crate::Error>; + /// The `Window` type represents the game window #[derive(Debug)] pub struct Window { // core raylib handles handle: RefCell<RaylibHandle>, thread: RaylibThread, - // static assets - assets: Assets, + // persistant renderer + renderer: Renderer, + // audio data/subsystem + audio: AudioData, } impl Window { @@ -35,7 +42,7 @@ impl Window { /// /// let window = Window::new(800, 600, "Dungeon Crawl").unwrap(); /// ``` - pub fn new(width: i32, height: i32, title: &str) -> Result<Self, Box<dyn Error>> { + pub fn new(width: i32, height: i32, title: &str) -> crate::Result<Self> { let (mut handle, thread) = raylib::init() .size(width, height) .title(title) @@ -44,13 +51,15 @@ impl Window { .vsync() .build(); - // we will now initalize all assets - let assets = Assets::load(&mut handle, &thread)?; + // load assets + let audio = AudioData::load()?; + let image = ImageData::load(&mut handle, &thread)?; Ok(Self { handle: RefCell::new(handle), thread, - assets, + renderer: Renderer::new(image), + audio, }) } @@ -60,7 +69,7 @@ impl Window { !self.handle.borrow().window_should_close() } - /// Returns the renderer for the game + /// Returns the per frame renderer for the game /// /// # Examples /// ```no_run @@ -69,10 +78,8 @@ impl Window { /// let mut window = Window::new(800, 600, "Dungeon Crawl").unwrap(); /// let mut renderer = window.renderer(); /// ``` - pub fn renderer(&mut self) -> Renderer<'_> { - let info = FrameInfo::new(self.handle.get_mut(), &self.assets.image); - let handle = self.handle.get_mut().begin_drawing(&self.thread); - Renderer::new(handle, info) + pub fn renderer(&mut self) -> FrameRenderer<'_> { + self.renderer.invoke(self.handle.get_mut(), &self.thread) } /// Returns the per frame delta time @@ -102,6 +109,6 @@ impl Window { /// Get audio data for the window pub fn audio(&self) -> &AudioData { - &self.assets.audio + &self.audio } } |