diff --git a/src/main.rs b/src/main.rs index aa19be5..d9a449e 100644 --- a/src/main.rs +++ b/src/main.rs @@ -3,6 +3,7 @@ extern crate sdl2_image; use std::num::Float; +use std::path::Path; use sdl2::video::{Window, WindowPos, OPENGL}; use sdl2::timer::{get_ticks, delay}; @@ -30,7 +31,7 @@ const SCREEN_HEIGHT : i32 = 640; const TILE_WIDTH : i32 = 32; const TILE_HEIGHT : i32 = 32; -const MS_PER_UPDATE : usize = 10; +const MS_PER_UPDATE : u32 = 10; const PLAYER_SPEED_X : f32 = 4.0; const PLAYER_THRESHOLD_X : f32 = 0.2; @@ -51,10 +52,11 @@ enum Tile<'a> { fn main() { - sdl2::init(sdl2::INIT_EVERYTHING); + let sdl_context = sdl2::init(sdl2::INIT_EVERYTHING).unwrap(); + sdl2_image::init(sdl2_image::INIT_PNG); - let window = match Window::new("Super Matte Bros", WindowPos::PosCentered, WindowPos::PosCentered, SCREEN_WIDTH as isize, SCREEN_HEIGHT as isize, OPENGL) { + let window = match Window::new("Super Matte Bros", WindowPos::PosCentered, WindowPos::PosCentered, SCREEN_WIDTH, SCREEN_HEIGHT, OPENGL) { Ok(window) => window, Err(err) => panic!("failed to create window: {}", err) }; @@ -190,7 +192,7 @@ fn main() { layer.set_tile(52, 17, Tile::Background(Rect::new(16 * 10, 16 * 8, 16, 16))); - for x in range(0, 212) { + for x in 0..212 { layer.set_tile(x, 18, Tile::Static(&floor_sprite, true)); layer.set_tile(x, 19, Tile::Static(&floor_sprite, true)); } @@ -200,11 +202,12 @@ fn main() { let mut player = Player::new(390.0, 390.0); - let mut current : usize; - let mut elapsed : usize; - let mut previous : usize = get_ticks(); - let mut lag : usize = 0; + let mut current : u32; + let mut elapsed : u32; + let mut previous : u32 = get_ticks(); + let mut lag : u32 = 0; + let mut drawer = renderer.drawer(); let mut event_pump = sdl_context.event_pump(); 'main : loop { @@ -215,23 +218,20 @@ fn main() { keyboard.clear(); - 'event : loop { - for event in event_pump.poll_iter() { - use sdl2::event::Event; + for event in event_pump.poll_iter() { + use sdl2::event::Event; - match event { - Event::Quit(_) => break 'main, - Event::KeyDown(_, _, key, _, _, repeat) => { - if repeat == false { - keyboard.key_down(key); - } - }, - Event::KeyUp(_, _, key, _, _, _) => { - keyboard.key_up(key); - }, - Event::None => break 'event, - _ => (), - } + match event { + Event::Quit {..} => break 'main, + Event::KeyDown {keycode, repeat, ..} => { + if repeat == false { + keyboard.key_down(keycode); + } + }, + Event::KeyUp {keycode, ..} => { + keyboard.key_up(keycode); + }, + _ => (), } } @@ -287,7 +287,7 @@ fn main() { let p = player.x + player.w as f32; let mut d = player.dx; - for y in range(intersect.y, intersect.y + intersect.h + 1) { + for y in intersect.y..intersect.y + intersect.h + 1 { let mut x = intersect.x; loop { @@ -323,7 +323,7 @@ fn main() { let p = player.x; let mut d = player.dx; - for y in range(intersect.y, intersect.y + intersect.h + 1) { + for y in intersect.y..intersect.y + intersect.h + 1 { let mut x = intersect.x; loop { @@ -361,7 +361,7 @@ fn main() { let p = player.y + player.h as f32; let mut d = player.dy; - for x in range(intersect.x, intersect.x + intersect.w + 1) { + for x in intersect.x..intersect.x + intersect.w + 1 { let mut y = intersect.y; loop { @@ -401,7 +401,7 @@ fn main() { let p = player.y; let mut d = player.dy; - for x in range(intersect.x, intersect.x + intersect.w + 1) { + for x in intersect.x..intersect.x + intersect.w + 1 { let mut y = intersect.y; loop { @@ -443,35 +443,34 @@ fn main() { lag -= MS_PER_UPDATE; } - let _ = renderer.set_draw_color(Color::RGB(93, 148, 251)); - let _ = renderer.clear(); + drawer.set_draw_color(Color::RGB(93, 148, 251)); + drawer.clear(); layer.for_each_intersecting(&camera.to_rect(), |tile: &Tile, position: &Rect| { let object = camera_relative_rect(&camera.to_rect(), position); match *tile { Tile::Background(src) => { - let _ = renderer.copy(&world_sprites, Some(src), Some(object)); + let _ = drawer.copy(&world_sprites, Some(src), Some(object)); }, Tile::Floor(src) => { - let _ = renderer.copy(&world_sprites, Some(src), Some(object)); + let _ = drawer.copy(&world_sprites, Some(src), Some(object)); }, - Tile::Static(ref sprite, _) => sprite.render(&renderer, &object), + Tile::Static(ref sprite, _) => sprite.render(&mut drawer, &object), _ => () } }); let player_rect = camera_relative_rect(&camera.to_rect(), &player.to_rect()); - player_sprite.render(&renderer, &player_rect); + player_sprite.render(&mut drawer, &player_rect); - renderer.present(); + drawer.present(); delay(5); } sdl2_image::quit(); - sdl2::quit(); } fn camera_relative_rect(camera: &Rect, other: &Rect) -> Rect { diff --git a/src/sprite.rs b/src/sprite.rs index 829b86f..b4f431b 100644 --- a/src/sprite.rs +++ b/src/sprite.rs @@ -1,15 +1,15 @@ -use sdl2::render::{Texture, Renderer}; +use sdl2::render::{Texture, RenderDrawer}; use sdl2::rect::Rect; pub trait Sprite { - fn update(&mut self, usize) {} - fn render(&self, &Renderer, &Rect); + fn update(&mut self, u32) {} + fn render(&self, &mut RenderDrawer, &Rect); } pub struct StaticSprite<'a> { - texture: &'a Texture, + texture: &'a Texture<'a>, x: i32, y: i32 } @@ -25,20 +25,20 @@ impl<'a> StaticSprite<'a> { } impl<'a> Sprite for StaticSprite<'a> { - fn render(&self, renderer: &Renderer, destination: &Rect) { - let _ = renderer.copy(self.texture, Some(Rect::new(self.x, self.y, 16, 16)), Some(*destination)); + fn render(&self, drawer: &mut RenderDrawer, destination: &Rect) { + drawer.copy(self.texture, Some(Rect::new(self.x, self.y, 16, 16)), Some(*destination)); } } pub struct AnimatedSprite<'a> { - texture: &'a Texture, + texture: &'a Texture<'a>, x: i32, y: i32, frame: i32, frames: i32, - time: usize, - frame_time: usize + time: u32, + frame_time: u32 } impl<'a> AnimatedSprite<'a> { @@ -50,13 +50,13 @@ impl<'a> AnimatedSprite<'a> { frame: 0, frames: frames, time: 0, - frame_time: 1000 / fps as usize + frame_time: 1000 / fps as u32 } } } impl<'a> Sprite for AnimatedSprite<'a> { - fn update(&mut self, elapsed: usize) { + fn update(&mut self, elapsed: u32) { self.time += elapsed; if self.time > self.frame_time { @@ -73,7 +73,7 @@ impl<'a> Sprite for AnimatedSprite<'a> { } } - fn render(&self, renderer: &Renderer, destination: &Rect) { - let _ = renderer.copy(self.texture, Some(Rect::new(self.x, self.y, 16, 16)), Some(*destination)); + fn render(&self, drawer: &mut RenderDrawer, destination: &Rect) { + drawer.copy(self.texture, Some(Rect::new(self.x, self.y, 16, 16)), Some(*destination)); } } diff --git a/src/tile.rs b/src/tile.rs index 2719c30..590165e 100644 --- a/src/tile.rs +++ b/src/tile.rs @@ -58,8 +58,8 @@ impl Layer where T: Clone { pub fn for_each_intersecting(&self, rect: &Rect, mut f: F) { if let Some(intersect) = self.find_intersecting(rect) { - for y in range(intersect.y, intersect.y + intersect.h + 1) { - for x in range(intersect.x, intersect.x + intersect.w + 1) { + for y in intersect.y..intersect.y + intersect.h + 1 { + for x in intersect.x..intersect.x + intersect.w + 1 { let position = Rect::new(x * self.tile_width, y * self.tile_height, self.tile_width, self.tile_height); f(self.get_tile(x, y).unwrap(), &position);