summaryrefslogtreecommitdiff
path: root/graphics/src/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'graphics/src/lib.rs')
-rw-r--r--graphics/src/lib.rs37
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
}
}