From 3588359bb9b0f65146ff837301a304139e512077 Mon Sep 17 00:00:00 2001 From: Yash Karandikar Date: Sun, 6 Mar 2022 10:55:10 -0600 Subject: [PATCH] Create basic Game struct --- Cargo.toml | 1 + src/lib.rs | 63 ++++++++++++++++++++++++++++++++++++++++++++++++------ 2 files changed, 58 insertions(+), 6 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index efa03b0..6db403d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,3 +6,4 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] +sdl2 = "0.35.2" diff --git a/src/lib.rs b/src/lib.rs index 1b4a90c..d9fc4f1 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,8 +1,59 @@ -#[cfg(test)] -mod tests { - #[test] - fn it_works() { - let result = 2 + 2; - assert_eq!(result, 4); +use sdl2::{video::{WindowBuildError, Window}, IntegerOrSdlError, render::Canvas, EventPump}; + +pub struct CatboxError(String); + +impl From for CatboxError { + fn from(e: WindowBuildError) -> Self { + CatboxError(format!("{}", e)) } } + +impl From for CatboxError { + fn from(e: String) -> Self { + CatboxError(e) + } +} + +impl From for CatboxError { + fn from(e: IntegerOrSdlError) -> Self { + CatboxError(format!("{}", e)) + } +} + +pub type Result = std::result::Result; + +pub struct Game { + title: String, + width: u32, + height: u32, +} + +impl Game { + pub fn new(title: &str, width: u32, height: u32) -> Self { + Self { + title: title.to_string(), + width, + height + } + } + + pub fn run, &EventPump)>(&self, func: F) -> Result<()> { + let sdl_context = sdl2::init()?; + let video_subsystem = sdl_context.video()?; + + let window = video_subsystem.window(&self.title, self.width, self.height) + .position_centered() + .build()?; + + let mut canvas = window.into_canvas().build()?; + + let mut event_pump = sdl_context.event_pump()?; + + loop { + func(&canvas, &event_pump); + canvas.present(); + } + + Ok(()) + } +} \ No newline at end of file