X-Git-Url: http://dolda2000.com/gitweb/?a=blobdiff_plain;f=src%2Fcore%2Fapp.rs;h=62d75078e1d2d89c933b656ca2ccbbbc7e79f575;hb=b0566120fd4a404355b6e6e1d75b472bbe3f57fe;hp=8c07417181f2d1c79558e5c43b2729d5825bce9f;hpb=ca99d4d7fc9e8e2dde6c4174797196f5c5a4b7e3;p=kaka%2Frust-sdl-test.git diff --git a/src/core/app.rs b/src/core/app.rs index 8c07417..62d7507 100644 --- a/src/core/app.rs +++ b/src/core/app.rs @@ -1,5 +1,5 @@ use boll::*; -use common::{Point2D, Rect}; +use common::{Nanoseconds, Point2D, Rect}; use core::controller::ControllerManager; use point; // defined in common, but loaded from main... use rand::Rng; @@ -15,8 +15,6 @@ use sprites::SpriteManager; use std::f32::consts::PI; use time::PreciseTime; -pub type Nanoseconds = u64; - const FPS: u32 = 60; const NS_PER_FRAME: u32 = 1_000_000_000 / FPS; @@ -47,7 +45,7 @@ impl AppBuilder { let context = sdl2::init().unwrap(); sdl2::image::init(sdl2::image::InitFlag::PNG)?; let video = context.video()?; - self.print_video_display_modes(&video); + //self.print_video_display_modes(&video); let window = video .window( @@ -86,6 +84,7 @@ impl AppBuilder { }) } + #[allow(dead_code)] fn print_video_display_modes(&self, video: &VideoSubsystem) { println!("video subsystem: {:?}", video); println!("current_video_driver: {:?}", video.current_video_driver()); @@ -131,7 +130,7 @@ pub struct App { event_pump: EventPump, sprites: SpriteManager, state: Box, - ctrl_man: ControllerManager, + pub ctrl_man: ControllerManager, } impl App { @@ -147,10 +146,12 @@ impl App { } pub fn start(&mut self) { - let mut frame_count: u64 = 0; - let mut fps_time = PreciseTime::now(); + // let mut frame_count: u64 = 0; + // let mut fps_time = PreciseTime::now(); let mut last_time = PreciseTime::now(); + self.state.enter(&mut self.ctrl_man); + 'running: loop { if let Err(_) = self.handle_events() { break 'running; @@ -163,14 +164,14 @@ impl App { self.render(); - frame_count += 1; - if frame_count == FPS as u64 { - let duration = fps_time.to(PreciseTime::now()).num_nanoseconds().unwrap() as f64 - / 1_000_000_000.0; - // println!("fps: {}", frame_count as f64 / duration); - frame_count = 0; - fps_time = PreciseTime::now(); - } + // frame_count += 1; + // if frame_count == FPS as u64 { + // let duration = fps_time.to(PreciseTime::now()).num_nanoseconds().unwrap() as f64 + // / 1_000_000_000.0; + // // println!("fps: {}", frame_count as f64 / duration); + // frame_count = 0; + // fps_time = PreciseTime::now(); + // } } self.state.leave(); @@ -180,10 +181,6 @@ impl App { for event in self.event_pump.poll_iter() { self.ctrl_man.handle_event(&event); match event { - Event::ControllerButtonDown { .. } => { - let c = self.ctrl_man.controllers[0].clone(); - c.borrow().rumble(1.0, 300); - } Event::Quit { .. } | Event::KeyDown { keycode: Some(Keycode::Escape), @@ -246,7 +243,7 @@ impl App { } => { println!("window focus lost") } - _ => self.state.on_event(event), + _ => self.state.handle_event(event), } } Ok(()) @@ -261,10 +258,11 @@ impl App { } pub trait AppState { + fn enter(&mut self, ctrl_man: &mut ControllerManager); + fn leave(&mut self); fn update(&mut self, dt: Nanoseconds); fn render(&mut self, canvas: &mut Canvas, sprites: &mut SpriteManager); - fn leave(&self); - fn on_event(&mut self, event: Event); + fn handle_event(&mut self, event: Event); } type Bollar = Vec>; @@ -313,6 +311,8 @@ impl ActiveState { } impl AppState for ActiveState { + fn enter(&mut self, ctrl_man: &mut ControllerManager) {} + fn update(&mut self, dt: Nanoseconds) { for b in &mut self.bolls { b.update(); @@ -430,11 +430,11 @@ impl AppState for ActiveState { } } - fn leave(&self) { + fn leave(&mut self) { println!("number of bolls: {}", self.bolls.len()); } - fn on_event(&mut self, event: Event) { + fn handle_event(&mut self, event: Event) { match event { Event::KeyDown { keycode: Some(Keycode::KpPlus),