X-Git-Url: http://git.dolda2000.com/gitweb/?a=blobdiff_plain;f=src%2Fgame%2Fapp.rs;h=b37e8fd987d5da63f7a6a066d1cb15ab46ea26b9;hb=6edafdc0938ce553fc8976b253f3f009309817c1;hp=50acaa10725b6a3b689e2cd089e95b6b48559089;hpb=1e322944b05e76544fb6a5f541a517aedb2c4800;p=kaka%2Frust-sdl-test.git diff --git a/src/game/app.rs b/src/game/app.rs index 50acaa1..b37e8fd 100644 --- a/src/game/app.rs +++ b/src/game/app.rs @@ -9,44 +9,83 @@ use sdl2::video::Window; use ::{SCREEN_HEIGHT, SCREEN_WIDTH}; use boll::*; -use common::Point2D; +use common::{Point2D, Rect}; use sprites::SpriteManager; use NS_PER_FRAME; use point; // defined in common, but loaded from main... pub type Nanoseconds = u64; -pub struct App { - pub canvas: Canvas, - pub event_pump: EventPump, - pub sprites: SpriteManager, - pub state: Box, +#[derive(Default)] +pub struct AppBuilder { + resolution: Rect, + fps: u8, + state: Option>, + title: Option, } -impl App { - pub fn new() -> App { +impl AppBuilder { + pub fn with_resolution(mut self, width: u16, height: u16) -> Self { + self.resolution = Rect { width, height }; + self + } + + pub fn with_fps(mut self, fps: u8) -> Self { + unimplemented!() + // self.fps = fps; + // self + } + + pub fn with_state(mut self, state: Box) -> Self { + self.state = Some(state); + self + } + + pub fn with_title(mut self, title: &str) -> Self { + self.title = Some(title.to_string()); + self + } + + pub fn start(self) -> App { let context = sdl2::init().unwrap(); sdl2::image::init(sdl2::image::InitFlag::PNG).unwrap(); - let window = context.video().unwrap().window("SDL test", SCREEN_WIDTH, SCREEN_HEIGHT) + let window = context + .video().unwrap() + .window(&self.title.unwrap(), self.resolution.width.into(), self.resolution.height.into()) .position_centered() .opengl() - .build() - .unwrap(); + .build().unwrap(); context.mouse().show_cursor(false); + let mut canvas = window.into_canvas().build().unwrap(); canvas.set_blend_mode(BlendMode::Add); canvas.set_draw_color(Color::RGB(0, 0, 0)); canvas.clear(); canvas.present(); + let event_pump = context.event_pump().unwrap(); let sprites = SpriteManager::new(canvas.texture_creator()); + App { canvas, event_pump, sprites, - state: Box::new(ActiveState::new()), + state: self.state.unwrap_or(Box::new(ActiveState::new())), } } +} + +pub struct App { + pub canvas: Canvas, + pub event_pump: EventPump, + pub sprites: SpriteManager, + pub state: Box, +} + +impl App { + pub fn new() -> AppBuilder { + Default::default() + } pub fn load_sprites(&mut self, sprites: &[(&str, &str)]) { for (name, file) in sprites { @@ -70,7 +109,7 @@ pub struct ActiveState { } impl ActiveState { - fn new() -> ActiveState { + pub fn new() -> ActiveState { ActiveState { bolls: Bollar::new(), boll_size: 1,