Update crates.
Fmt. Clippy.
This commit is contained in:
101
Cargo.lock
generated
101
Cargo.lock
generated
@@ -1,94 +1,119 @@
|
|||||||
[root]
|
|
||||||
name = "super-matte-bros"
|
|
||||||
version = "0.0.1"
|
|
||||||
dependencies = [
|
|
||||||
"sdl2 0.28.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "bitflags"
|
name = "bitflags"
|
||||||
version = "0.7.0"
|
version = "0.7.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "cfg-if"
|
||||||
|
version = "0.1.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "fuchsia-zircon"
|
||||||
|
version = "0.2.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
dependencies = [
|
||||||
|
"fuchsia-zircon-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "fuchsia-zircon-sys"
|
||||||
|
version = "0.2.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
dependencies = [
|
||||||
|
"bitflags 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "lazy_static"
|
name = "lazy_static"
|
||||||
version = "0.2.2"
|
version = "0.2.11"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "libc"
|
name = "libc"
|
||||||
version = "0.2.19"
|
version = "0.2.33"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "num"
|
name = "num"
|
||||||
version = "0.1.36"
|
version = "0.1.40"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"num-integer 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)",
|
"num-integer 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"num-iter 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)",
|
"num-iter 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"num-traits 0.1.36 (registry+https://github.com/rust-lang/crates.io-index)",
|
"num-traits 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "num-integer"
|
name = "num-integer"
|
||||||
version = "0.1.32"
|
version = "0.1.35"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"num-traits 0.1.36 (registry+https://github.com/rust-lang/crates.io-index)",
|
"num-traits 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "num-iter"
|
name = "num-iter"
|
||||||
version = "0.1.32"
|
version = "0.1.34"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"num-integer 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)",
|
"num-integer 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"num-traits 0.1.36 (registry+https://github.com/rust-lang/crates.io-index)",
|
"num-traits 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "num-traits"
|
name = "num-traits"
|
||||||
version = "0.1.36"
|
version = "0.1.40"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "rand"
|
name = "rand"
|
||||||
version = "0.3.15"
|
version = "0.3.18"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"libc 0.2.19 (registry+https://github.com/rust-lang/crates.io-index)",
|
"fuchsia-zircon 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"libc 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "sdl2"
|
name = "sdl2"
|
||||||
version = "0.28.0"
|
version = "0.31.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bitflags 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"bitflags 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"lazy_static 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
"lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"libc 0.2.19 (registry+https://github.com/rust-lang/crates.io-index)",
|
"libc 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"num 0.1.36 (registry+https://github.com/rust-lang/crates.io-index)",
|
"num 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"rand 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)",
|
"rand 0.3.18 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"sdl2-sys 0.27.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
"sdl2-sys 0.31.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "sdl2-sys"
|
name = "sdl2-sys"
|
||||||
version = "0.27.2"
|
version = "0.31.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"libc 0.2.19 (registry+https://github.com/rust-lang/crates.io-index)",
|
"cfg-if 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "super-matte-bros"
|
||||||
|
version = "0.0.1"
|
||||||
|
dependencies = [
|
||||||
|
"sdl2 0.31.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
|
|
||||||
[metadata]
|
[metadata]
|
||||||
"checksum bitflags 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "aad18937a628ec6abcd26d1489012cc0e18c21798210f491af69ded9b881106d"
|
"checksum bitflags 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "aad18937a628ec6abcd26d1489012cc0e18c21798210f491af69ded9b881106d"
|
||||||
"checksum lazy_static 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6abe0ee2e758cd6bc8a2cd56726359007748fbf4128da998b65d0b70f881e19b"
|
"checksum cfg-if 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "d4c819a1287eb618df47cc647173c5c4c66ba19d888a6e50d605672aed3140de"
|
||||||
"checksum libc 0.2.19 (registry+https://github.com/rust-lang/crates.io-index)" = "9e030dc72013ed68994d1b2cbf36a94dd0e58418ba949c4b0db7eeb70a7a6352"
|
"checksum fuchsia-zircon 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f6c0581a4e363262e52b87f59ee2afe3415361c6ec35e665924eb08afe8ff159"
|
||||||
"checksum num 0.1.36 (registry+https://github.com/rust-lang/crates.io-index)" = "bde7c03b09e7c6a301ee81f6ddf66d7a28ec305699e3d3b056d2fc56470e3120"
|
"checksum fuchsia-zircon-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "43f3795b4bae048dc6123a6b972cadde2e676f9ded08aef6bb77f5f157684a82"
|
||||||
"checksum num-integer 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)" = "fb24d9bfb3f222010df27995441ded1e954f8f69cd35021f6bef02ca9552fb92"
|
"checksum lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "76f033c7ad61445c5b347c7382dd1237847eb1bce590fe50365dcb33d546be73"
|
||||||
"checksum num-iter 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)" = "287a1c9969a847055e1122ec0ea7a5c5d6f72aad97934e131c83d5c08ab4e45c"
|
"checksum libc 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)" = "5ba3df4dcb460b9dfbd070d41c94c19209620c191b0340b929ce748a2bcd42d2"
|
||||||
"checksum num-traits 0.1.36 (registry+https://github.com/rust-lang/crates.io-index)" = "a16a42856a256b39c6d3484f097f6713e14feacd9bfb02290917904fae46c81c"
|
"checksum num 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)" = "a311b77ebdc5dd4cf6449d81e4135d9f0e3b153839ac90e648a8ef538f923525"
|
||||||
"checksum rand 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)" = "022e0636ec2519ddae48154b028864bdce4eaf7d35226ab8e65c611be97b189d"
|
"checksum num-integer 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)" = "d1452e8b06e448a07f0e6ebb0bb1d92b8890eea63288c0b627331d53514d0fba"
|
||||||
"checksum sdl2 0.28.0 (registry+https://github.com/rust-lang/crates.io-index)" = "29301273acc73295e4864a069bf9ad791ef0f819f4fc2a4653aa55818f1cbb05"
|
"checksum num-iter 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)" = "7485fcc84f85b4ecd0ea527b14189281cf27d60e583ae65ebc9c088b13dffe01"
|
||||||
"checksum sdl2-sys 0.27.2 (registry+https://github.com/rust-lang/crates.io-index)" = "37cfe343db4cd2159cab098096fff52e92d513c2a5b1ee06abbfd5db5323a64d"
|
"checksum num-traits 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)" = "99843c856d68d8b4313b03a17e33c4bb42ae8f6610ea81b28abe076ac721b9b0"
|
||||||
|
"checksum rand 0.3.18 (registry+https://github.com/rust-lang/crates.io-index)" = "6475140dfd8655aeb72e1fd4b7a1cc1c202be65d71669476e392fe62532b9edd"
|
||||||
|
"checksum sdl2 0.31.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a74c2a98a354b20713b90cce70aef9e927e46110d1bc4ef728fd74e0d53eba60"
|
||||||
|
"checksum sdl2-sys 0.31.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5c543ce8a6e33a30cb909612eeeb22e693848211a84558d5a00bb11e791b7ab7"
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ version = "0.0.1"
|
|||||||
authors = ["logaritmisk <anders.e.olsson@gmail.com>"]
|
authors = ["logaritmisk <anders.e.olsson@gmail.com>"]
|
||||||
|
|
||||||
[dependencies.sdl2]
|
[dependencies.sdl2]
|
||||||
version = "0.28"
|
version = "0.31"
|
||||||
default-features = false
|
default-features = false
|
||||||
features = ["image"]
|
features = ["image"]
|
||||||
|
|
||||||
|
|||||||
@@ -41,10 +41,12 @@ impl Camera {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn to_relative_rect(&self, rect: &Rect) -> Rect {
|
pub fn to_relative_rect(&self, rect: &Rect) -> Rect {
|
||||||
Rect::new(rect.x() - self.x,
|
Rect::new(
|
||||||
|
rect.x() - self.x,
|
||||||
rect.y() - self.y,
|
rect.y() - self.y,
|
||||||
rect.width(),
|
rect.width(),
|
||||||
rect.height())
|
rect.height(),
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn to_rect(&self) -> Rect {
|
pub fn to_rect(&self) -> Rect {
|
||||||
|
|||||||
@@ -15,7 +15,9 @@ pub struct PlayerJumpCommand<'a> {
|
|||||||
|
|
||||||
impl<'a> PlayerJumpCommand<'a> {
|
impl<'a> PlayerJumpCommand<'a> {
|
||||||
pub fn new(game_object: &'a mut GameObject<'a>) -> PlayerJumpCommand<'a> {
|
pub fn new(game_object: &'a mut GameObject<'a>) -> PlayerJumpCommand<'a> {
|
||||||
PlayerJumpCommand { game_object: RefCell::new(game_object) }
|
PlayerJumpCommand {
|
||||||
|
game_object: RefCell::new(game_object),
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
use sdl2::rect::Rect;
|
use sdl2::rect::Rect;
|
||||||
use sdl2::render::Renderer;
|
use sdl2::render::Canvas;
|
||||||
|
use sdl2::video::Window;
|
||||||
|
|
||||||
use game_object::GameObject;
|
use game_object::GameObject;
|
||||||
|
|
||||||
@@ -9,5 +10,5 @@ pub trait Updatable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub trait Renderable {
|
pub trait Renderable {
|
||||||
fn render(&self, object: &GameObject, f64, &mut Renderer, &Rect);
|
fn render(&self, object: &GameObject, f64, &mut Canvas<Window>, &Rect);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
use sdl2::rect::Rect;
|
use sdl2::rect::Rect;
|
||||||
use sdl2::render::Renderer;
|
use sdl2::render::Canvas;
|
||||||
|
use sdl2::video::Window;
|
||||||
|
|
||||||
use component::{Updatable, Renderable};
|
use component::{Renderable, Updatable};
|
||||||
|
|
||||||
|
|
||||||
pub struct GameObject<'a> {
|
pub struct GameObject<'a> {
|
||||||
@@ -18,11 +19,12 @@ pub struct GameObject<'a> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl<'a> GameObject<'a> {
|
impl<'a> GameObject<'a> {
|
||||||
pub fn new(x: f32,
|
pub fn new(
|
||||||
|
x: f32,
|
||||||
y: f32,
|
y: f32,
|
||||||
physics: Box<Updatable + 'a>,
|
physics: Box<Updatable + 'a>,
|
||||||
graphics: Box<Renderable + 'a>)
|
graphics: Box<Renderable + 'a>,
|
||||||
-> GameObject<'a> {
|
) -> GameObject<'a> {
|
||||||
GameObject {
|
GameObject {
|
||||||
x: x,
|
x: x,
|
||||||
y: y,
|
y: y,
|
||||||
@@ -43,7 +45,7 @@ impl<'a> GameObject<'a> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn render(&self, elapsed: f64, renderer: &mut Renderer, destination: &Rect) {
|
pub fn render(&self, elapsed: f64, renderer: &mut Canvas<Window>, destination: &Rect) {
|
||||||
self.graphics.render(self, elapsed, renderer, destination);
|
self.graphics.render(self, elapsed, renderer, destination);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -20,11 +20,11 @@ impl KeyboardHandler {
|
|||||||
|
|
||||||
pub fn process(&mut self, event: &Event) {
|
pub fn process(&mut self, event: &Event) {
|
||||||
match *event {
|
match *event {
|
||||||
Event::KeyDown { keycode, repeat, .. } => {
|
Event::KeyDown {
|
||||||
if !repeat {
|
keycode, repeat, ..
|
||||||
|
} => if !repeat {
|
||||||
self.key_down(keycode.unwrap());
|
self.key_down(keycode.unwrap());
|
||||||
}
|
},
|
||||||
}
|
|
||||||
Event::KeyUp { keycode, .. } => {
|
Event::KeyUp { keycode, .. } => {
|
||||||
self.key_up(keycode.unwrap());
|
self.key_up(keycode.unwrap());
|
||||||
}
|
}
|
||||||
|
|||||||
70
src/main.rs
70
src/main.rs
@@ -13,7 +13,7 @@ use keyboard::KeyboardHandler;
|
|||||||
use sprite::{Sprite, StaticSprite};
|
use sprite::{Sprite, StaticSprite};
|
||||||
use timer::Timer;
|
use timer::Timer;
|
||||||
use game_object::GameObject;
|
use game_object::GameObject;
|
||||||
use player_components::{PlayerPhysicsComponent, PlayerGraphicsComponent};
|
use player_components::{PlayerGraphicsComponent, PlayerPhysicsComponent};
|
||||||
|
|
||||||
|
|
||||||
mod timer;
|
mod timer;
|
||||||
@@ -59,43 +59,46 @@ fn main() {
|
|||||||
|
|
||||||
let _ = sdl2::image::init(sdl2::image::INIT_PNG).unwrap();
|
let _ = sdl2::image::init(sdl2::image::INIT_PNG).unwrap();
|
||||||
|
|
||||||
let window = video_subsystem.window("Super Matte Bros", SCREEN_WIDTH, SCREEN_HEIGHT)
|
let window = video_subsystem
|
||||||
|
.window("Super Matte Bros", SCREEN_WIDTH, SCREEN_HEIGHT)
|
||||||
.position_centered()
|
.position_centered()
|
||||||
.build()
|
.build()
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
let mut renderer = window.renderer()
|
let mut canvas = window.into_canvas().software().build().unwrap();
|
||||||
.software()
|
let creator = canvas.texture_creator();
|
||||||
.build()
|
|
||||||
.unwrap();
|
|
||||||
|
|
||||||
let world_sprites = renderer.load_texture(Path::new("gfx/world.png")).unwrap();
|
let world_sprites = creator.load_texture(Path::new("gfx/world.png")).unwrap();
|
||||||
|
|
||||||
let _foo = tiler::Set {
|
let _foo = tiler::Set {
|
||||||
image: renderer.load_texture(Path::new("gfx/world.png")).unwrap(),
|
image: creator.load_texture(Path::new("gfx/world.png")).unwrap(),
|
||||||
width: 16,
|
width: 16,
|
||||||
height: 16,
|
height: 16,
|
||||||
tiles: vec![tiler::Tile {
|
tiles: vec![
|
||||||
|
tiler::Tile {
|
||||||
id: 0,
|
id: 0,
|
||||||
animation: None,
|
animation: None,
|
||||||
},
|
},
|
||||||
tiler::Tile {
|
tiler::Tile {
|
||||||
id: 1,
|
id: 1,
|
||||||
animation: None,
|
animation: None,
|
||||||
}],
|
},
|
||||||
|
],
|
||||||
};
|
};
|
||||||
|
|
||||||
let floor_sprite = StaticSprite::new(&world_sprites, 16 * 0, 16 * 0);
|
let floor_sprite = StaticSprite::new(&world_sprites, 16 * 0, 16 * 0);
|
||||||
let brick_sprite = StaticSprite::new(&world_sprites, 16 * 1, 16 * 0);
|
let brick_sprite = StaticSprite::new(&world_sprites, 16 * 1, 16 * 0);
|
||||||
|
|
||||||
let player_sprites = renderer.load_texture(Path::new("gfx/mario.png")).unwrap();
|
let player_sprites = creator.load_texture(Path::new("gfx/mario.png")).unwrap();
|
||||||
|
|
||||||
let timer = Timer::new();
|
let timer = Timer::new();
|
||||||
|
|
||||||
let mut player = GameObject::new(390.0,
|
let mut player = GameObject::new(
|
||||||
|
390.0,
|
||||||
390.0,
|
390.0,
|
||||||
Box::new(PlayerPhysicsComponent::new()),
|
Box::new(PlayerPhysicsComponent::new()),
|
||||||
Box::new(PlayerGraphicsComponent::new(&player_sprites)));
|
Box::new(PlayerGraphicsComponent::new(&player_sprites)),
|
||||||
|
);
|
||||||
|
|
||||||
let mut keyboard = KeyboardHandler::new();
|
let mut keyboard = KeyboardHandler::new();
|
||||||
|
|
||||||
@@ -279,7 +282,11 @@ fn main() {
|
|||||||
|
|
||||||
d = match *layer.get_tile(x, y) {
|
d = match *layer.get_tile(x, y) {
|
||||||
Tile::Floor(_) => d.min(t),
|
Tile::Floor(_) => d.min(t),
|
||||||
Tile::Static(_, solid) => if solid { d.min(t) } else { d },
|
Tile::Static(_, solid) => if solid {
|
||||||
|
d.min(t)
|
||||||
|
} else {
|
||||||
|
d
|
||||||
|
},
|
||||||
_ => d,
|
_ => d,
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -311,7 +318,11 @@ fn main() {
|
|||||||
|
|
||||||
d = match *layer.get_tile(x, y) {
|
d = match *layer.get_tile(x, y) {
|
||||||
Tile::Floor(_) => d.max(t),
|
Tile::Floor(_) => d.max(t),
|
||||||
Tile::Static(_, solid) => if solid { d.max(t) } else { d },
|
Tile::Static(_, solid) => if solid {
|
||||||
|
d.max(t)
|
||||||
|
} else {
|
||||||
|
d
|
||||||
|
},
|
||||||
_ => d,
|
_ => d,
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -345,7 +356,11 @@ fn main() {
|
|||||||
|
|
||||||
d = match *layer.get_tile(x, y) {
|
d = match *layer.get_tile(x, y) {
|
||||||
Tile::Floor(_) => d.min(t),
|
Tile::Floor(_) => d.min(t),
|
||||||
Tile::Static(_, solid) => if solid { d.min(t) } else { d },
|
Tile::Static(_, solid) => if solid {
|
||||||
|
d.min(t)
|
||||||
|
} else {
|
||||||
|
d
|
||||||
|
},
|
||||||
_ => d,
|
_ => d,
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -381,7 +396,11 @@ fn main() {
|
|||||||
|
|
||||||
d = match *layer.get_tile(x, y) {
|
d = match *layer.get_tile(x, y) {
|
||||||
Tile::Floor(_) => d.max(t),
|
Tile::Floor(_) => d.max(t),
|
||||||
Tile::Static(_, solid) => if solid { d.max(t) } else { d },
|
Tile::Static(_, solid) => if solid {
|
||||||
|
d.max(t)
|
||||||
|
} else {
|
||||||
|
d
|
||||||
|
},
|
||||||
_ => d,
|
_ => d,
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -407,17 +426,18 @@ fn main() {
|
|||||||
lag -= MS_PER_UPDATE;
|
lag -= MS_PER_UPDATE;
|
||||||
}
|
}
|
||||||
|
|
||||||
renderer.set_draw_color(Color::RGB(93, 148, 251));
|
canvas.set_draw_color(Color::RGB(93, 148, 251));
|
||||||
renderer.clear();
|
canvas.clear();
|
||||||
|
|
||||||
layer.for_each_intersecting(&camera.to_rect(), |tile: &Tile, position: &Rect| {
|
layer.for_each_intersecting(&camera.to_rect(), |tile: &Tile, position: &Rect| {
|
||||||
let object = camera.to_relative_rect(position);
|
let object = camera.to_relative_rect(position);
|
||||||
|
|
||||||
match *tile {
|
match *tile {
|
||||||
Tile::Background(src) |
|
Tile::Background(src) | Tile::Floor(src) => canvas
|
||||||
Tile::Floor(src) => renderer.copy(&world_sprites, Some(src), Some(object)).unwrap(),
|
.copy(&world_sprites, Some(src), Some(object))
|
||||||
Tile::Static(ref sprite, _) => {
|
.unwrap(),
|
||||||
sprite.render(lag / MS_PER_UPDATE, &mut renderer, &object)
|
Tile::Static(sprite, _) => {
|
||||||
|
sprite.render(lag / MS_PER_UPDATE, &mut canvas, &object)
|
||||||
}
|
}
|
||||||
_ => (),
|
_ => (),
|
||||||
}
|
}
|
||||||
@@ -425,8 +445,8 @@ fn main() {
|
|||||||
|
|
||||||
let player_rect = camera.to_relative_rect(&player.to_rect());
|
let player_rect = camera.to_relative_rect(&player.to_rect());
|
||||||
|
|
||||||
player.render(elapsed, &mut renderer, &player_rect);
|
player.render(elapsed, &mut canvas, &player_rect);
|
||||||
|
|
||||||
renderer.present();
|
canvas.present();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,11 +1,12 @@
|
|||||||
use std::cell::{Cell, RefCell};
|
use std::cell::{Cell, RefCell};
|
||||||
|
|
||||||
use sdl2::rect::Rect;
|
use sdl2::rect::Rect;
|
||||||
use sdl2::render::{Renderer, Texture};
|
use sdl2::render::{Canvas, Texture};
|
||||||
|
use sdl2::video::Window;
|
||||||
|
|
||||||
use sprite::{Sprite, StaticSprite, AnimatedSprite};
|
use sprite::{AnimatedSprite, Sprite, StaticSprite};
|
||||||
use game_object::GameObject;
|
use game_object::GameObject;
|
||||||
use component::{Updatable, Renderable};
|
use component::{Renderable, Updatable};
|
||||||
|
|
||||||
|
|
||||||
pub struct PlayerPhysicsComponent {
|
pub struct PlayerPhysicsComponent {
|
||||||
@@ -48,11 +49,13 @@ impl<'a> PlayerGraphicsComponent<'a> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl<'a> Renderable for PlayerGraphicsComponent<'a> {
|
impl<'a> Renderable for PlayerGraphicsComponent<'a> {
|
||||||
fn render(&self,
|
fn render(
|
||||||
|
&self,
|
||||||
object: &GameObject,
|
object: &GameObject,
|
||||||
elapsed: f64,
|
elapsed: f64,
|
||||||
renderer: &mut Renderer,
|
renderer: &mut Canvas<Window>,
|
||||||
destination: &Rect) {
|
destination: &Rect,
|
||||||
|
) {
|
||||||
if !object.on_ground {
|
if !object.on_ground {
|
||||||
let mut sprite = self.sprite_jumping.borrow_mut();
|
let mut sprite = self.sprite_jumping.borrow_mut();
|
||||||
|
|
||||||
|
|||||||
@@ -1,14 +1,16 @@
|
|||||||
use std::cell::RefCell;
|
use std::cell::RefCell;
|
||||||
|
|
||||||
use sdl2::render::{Texture, Renderer};
|
use sdl2::render::{Canvas, Texture};
|
||||||
|
use sdl2::video::Window;
|
||||||
use sdl2::rect::Rect;
|
use sdl2::rect::Rect;
|
||||||
|
|
||||||
|
|
||||||
pub trait Sprite {
|
pub trait Sprite {
|
||||||
fn render(&self, f64, &mut Renderer, &Rect);
|
fn render(&self, f64, &mut Canvas<Window>, &Rect);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct StaticSprite<'a> {
|
pub struct StaticSprite<'a> {
|
||||||
texture: &'a Texture,
|
texture: &'a Texture<'a>,
|
||||||
x: i32,
|
x: i32,
|
||||||
y: i32,
|
y: i32,
|
||||||
pub flip_horizontal: bool,
|
pub flip_horizontal: bool,
|
||||||
@@ -28,19 +30,21 @@ impl<'a> StaticSprite<'a> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl<'a> Sprite for StaticSprite<'a> {
|
impl<'a> Sprite for StaticSprite<'a> {
|
||||||
fn render(&self, _: f64, drawer: &mut Renderer, destination: &Rect) {
|
fn render(&self, _: f64, drawer: &mut Canvas<Window>, destination: &Rect) {
|
||||||
let _ = drawer.copy_ex(self.texture,
|
let _ = drawer.copy_ex(
|
||||||
|
self.texture,
|
||||||
Some(Rect::new(self.x, self.y, 16, 16)),
|
Some(Rect::new(self.x, self.y, 16, 16)),
|
||||||
Some(*destination),
|
Some(*destination),
|
||||||
0.0,
|
0.0,
|
||||||
None,
|
None,
|
||||||
self.flip_horizontal,
|
self.flip_horizontal,
|
||||||
self.flip_vertical);
|
self.flip_vertical,
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct AnimatedSprite<'a> {
|
pub struct AnimatedSprite<'a> {
|
||||||
texture: &'a Texture,
|
texture: &'a Texture<'a>,
|
||||||
x: i32,
|
x: i32,
|
||||||
y: i32,
|
y: i32,
|
||||||
pub flip_horizontal: bool,
|
pub flip_horizontal: bool,
|
||||||
@@ -68,7 +72,7 @@ impl<'a> AnimatedSprite<'a> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl<'a> Sprite for AnimatedSprite<'a> {
|
impl<'a> Sprite for AnimatedSprite<'a> {
|
||||||
fn render(&self, elapsed: f64, drawer: &mut Renderer, destination: &Rect) {
|
fn render(&self, elapsed: f64, drawer: &mut Canvas<Window>, destination: &Rect) {
|
||||||
let mut time = self.time.borrow_mut();
|
let mut time = self.time.borrow_mut();
|
||||||
let mut frame = self.frame.borrow_mut();
|
let mut frame = self.frame.borrow_mut();
|
||||||
|
|
||||||
@@ -79,12 +83,14 @@ impl<'a> Sprite for AnimatedSprite<'a> {
|
|||||||
|
|
||||||
let x = self.x + (*frame * 16) as i32;
|
let x = self.x + (*frame * 16) as i32;
|
||||||
|
|
||||||
let _ = drawer.copy_ex(self.texture,
|
let _ = drawer.copy_ex(
|
||||||
|
self.texture,
|
||||||
Some(Rect::new(x, self.y, 16, 16)),
|
Some(Rect::new(x, self.y, 16, 16)),
|
||||||
Some(*destination),
|
Some(*destination),
|
||||||
0.0,
|
0.0,
|
||||||
None,
|
None,
|
||||||
self.flip_horizontal,
|
self.flip_horizontal,
|
||||||
self.flip_vertical);
|
self.flip_vertical,
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
189
src/tile.rs
189
src/tile.rs
@@ -11,7 +11,8 @@ pub struct Layer<T> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl<T> Layer<T>
|
impl<T> Layer<T>
|
||||||
where T: Clone
|
where
|
||||||
|
T: Clone,
|
||||||
{
|
{
|
||||||
// TODO Change u32 to usize for width and height?
|
// TODO Change u32 to usize for width and height?
|
||||||
pub fn new(width: u32, height: u32, tile_width: u32, tile_height: u32, tile: T) -> Layer<T> {
|
pub fn new(width: u32, height: u32, tile_width: u32, tile_height: u32, tile: T) -> Layer<T> {
|
||||||
@@ -28,7 +29,7 @@ impl<T> Layer<T>
|
|||||||
pub fn get_tile(&self, x: i32, y: i32) -> &T {
|
pub fn get_tile(&self, x: i32, y: i32) -> &T {
|
||||||
let offset = (x + y * self.width as i32) as usize;
|
let offset = (x + y * self.width as i32) as usize;
|
||||||
|
|
||||||
match *self.tiles.get(offset).unwrap() {
|
match self.tiles[offset] {
|
||||||
Some(ref tile) => tile,
|
Some(ref tile) => tile,
|
||||||
None => &self.default,
|
None => &self.default,
|
||||||
}
|
}
|
||||||
@@ -41,12 +42,13 @@ impl<T> Layer<T>
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn find_intersecting(&self, rect: &Rect) -> Option<Rect> {
|
pub fn find_intersecting(&self, rect: &Rect) -> Option<Rect> {
|
||||||
if rect.x() + rect.width() as i32 <= 0 ||
|
if rect.x() + rect.width() as i32 <= 0 || rect.x() >= (self.width * self.tile_width) as i32
|
||||||
rect.x() >= (self.width * self.tile_width) as i32 {
|
{
|
||||||
return None;
|
return None;
|
||||||
}
|
}
|
||||||
if rect.y() + rect.height() as i32 <= 0 ||
|
if rect.y() + rect.height() as i32 <= 0
|
||||||
rect.y() >= (self.height * self.tile_height) as i32 {
|
|| rect.y() >= (self.height * self.tile_height) as i32
|
||||||
|
{
|
||||||
return None;
|
return None;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -56,17 +58,24 @@ impl<T> Layer<T>
|
|||||||
let x2 = (rect.x() + rect.width() as i32 - 1) / self.tile_width as i32;
|
let x2 = (rect.x() + rect.width() as i32 - 1) / self.tile_width as i32;
|
||||||
let y2 = (rect.y() + rect.height() as i32 - 1) / self.tile_height as i32;
|
let y2 = (rect.y() + rect.height() as i32 - 1) / self.tile_height as i32;
|
||||||
|
|
||||||
Some(Rect::new(x1, y1, (x2 - x1 + 1) as u32, (y2 - y1 + 1) as u32))
|
Some(Rect::new(
|
||||||
|
x1,
|
||||||
|
y1,
|
||||||
|
(x2 - x1 + 1) as u32,
|
||||||
|
(y2 - y1 + 1) as u32,
|
||||||
|
))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn for_each_intersecting<F: FnMut(&T, &Rect)>(&self, rect: &Rect, mut f: F) {
|
pub fn for_each_intersecting<F: FnMut(&T, &Rect)>(&self, rect: &Rect, mut f: F) {
|
||||||
if let Some(intersect) = self.find_intersecting(rect) {
|
if let Some(intersect) = self.find_intersecting(rect) {
|
||||||
for y in intersect.y()..(intersect.y() + intersect.height() as i32) {
|
for y in intersect.y()..(intersect.y() + intersect.height() as i32) {
|
||||||
for x in intersect.x()..(intersect.x() + intersect.width() as i32) {
|
for x in intersect.x()..(intersect.x() + intersect.width() as i32) {
|
||||||
let position = Rect::new(x * self.tile_width as i32,
|
let position = Rect::new(
|
||||||
|
x * self.tile_width as i32,
|
||||||
y * self.tile_height as i32,
|
y * self.tile_height as i32,
|
||||||
self.tile_width,
|
self.tile_width,
|
||||||
self.tile_height);
|
self.tile_height,
|
||||||
|
);
|
||||||
|
|
||||||
f(self.get_tile(x, y), &position);
|
f(self.get_tile(x, y), &position);
|
||||||
}
|
}
|
||||||
@@ -75,10 +84,12 @@ impl<T> Layer<T>
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn to_rect(&self) -> Rect {
|
pub fn to_rect(&self) -> Rect {
|
||||||
Rect::new(0,
|
Rect::new(
|
||||||
|
0,
|
||||||
0,
|
0,
|
||||||
self.width * self.tile_width,
|
self.width * self.tile_width,
|
||||||
self.height * self.tile_height)
|
self.height * self.tile_height,
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -102,71 +113,123 @@ mod tests {
|
|||||||
assert_eq!(layer.find_intersecting(&Rect::new(9, 9, 1, 1)), None);
|
assert_eq!(layer.find_intersecting(&Rect::new(9, 9, 1, 1)), None);
|
||||||
|
|
||||||
// middle of tile.
|
// middle of tile.
|
||||||
assert_eq!(layer.find_intersecting(&Rect::new(1, 1, 1, 1)),
|
assert_eq!(
|
||||||
Some(Rect::new(0, 0, 1, 1)));
|
layer.find_intersecting(&Rect::new(1, 1, 1, 1)),
|
||||||
assert_eq!(layer.find_intersecting(&Rect::new(4, 1, 1, 1)),
|
Some(Rect::new(0, 0, 1, 1))
|
||||||
Some(Rect::new(1, 0, 1, 1)));
|
);
|
||||||
assert_eq!(layer.find_intersecting(&Rect::new(7, 1, 1, 1)),
|
assert_eq!(
|
||||||
Some(Rect::new(2, 0, 1, 1)));
|
layer.find_intersecting(&Rect::new(4, 1, 1, 1)),
|
||||||
|
Some(Rect::new(1, 0, 1, 1))
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
layer.find_intersecting(&Rect::new(7, 1, 1, 1)),
|
||||||
|
Some(Rect::new(2, 0, 1, 1))
|
||||||
|
);
|
||||||
|
|
||||||
assert_eq!(layer.find_intersecting(&Rect::new(1, 4, 1, 1)),
|
assert_eq!(
|
||||||
Some(Rect::new(0, 1, 1, 1)));
|
layer.find_intersecting(&Rect::new(1, 4, 1, 1)),
|
||||||
assert_eq!(layer.find_intersecting(&Rect::new(4, 4, 1, 1)),
|
Some(Rect::new(0, 1, 1, 1))
|
||||||
Some(Rect::new(1, 1, 1, 1)));
|
);
|
||||||
assert_eq!(layer.find_intersecting(&Rect::new(7, 4, 1, 1)),
|
assert_eq!(
|
||||||
Some(Rect::new(2, 1, 1, 1)));
|
layer.find_intersecting(&Rect::new(4, 4, 1, 1)),
|
||||||
|
Some(Rect::new(1, 1, 1, 1))
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
layer.find_intersecting(&Rect::new(7, 4, 1, 1)),
|
||||||
|
Some(Rect::new(2, 1, 1, 1))
|
||||||
|
);
|
||||||
|
|
||||||
assert_eq!(layer.find_intersecting(&Rect::new(1, 7, 1, 1)),
|
assert_eq!(
|
||||||
Some(Rect::new(0, 2, 1, 1)));
|
layer.find_intersecting(&Rect::new(1, 7, 1, 1)),
|
||||||
assert_eq!(layer.find_intersecting(&Rect::new(4, 7, 1, 1)),
|
Some(Rect::new(0, 2, 1, 1))
|
||||||
Some(Rect::new(1, 2, 1, 1)));
|
);
|
||||||
assert_eq!(layer.find_intersecting(&Rect::new(7, 7, 1, 1)),
|
assert_eq!(
|
||||||
Some(Rect::new(2, 2, 1, 1)));
|
layer.find_intersecting(&Rect::new(4, 7, 1, 1)),
|
||||||
|
Some(Rect::new(1, 2, 1, 1))
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
layer.find_intersecting(&Rect::new(7, 7, 1, 1)),
|
||||||
|
Some(Rect::new(2, 2, 1, 1))
|
||||||
|
);
|
||||||
|
|
||||||
// interlaps 4 tiles.
|
// interlaps 4 tiles.
|
||||||
assert_eq!(layer.find_intersecting(&Rect::new(2, 2, 2, 2)),
|
assert_eq!(
|
||||||
Some(Rect::new(0, 0, 2, 2)));
|
layer.find_intersecting(&Rect::new(2, 2, 2, 2)),
|
||||||
assert_eq!(layer.find_intersecting(&Rect::new(5, 2, 2, 2)),
|
Some(Rect::new(0, 0, 2, 2))
|
||||||
Some(Rect::new(1, 0, 2, 2)));
|
);
|
||||||
assert_eq!(layer.find_intersecting(&Rect::new(2, 5, 2, 2)),
|
assert_eq!(
|
||||||
Some(Rect::new(0, 1, 2, 2)));
|
layer.find_intersecting(&Rect::new(5, 2, 2, 2)),
|
||||||
assert_eq!(layer.find_intersecting(&Rect::new(5, 5, 2, 2)),
|
Some(Rect::new(1, 0, 2, 2))
|
||||||
Some(Rect::new(1, 1, 2, 2)));
|
);
|
||||||
|
assert_eq!(
|
||||||
|
layer.find_intersecting(&Rect::new(2, 5, 2, 2)),
|
||||||
|
Some(Rect::new(0, 1, 2, 2))
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
layer.find_intersecting(&Rect::new(5, 5, 2, 2)),
|
||||||
|
Some(Rect::new(1, 1, 2, 2))
|
||||||
|
);
|
||||||
|
|
||||||
// interlaps 2 tiles horizontal.
|
// interlaps 2 tiles horizontal.
|
||||||
assert_eq!(layer.find_intersecting(&Rect::new(2, 1, 2, 1)),
|
assert_eq!(
|
||||||
Some(Rect::new(0, 0, 2, 1)));
|
layer.find_intersecting(&Rect::new(2, 1, 2, 1)),
|
||||||
assert_eq!(layer.find_intersecting(&Rect::new(5, 1, 2, 1)),
|
Some(Rect::new(0, 0, 2, 1))
|
||||||
Some(Rect::new(1, 0, 2, 1)));
|
);
|
||||||
|
assert_eq!(
|
||||||
|
layer.find_intersecting(&Rect::new(5, 1, 2, 1)),
|
||||||
|
Some(Rect::new(1, 0, 2, 1))
|
||||||
|
);
|
||||||
|
|
||||||
assert_eq!(layer.find_intersecting(&Rect::new(2, 4, 2, 1)),
|
assert_eq!(
|
||||||
Some(Rect::new(0, 1, 2, 1)));
|
layer.find_intersecting(&Rect::new(2, 4, 2, 1)),
|
||||||
assert_eq!(layer.find_intersecting(&Rect::new(5, 4, 2, 1)),
|
Some(Rect::new(0, 1, 2, 1))
|
||||||
Some(Rect::new(1, 1, 2, 1)));
|
);
|
||||||
|
assert_eq!(
|
||||||
|
layer.find_intersecting(&Rect::new(5, 4, 2, 1)),
|
||||||
|
Some(Rect::new(1, 1, 2, 1))
|
||||||
|
);
|
||||||
|
|
||||||
assert_eq!(layer.find_intersecting(&Rect::new(2, 7, 2, 1)),
|
assert_eq!(
|
||||||
Some(Rect::new(0, 2, 2, 1)));
|
layer.find_intersecting(&Rect::new(2, 7, 2, 1)),
|
||||||
assert_eq!(layer.find_intersecting(&Rect::new(5, 7, 2, 1)),
|
Some(Rect::new(0, 2, 2, 1))
|
||||||
Some(Rect::new(1, 2, 2, 1)));
|
);
|
||||||
|
assert_eq!(
|
||||||
|
layer.find_intersecting(&Rect::new(5, 7, 2, 1)),
|
||||||
|
Some(Rect::new(1, 2, 2, 1))
|
||||||
|
);
|
||||||
|
|
||||||
// interlaps 2 tiles vertical.
|
// interlaps 2 tiles vertical.
|
||||||
assert_eq!(layer.find_intersecting(&Rect::new(1, 2, 1, 2)),
|
assert_eq!(
|
||||||
Some(Rect::new(0, 0, 1, 2)));
|
layer.find_intersecting(&Rect::new(1, 2, 1, 2)),
|
||||||
assert_eq!(layer.find_intersecting(&Rect::new(1, 5, 1, 2)),
|
Some(Rect::new(0, 0, 1, 2))
|
||||||
Some(Rect::new(0, 1, 1, 2)));
|
);
|
||||||
|
assert_eq!(
|
||||||
|
layer.find_intersecting(&Rect::new(1, 5, 1, 2)),
|
||||||
|
Some(Rect::new(0, 1, 1, 2))
|
||||||
|
);
|
||||||
|
|
||||||
assert_eq!(layer.find_intersecting(&Rect::new(4, 2, 1, 2)),
|
assert_eq!(
|
||||||
Some(Rect::new(1, 0, 1, 2)));
|
layer.find_intersecting(&Rect::new(4, 2, 1, 2)),
|
||||||
assert_eq!(layer.find_intersecting(&Rect::new(4, 5, 1, 2)),
|
Some(Rect::new(1, 0, 1, 2))
|
||||||
Some(Rect::new(1, 1, 1, 2)));
|
);
|
||||||
|
assert_eq!(
|
||||||
|
layer.find_intersecting(&Rect::new(4, 5, 1, 2)),
|
||||||
|
Some(Rect::new(1, 1, 1, 2))
|
||||||
|
);
|
||||||
|
|
||||||
assert_eq!(layer.find_intersecting(&Rect::new(7, 2, 1, 2)),
|
assert_eq!(
|
||||||
Some(Rect::new(2, 0, 1, 2)));
|
layer.find_intersecting(&Rect::new(7, 2, 1, 2)),
|
||||||
assert_eq!(layer.find_intersecting(&Rect::new(7, 5, 1, 2)),
|
Some(Rect::new(2, 0, 1, 2))
|
||||||
Some(Rect::new(2, 1, 1, 2)));
|
);
|
||||||
|
assert_eq!(
|
||||||
|
layer.find_intersecting(&Rect::new(7, 5, 1, 2)),
|
||||||
|
Some(Rect::new(2, 1, 1, 2))
|
||||||
|
);
|
||||||
|
|
||||||
// exactly one tile.
|
// exactly one tile.
|
||||||
assert_eq!(layer.find_intersecting(&Rect::new(0, 0, 3, 3)),
|
assert_eq!(
|
||||||
Some(Rect::new(0, 0, 1, 1)));
|
layer.find_intersecting(&Rect::new(0, 0, 3, 3)),
|
||||||
|
Some(Rect::new(0, 0, 1, 1))
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,16 +6,16 @@ use sdl2::render::Texture;
|
|||||||
type TileId = usize;
|
type TileId = usize;
|
||||||
|
|
||||||
|
|
||||||
pub struct Map {
|
pub struct Map<'a> {
|
||||||
width: usize,
|
width: usize,
|
||||||
height: usize,
|
height: usize,
|
||||||
sets: Vec<Set>,
|
sets: Vec<Set<'a>>,
|
||||||
layers: Vec<Layer>,
|
layers: Vec<Layer>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
pub struct Set {
|
pub struct Set<'a> {
|
||||||
pub image: Texture,
|
pub image: Texture<'a>,
|
||||||
pub width: usize,
|
pub width: usize,
|
||||||
pub height: usize,
|
pub height: usize,
|
||||||
pub tiles: Vec<Tile>,
|
pub tiles: Vec<Tile>,
|
||||||
|
|||||||
@@ -6,7 +6,9 @@ pub struct Timer {
|
|||||||
|
|
||||||
impl Timer {
|
impl Timer {
|
||||||
pub fn new() -> Timer {
|
pub fn new() -> Timer {
|
||||||
Timer { time: Instant::now() }
|
Timer {
|
||||||
|
time: Instant::now(),
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn current_time(&self) -> f64 {
|
pub fn current_time(&self) -> f64 {
|
||||||
|
|||||||
Reference in New Issue
Block a user