Upgrade to most recent version of Rust. Still doesn't work.
This commit is contained in:
96
Cargo.lock
generated
96
Cargo.lock
generated
@@ -2,80 +2,112 @@
|
|||||||
name = "super-matte-bros"
|
name = "super-matte-bros"
|
||||||
version = "0.0.1"
|
version = "0.0.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"sdl2 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
"sdl2 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"sdl2_image 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
"sdl2_image 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"time 0.1.33 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "advapi32-sys"
|
||||||
|
version = "0.1.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
dependencies = [
|
||||||
|
"winapi 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "bitflags"
|
name = "bitflags"
|
||||||
version = "0.1.1"
|
version = "0.3.2"
|
||||||
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 = "kernel32-sys"
|
||||||
version = "0.1.6"
|
version = "0.1.4"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "log"
|
|
||||||
version = "0.3.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"libc 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
"winapi 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "libc"
|
||||||
|
version = "0.1.10"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "num"
|
name = "num"
|
||||||
version = "0.1.22"
|
version = "0.1.27"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"rand 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
"rand 0.3.11 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"rustc-serialize 0.3.12 (registry+https://github.com/rust-lang/crates.io-index)",
|
"rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "rand"
|
name = "rand"
|
||||||
version = "0.3.7"
|
version = "0.3.11"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"libc 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
"advapi32-sys 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"log 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
"libc 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"winapi 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "rustc-serialize"
|
name = "rustc-serialize"
|
||||||
version = "0.3.12"
|
version = "0.3.16"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "sdl2"
|
name = "sdl2"
|
||||||
version = "0.2.1"
|
version = "0.9.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bitflags 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
"bitflags 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"libc 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
"libc 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"num 0.1.22 (registry+https://github.com/rust-lang/crates.io-index)",
|
"num 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"rand 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
"rand 0.3.11 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"sdl2-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
"sdl2-sys 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "sdl2-sys"
|
name = "sdl2-sys"
|
||||||
version = "0.2.1"
|
version = "0.6.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"libc 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
"libc 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"num 0.1.22 (registry+https://github.com/rust-lang/crates.io-index)",
|
"num 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "sdl2_image"
|
name = "sdl2_image"
|
||||||
version = "0.2.1"
|
version = "0.3.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.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
"bitflags 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"libc 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
"libc 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"sdl2 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
"sdl2 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"sdl2-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
"sdl2-sys 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "time"
|
||||||
|
version = "0.1.33"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
dependencies = [
|
||||||
|
"kernel32-sys 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"libc 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"winapi 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "winapi"
|
||||||
|
version = "0.2.4"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "winapi-build"
|
||||||
|
version = "0.1.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
|
||||||
|
|||||||
@@ -4,8 +4,9 @@ version = "0.0.1"
|
|||||||
authors = ["logaritmisk <anders.e.olsson@gmail.com>"]
|
authors = ["logaritmisk <anders.e.olsson@gmail.com>"]
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
sdl2 = "0.2.1"
|
time = "0.1"
|
||||||
sdl2_image = "0.2.1"
|
sdl2 = "0.9"
|
||||||
|
sdl2_image = "0.3"
|
||||||
|
|
||||||
[[bin]]
|
[[bin]]
|
||||||
name = "super-matte-bros"
|
name = "super-matte-bros"
|
||||||
|
|||||||
@@ -4,13 +4,13 @@ use sdl2::rect::Rect;
|
|||||||
pub struct Camera {
|
pub struct Camera {
|
||||||
x: i32,
|
x: i32,
|
||||||
y: i32,
|
y: i32,
|
||||||
w: i32,
|
w: u32,
|
||||||
h: i32,
|
h: u32,
|
||||||
bounding: Rect
|
bounding: Rect
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Camera {
|
impl Camera {
|
||||||
pub fn new(x: i32, y: i32, w: i32, h: i32, bounding: Rect) -> Camera {
|
pub fn new(x: i32, y: i32, w: u32, h: u32, bounding: Rect) -> Camera {
|
||||||
Camera {
|
Camera {
|
||||||
x: x,
|
x: x,
|
||||||
y: y,
|
y: y,
|
||||||
@@ -21,19 +21,19 @@ impl Camera {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn center(&mut self, object: &Rect) {
|
pub fn center(&mut self, object: &Rect) {
|
||||||
let mut x = (object.x + object.w / 2) - (self.w / 2);
|
let mut x = (object.x() + object.width() as i32 / 2) - (self.w as i32 / 2);
|
||||||
let mut y = (object.y + object.h / 2) - (self.h / 2);
|
let mut y = (object.y() + object.height() as i32 / 2) - (self.h as i32 / 2);
|
||||||
|
|
||||||
if x < self.bounding.x {
|
if x < self.bounding.x() {
|
||||||
x = self.bounding.x;
|
x = self.bounding.x();
|
||||||
} else if x + self.w > self.bounding.w {
|
} else if x + self.w as i32 > self.bounding.width() as i32 {
|
||||||
x = self.bounding.w - self.w;
|
x = (self.bounding.width() - self.w) as i32;
|
||||||
}
|
}
|
||||||
|
|
||||||
if y < self.bounding.y {
|
if y < self.bounding.y() {
|
||||||
y = self.bounding.y;
|
y = self.bounding.y();
|
||||||
} else if y + self.h > self.bounding.h {
|
} else if y + self.h as i32 > self.bounding.height() as i32 {
|
||||||
y = self.bounding.h - self.h;
|
y = (self.bounding.height() - self.h) as i32;
|
||||||
}
|
}
|
||||||
|
|
||||||
self.x = x;
|
self.x = x;
|
||||||
@@ -41,6 +41,6 @@ impl Camera {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn to_rect(&self) -> Rect {
|
pub fn to_rect(&self) -> Rect {
|
||||||
Rect::new(self.x, self.y, self.w, self.h)
|
Rect::new_unwrap(self.x, self.y, self.w, self.h)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
|
|
||||||
use sdl2::keycode::KeyCode;
|
use sdl2::keyboard::Keycode;
|
||||||
|
|
||||||
|
|
||||||
pub struct KeyboardHandler {
|
pub struct KeyboardHandler {
|
||||||
pressed_keys: HashMap<KeyCode, bool>,
|
pressed_keys: HashMap<Keycode, bool>,
|
||||||
released_keys: HashMap<KeyCode, bool>,
|
released_keys: HashMap<Keycode, bool>,
|
||||||
held_keys: HashMap<KeyCode, bool>
|
held_keys: HashMap<Keycode, bool>
|
||||||
}
|
}
|
||||||
|
|
||||||
impl KeyboardHandler {
|
impl KeyboardHandler {
|
||||||
@@ -23,31 +23,31 @@ impl KeyboardHandler {
|
|||||||
self.released_keys.clear();
|
self.released_keys.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn key_down(&mut self, keycode: KeyCode) {
|
pub fn key_down(&mut self, keycode: Keycode) {
|
||||||
self.pressed_keys.insert(keycode, true);
|
self.pressed_keys.insert(keycode, true);
|
||||||
self.held_keys.insert(keycode, true);
|
self.held_keys.insert(keycode, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn key_up(&mut self, keycode: KeyCode) {
|
pub fn key_up(&mut self, keycode: Keycode) {
|
||||||
self.released_keys.insert(keycode, true);
|
self.released_keys.insert(keycode, true);
|
||||||
self.held_keys.insert(keycode, false);
|
self.held_keys.insert(keycode, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn was_pressed(&self, keycode: KeyCode) -> bool {
|
pub fn was_pressed(&self, keycode: Keycode) -> bool {
|
||||||
match self.pressed_keys.get(&keycode) {
|
match self.pressed_keys.get(&keycode) {
|
||||||
Some(state) => *state,
|
Some(state) => *state,
|
||||||
None => false
|
None => false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn was_released(&self, keycode: KeyCode) -> bool {
|
pub fn was_released(&self, keycode: Keycode) -> bool {
|
||||||
match self.released_keys.get(&keycode) {
|
match self.released_keys.get(&keycode) {
|
||||||
Some(state) => *state,
|
Some(state) => *state,
|
||||||
None => false
|
None => false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn is_held(&self, keycode: KeyCode) -> bool {
|
pub fn is_held(&self, keycode: Keycode) -> bool {
|
||||||
match self.held_keys.get(&keycode) {
|
match self.held_keys.get(&keycode) {
|
||||||
Some(state) => *state,
|
Some(state) => *state,
|
||||||
None => false
|
None => false
|
||||||
|
|||||||
247
src/main.rs
247
src/main.rs
@@ -1,13 +1,16 @@
|
|||||||
|
extern crate time;
|
||||||
extern crate sdl2;
|
extern crate sdl2;
|
||||||
extern crate sdl2_image;
|
extern crate sdl2_image;
|
||||||
|
|
||||||
|
|
||||||
use std::path::Path;
|
use std::path::Path;
|
||||||
|
use std::thread::sleep_ms;
|
||||||
|
|
||||||
use sdl2::video::{Window, WindowPos, OPENGL};
|
//use sdl2::video::{Window, WindowPos, OPENGL};
|
||||||
use sdl2::timer::{get_ticks, delay};
|
//use sdl2::timer::{get_ticks, delay};
|
||||||
|
use sdl2_image::LoadTexture;
|
||||||
use sdl2::rect::Rect;
|
use sdl2::rect::Rect;
|
||||||
use sdl2::keycode::KeyCode;
|
use sdl2::keyboard::Keycode;
|
||||||
use sdl2::pixels::Color;
|
use sdl2::pixels::Color;
|
||||||
|
|
||||||
use tile::Layer;
|
use tile::Layer;
|
||||||
@@ -24,13 +27,13 @@ mod keyboard;
|
|||||||
mod sprite;
|
mod sprite;
|
||||||
|
|
||||||
|
|
||||||
const SCREEN_WIDTH : i32 = 960;
|
const SCREEN_WIDTH : u32 = 960;
|
||||||
const SCREEN_HEIGHT : i32 = 640;
|
const SCREEN_HEIGHT : u32 = 640;
|
||||||
|
|
||||||
const TILE_WIDTH : i32 = 32;
|
const TILE_WIDTH : u32 = 32;
|
||||||
const TILE_HEIGHT : i32 = 32;
|
const TILE_HEIGHT : u32 = 32;
|
||||||
|
|
||||||
const MS_PER_UPDATE : u32 = 10;
|
const MS_PER_UPDATE : u64 = 10;
|
||||||
|
|
||||||
const PLAYER_SPEED_X : f32 = 4.0;
|
const PLAYER_SPEED_X : f32 = 4.0;
|
||||||
const PLAYER_THRESHOLD_X : f32 = 0.2;
|
const PLAYER_THRESHOLD_X : f32 = 0.2;
|
||||||
@@ -51,41 +54,20 @@ enum Tile<'a> {
|
|||||||
|
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let sdl_context = sdl2::init(sdl2::INIT_EVERYTHING).unwrap();
|
let sdl_context = sdl2::init().unwrap();
|
||||||
|
let video_subsystem = sdl_context.video().unwrap();
|
||||||
|
|
||||||
sdl2_image::init(sdl2_image::INIT_PNG);
|
sdl2_image::init(sdl2_image::INIT_PNG);
|
||||||
|
|
||||||
let window = match Window::new(&sdl_context, "Super Matte Bros", WindowPos::PosCentered, WindowPos::PosCentered, SCREEN_WIDTH, SCREEN_HEIGHT, OPENGL) {
|
let window = video_subsystem.window("Super Matte Bros", SCREEN_WIDTH, SCREEN_HEIGHT).position_centered().build().unwrap();
|
||||||
Ok(window) => window,
|
let mut renderer = window.renderer().software().build().unwrap();
|
||||||
Err(err) => panic!("failed to create window: {}", err)
|
|
||||||
};
|
|
||||||
|
|
||||||
let mut renderer = match sdl2::render::Renderer::from_window(window, sdl2::render::RenderDriverIndex::Auto, sdl2::render::ACCELERATED) {
|
let world_sprites = renderer.load_texture(&Path::new("gfx/world.png")).unwrap();
|
||||||
Ok(renderer) => renderer,
|
|
||||||
Err(err) => panic!("failed to create renderer: {}", err)
|
|
||||||
};
|
|
||||||
|
|
||||||
let world_surface = match sdl2_image::LoadSurface::from_file(&Path::new("gfx/world.png")) {
|
|
||||||
Ok(surface) => surface,
|
|
||||||
Err(err) => panic!("failed to load png: {}", err)
|
|
||||||
};
|
|
||||||
|
|
||||||
let world_sprites = match renderer.create_texture_from_surface(&world_surface) {
|
|
||||||
Ok(texture) => texture,
|
|
||||||
Err(err) => panic!("failed to create surface: {}", err)
|
|
||||||
};
|
|
||||||
|
|
||||||
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_surface = match sdl2_image::LoadSurface::from_file(&Path::new("gfx/mario.png")) {
|
let player_sprites = renderer.load_texture(&Path::new("gfx/mario.png")).unwrap();
|
||||||
Ok(surface) => surface,
|
|
||||||
Err(err) => panic!("failed to load png: {}", err)
|
|
||||||
};
|
|
||||||
|
|
||||||
let player_sprites = match renderer.create_texture_from_surface(&player_surface) {
|
|
||||||
Ok(texture) => texture,
|
|
||||||
Err(err) => panic!("failed to create surface: {}", err)
|
|
||||||
};
|
|
||||||
|
|
||||||
let mut player_sprite = AnimatedSprite::new(&player_sprites, 96, 32, 3, 15);
|
let mut player_sprite = AnimatedSprite::new(&player_sprites, 96, 32, 3, 15);
|
||||||
|
|
||||||
@@ -94,100 +76,100 @@ fn main() {
|
|||||||
let mut layer = Layer::new(212, 20, TILE_WIDTH, TILE_HEIGHT, Tile::Empty);
|
let mut layer = Layer::new(212, 20, TILE_WIDTH, TILE_HEIGHT, Tile::Empty);
|
||||||
|
|
||||||
|
|
||||||
layer.set_tile(2, 15, Tile::Background(Rect::new(16 * 9, 16 * 8, 16, 16)));
|
layer.set_tile(2, 15, Tile::Background(Rect::new_unwrap(16 * 9, 16 * 8, 16, 16)));
|
||||||
|
|
||||||
layer.set_tile(1, 16, Tile::Background(Rect::new(16 * 8, 16 * 8, 16, 16)));
|
layer.set_tile(1, 16, Tile::Background(Rect::new_unwrap(16 * 8, 16 * 8, 16, 16)));
|
||||||
layer.set_tile(2, 16, Tile::Background(Rect::new(16 * 8, 16 * 9, 16, 16)));
|
layer.set_tile(2, 16, Tile::Background(Rect::new_unwrap(16 * 8, 16 * 9, 16, 16)));
|
||||||
layer.set_tile(3, 16, Tile::Background(Rect::new(16 * 10, 16 * 8, 16, 16)));
|
layer.set_tile(3, 16, Tile::Background(Rect::new_unwrap(16 * 10, 16 * 8, 16, 16)));
|
||||||
|
|
||||||
layer.set_tile(0, 17, Tile::Background(Rect::new(16 * 8, 16 * 8, 16, 16)));
|
layer.set_tile(0, 17, Tile::Background(Rect::new_unwrap(16 * 8, 16 * 8, 16, 16)));
|
||||||
layer.set_tile(1, 17, Tile::Background(Rect::new(16 * 8, 16 * 9, 16, 16)));
|
layer.set_tile(1, 17, Tile::Background(Rect::new_unwrap(16 * 8, 16 * 9, 16, 16)));
|
||||||
layer.set_tile(2, 17, Tile::Background(Rect::new(16 * 9, 16 * 9, 16, 16)));
|
layer.set_tile(2, 17, Tile::Background(Rect::new_unwrap(16 * 9, 16 * 9, 16, 16)));
|
||||||
layer.set_tile(3, 17, Tile::Background(Rect::new(16 * 8, 16 * 9, 16, 16)));
|
layer.set_tile(3, 17, Tile::Background(Rect::new_unwrap(16 * 8, 16 * 9, 16, 16)));
|
||||||
layer.set_tile(4, 17, Tile::Background(Rect::new(16 * 10, 16 * 8, 16, 16)));
|
layer.set_tile(4, 17, Tile::Background(Rect::new_unwrap(16 * 10, 16 * 8, 16, 16)));
|
||||||
|
|
||||||
|
|
||||||
layer.set_tile(11, 17, Tile::Background(Rect::new(16 * 11, 16 * 9, 16, 16)));
|
layer.set_tile(11, 17, Tile::Background(Rect::new_unwrap(16 * 11, 16 * 9, 16, 16)));
|
||||||
layer.set_tile(12, 17, Tile::Background(Rect::new(16 * 12, 16 * 9, 16, 16)));
|
layer.set_tile(12, 17, Tile::Background(Rect::new_unwrap(16 * 12, 16 * 9, 16, 16)));
|
||||||
layer.set_tile(13, 17, Tile::Background(Rect::new(16 * 12, 16 * 9, 16, 16)));
|
layer.set_tile(13, 17, Tile::Background(Rect::new_unwrap(16 * 12, 16 * 9, 16, 16)));
|
||||||
layer.set_tile(14, 17, Tile::Background(Rect::new(16 * 12, 16 * 9, 16, 16)));
|
layer.set_tile(14, 17, Tile::Background(Rect::new_unwrap(16 * 12, 16 * 9, 16, 16)));
|
||||||
layer.set_tile(15, 17, Tile::Background(Rect::new(16 * 13, 16 * 9, 16, 16)));
|
layer.set_tile(15, 17, Tile::Background(Rect::new_unwrap(16 * 13, 16 * 9, 16, 16)));
|
||||||
|
|
||||||
|
|
||||||
layer.set_tile(16, 14, Tile::Floor(Rect::new(16 * 24, 16 * 0, 16, 16)));
|
layer.set_tile(16, 14, Tile::Floor(Rect::new_unwrap(16 * 24, 16 * 0, 16, 16)));
|
||||||
|
|
||||||
|
|
||||||
layer.set_tile(17, 16, Tile::Background(Rect::new(16 * 9, 16 * 8, 16, 16)));
|
layer.set_tile(17, 16, Tile::Background(Rect::new_unwrap(16 * 9, 16 * 8, 16, 16)));
|
||||||
|
|
||||||
layer.set_tile(16, 17, Tile::Background(Rect::new(16 * 8, 16 * 8, 16, 16)));
|
layer.set_tile(16, 17, Tile::Background(Rect::new_unwrap(16 * 8, 16 * 8, 16, 16)));
|
||||||
layer.set_tile(17, 17, Tile::Background(Rect::new(16 * 8, 16 * 9, 16, 16)));
|
layer.set_tile(17, 17, Tile::Background(Rect::new_unwrap(16 * 8, 16 * 9, 16, 16)));
|
||||||
layer.set_tile(18, 17, Tile::Background(Rect::new(16 * 10, 16 * 8, 16, 16)));
|
layer.set_tile(18, 17, Tile::Background(Rect::new_unwrap(16 * 10, 16 * 8, 16, 16)));
|
||||||
|
|
||||||
|
|
||||||
layer.set_tile(20, 14, Tile::Static(&brick_sprite, true));
|
layer.set_tile(20, 14, Tile::Static(&brick_sprite, true));
|
||||||
layer.set_tile(21, 14, Tile::Floor(Rect::new(16 * 24, 16 * 0, 16, 16)));
|
layer.set_tile(21, 14, Tile::Floor(Rect::new_unwrap(16 * 24, 16 * 0, 16, 16)));
|
||||||
layer.set_tile(22, 14, Tile::Static(&brick_sprite, true));
|
layer.set_tile(22, 14, Tile::Static(&brick_sprite, true));
|
||||||
layer.set_tile(23, 14, Tile::Floor(Rect::new(16 * 24, 16 * 0, 16, 16)));
|
layer.set_tile(23, 14, Tile::Floor(Rect::new_unwrap(16 * 24, 16 * 0, 16, 16)));
|
||||||
layer.set_tile(24, 14, Tile::Static(&brick_sprite, true));
|
layer.set_tile(24, 14, Tile::Static(&brick_sprite, true));
|
||||||
|
|
||||||
|
|
||||||
layer.set_tile(22, 10, Tile::Floor(Rect::new(16 * 24, 16 * 0, 16, 16)));
|
layer.set_tile(22, 10, Tile::Floor(Rect::new_unwrap(16 * 24, 16 * 0, 16, 16)));
|
||||||
|
|
||||||
|
|
||||||
layer.set_tile(19, 7, Tile::Floor(Rect::new(16 * 0, 16 * 20, 16, 16)));
|
layer.set_tile(19, 7, Tile::Floor(Rect::new_unwrap(16 * 0, 16 * 20, 16, 16)));
|
||||||
layer.set_tile(20, 7, Tile::Floor(Rect::new(16 * 1, 16 * 20, 16, 16)));
|
layer.set_tile(20, 7, Tile::Floor(Rect::new_unwrap(16 * 1, 16 * 20, 16, 16)));
|
||||||
layer.set_tile(21, 7, Tile::Floor(Rect::new(16 * 2, 16 * 20, 16, 16)));
|
layer.set_tile(21, 7, Tile::Floor(Rect::new_unwrap(16 * 2, 16 * 20, 16, 16)));
|
||||||
layer.set_tile(19, 8, Tile::Floor(Rect::new(16 * 0, 16 * 21, 16, 16)));
|
layer.set_tile(19, 8, Tile::Floor(Rect::new_unwrap(16 * 0, 16 * 21, 16, 16)));
|
||||||
layer.set_tile(20, 8, Tile::Floor(Rect::new(16 * 1, 16 * 21, 16, 16)));
|
layer.set_tile(20, 8, Tile::Floor(Rect::new_unwrap(16 * 1, 16 * 21, 16, 16)));
|
||||||
layer.set_tile(21, 8, Tile::Floor(Rect::new(16 * 2, 16 * 21, 16, 16)));
|
layer.set_tile(21, 8, Tile::Floor(Rect::new_unwrap(16 * 2, 16 * 21, 16, 16)));
|
||||||
|
|
||||||
|
|
||||||
layer.set_tile(23, 17, Tile::Background(Rect::new(16 * 11, 16 * 9, 16, 16)));
|
layer.set_tile(23, 17, Tile::Background(Rect::new_unwrap(16 * 11, 16 * 9, 16, 16)));
|
||||||
layer.set_tile(24, 17, Tile::Background(Rect::new(16 * 12, 16 * 9, 16, 16)));
|
layer.set_tile(24, 17, Tile::Background(Rect::new_unwrap(16 * 12, 16 * 9, 16, 16)));
|
||||||
layer.set_tile(25, 17, Tile::Background(Rect::new(16 * 13, 16 * 9, 16, 16)));
|
layer.set_tile(25, 17, Tile::Background(Rect::new_unwrap(16 * 13, 16 * 9, 16, 16)));
|
||||||
|
|
||||||
|
|
||||||
layer.set_tile(28, 16, Tile::Floor(Rect::new(16 * 0, 16 * 8, 16, 16)));
|
layer.set_tile(28, 16, Tile::Floor(Rect::new_unwrap(16 * 0, 16 * 8, 16, 16)));
|
||||||
layer.set_tile(29, 16, Tile::Floor(Rect::new(16 * 1, 16 * 8, 16, 16)));
|
layer.set_tile(29, 16, Tile::Floor(Rect::new_unwrap(16 * 1, 16 * 8, 16, 16)));
|
||||||
layer.set_tile(28, 17, Tile::Floor(Rect::new(16 * 0, 16 * 9, 16, 16)));
|
layer.set_tile(28, 17, Tile::Floor(Rect::new_unwrap(16 * 0, 16 * 9, 16, 16)));
|
||||||
layer.set_tile(29, 17, Tile::Floor(Rect::new(16 * 1, 16 * 9, 16, 16)));
|
layer.set_tile(29, 17, Tile::Floor(Rect::new_unwrap(16 * 1, 16 * 9, 16, 16)));
|
||||||
|
|
||||||
|
|
||||||
layer.set_tile(38, 15, Tile::Floor(Rect::new(16 * 0, 16 * 8, 16, 16)));
|
layer.set_tile(38, 15, Tile::Floor(Rect::new_unwrap(16 * 0, 16 * 8, 16, 16)));
|
||||||
layer.set_tile(39, 15, Tile::Floor(Rect::new(16 * 1, 16 * 8, 16, 16)));
|
layer.set_tile(39, 15, Tile::Floor(Rect::new_unwrap(16 * 1, 16 * 8, 16, 16)));
|
||||||
layer.set_tile(38, 16, Tile::Floor(Rect::new(16 * 0, 16 * 9, 16, 16)));
|
layer.set_tile(38, 16, Tile::Floor(Rect::new_unwrap(16 * 0, 16 * 9, 16, 16)));
|
||||||
layer.set_tile(39, 16, Tile::Floor(Rect::new(16 * 1, 16 * 9, 16, 16)));
|
layer.set_tile(39, 16, Tile::Floor(Rect::new_unwrap(16 * 1, 16 * 9, 16, 16)));
|
||||||
layer.set_tile(38, 17, Tile::Floor(Rect::new(16 * 0, 16 * 9, 16, 16)));
|
layer.set_tile(38, 17, Tile::Floor(Rect::new_unwrap(16 * 0, 16 * 9, 16, 16)));
|
||||||
layer.set_tile(39, 17, Tile::Floor(Rect::new(16 * 1, 16 * 9, 16, 16)));
|
layer.set_tile(39, 17, Tile::Floor(Rect::new_unwrap(16 * 1, 16 * 9, 16, 16)));
|
||||||
|
|
||||||
|
|
||||||
layer.set_tile(41, 17, Tile::Background(Rect::new(16 * 11, 16 * 9, 16, 16)));
|
layer.set_tile(41, 17, Tile::Background(Rect::new_unwrap(16 * 11, 16 * 9, 16, 16)));
|
||||||
layer.set_tile(42, 17, Tile::Background(Rect::new(16 * 12, 16 * 9, 16, 16)));
|
layer.set_tile(42, 17, Tile::Background(Rect::new_unwrap(16 * 12, 16 * 9, 16, 16)));
|
||||||
layer.set_tile(43, 17, Tile::Background(Rect::new(16 * 12, 16 * 9, 16, 16)));
|
layer.set_tile(43, 17, Tile::Background(Rect::new_unwrap(16 * 12, 16 * 9, 16, 16)));
|
||||||
layer.set_tile(44, 17, Tile::Background(Rect::new(16 * 13, 16 * 9, 16, 16)));
|
layer.set_tile(44, 17, Tile::Background(Rect::new_unwrap(16 * 13, 16 * 9, 16, 16)));
|
||||||
|
|
||||||
|
|
||||||
layer.set_tile(46, 14, Tile::Floor(Rect::new(16 * 0, 16 * 8, 16, 16)));
|
layer.set_tile(46, 14, Tile::Floor(Rect::new_unwrap(16 * 0, 16 * 8, 16, 16)));
|
||||||
layer.set_tile(47, 14, Tile::Floor(Rect::new(16 * 1, 16 * 8, 16, 16)));
|
layer.set_tile(47, 14, Tile::Floor(Rect::new_unwrap(16 * 1, 16 * 8, 16, 16)));
|
||||||
layer.set_tile(46, 15, Tile::Floor(Rect::new(16 * 0, 16 * 9, 16, 16)));
|
layer.set_tile(46, 15, Tile::Floor(Rect::new_unwrap(16 * 0, 16 * 9, 16, 16)));
|
||||||
layer.set_tile(47, 15, Tile::Floor(Rect::new(16 * 1, 16 * 9, 16, 16)));
|
layer.set_tile(47, 15, Tile::Floor(Rect::new_unwrap(16 * 1, 16 * 9, 16, 16)));
|
||||||
layer.set_tile(46, 16, Tile::Floor(Rect::new(16 * 0, 16 * 9, 16, 16)));
|
layer.set_tile(46, 16, Tile::Floor(Rect::new_unwrap(16 * 0, 16 * 9, 16, 16)));
|
||||||
layer.set_tile(47, 16, Tile::Floor(Rect::new(16 * 1, 16 * 9, 16, 16)));
|
layer.set_tile(47, 16, Tile::Floor(Rect::new_unwrap(16 * 1, 16 * 9, 16, 16)));
|
||||||
layer.set_tile(46, 17, Tile::Floor(Rect::new(16 * 0, 16 * 9, 16, 16)));
|
layer.set_tile(46, 17, Tile::Floor(Rect::new_unwrap(16 * 0, 16 * 9, 16, 16)));
|
||||||
layer.set_tile(47, 17, Tile::Floor(Rect::new(16 * 1, 16 * 9, 16, 16)));
|
layer.set_tile(47, 17, Tile::Floor(Rect::new_unwrap(16 * 1, 16 * 9, 16, 16)));
|
||||||
|
|
||||||
|
|
||||||
layer.set_tile(50, 15, Tile::Background(Rect::new(16 * 9, 16 * 8, 16, 16)));
|
layer.set_tile(50, 15, Tile::Background(Rect::new_unwrap(16 * 9, 16 * 8, 16, 16)));
|
||||||
|
|
||||||
layer.set_tile(49, 16, Tile::Background(Rect::new(16 * 8, 16 * 8, 16, 16)));
|
layer.set_tile(49, 16, Tile::Background(Rect::new_unwrap(16 * 8, 16 * 8, 16, 16)));
|
||||||
layer.set_tile(50, 16, Tile::Background(Rect::new(16 * 8, 16 * 9, 16, 16)));
|
layer.set_tile(50, 16, Tile::Background(Rect::new_unwrap(16 * 8, 16 * 9, 16, 16)));
|
||||||
layer.set_tile(51, 16, Tile::Background(Rect::new(16 * 10, 16 * 8, 16, 16)));
|
layer.set_tile(51, 16, Tile::Background(Rect::new_unwrap(16 * 10, 16 * 8, 16, 16)));
|
||||||
|
|
||||||
layer.set_tile(48, 17, Tile::Background(Rect::new(16 * 8, 16 * 8, 16, 16)));
|
layer.set_tile(48, 17, Tile::Background(Rect::new_unwrap(16 * 8, 16 * 8, 16, 16)));
|
||||||
layer.set_tile(49, 17, Tile::Background(Rect::new(16 * 8, 16 * 9, 16, 16)));
|
layer.set_tile(49, 17, Tile::Background(Rect::new_unwrap(16 * 8, 16 * 9, 16, 16)));
|
||||||
layer.set_tile(50, 17, Tile::Background(Rect::new(16 * 9, 16 * 9, 16, 16)));
|
layer.set_tile(50, 17, Tile::Background(Rect::new_unwrap(16 * 9, 16 * 9, 16, 16)));
|
||||||
layer.set_tile(51, 17, Tile::Background(Rect::new(16 * 8, 16 * 9, 16, 16)));
|
layer.set_tile(51, 17, Tile::Background(Rect::new_unwrap(16 * 8, 16 * 9, 16, 16)));
|
||||||
layer.set_tile(52, 17, Tile::Background(Rect::new(16 * 10, 16 * 8, 16, 16)));
|
layer.set_tile(52, 17, Tile::Background(Rect::new_unwrap(16 * 10, 16 * 8, 16, 16)));
|
||||||
|
|
||||||
|
|
||||||
for x in 0..212 {
|
for x in 0..212 {
|
||||||
@@ -200,16 +182,15 @@ fn main() {
|
|||||||
|
|
||||||
let mut player = Player::new(390.0, 390.0);
|
let mut player = Player::new(390.0, 390.0);
|
||||||
|
|
||||||
let mut current : u32;
|
let mut current : u64;
|
||||||
let mut elapsed : u32;
|
let mut elapsed : u64;
|
||||||
let mut previous : u32 = get_ticks();
|
let mut previous : u64 = time::precise_time_ns();
|
||||||
let mut lag : u32 = 0;
|
let mut lag : u64 = 0;
|
||||||
|
|
||||||
let mut drawer = renderer.drawer();
|
let mut event_pump = sdl_context.event_pump().unwrap();
|
||||||
let mut event_pump = sdl_context.event_pump();
|
|
||||||
|
|
||||||
'main : loop {
|
'main : loop {
|
||||||
current = get_ticks();
|
current = time::precise_time_ns();
|
||||||
elapsed = current - previous;
|
elapsed = current - previous;
|
||||||
previous = current;
|
previous = current;
|
||||||
lag += elapsed;
|
lag += elapsed;
|
||||||
@@ -223,21 +204,21 @@ fn main() {
|
|||||||
Event::Quit {..} => break 'main,
|
Event::Quit {..} => break 'main,
|
||||||
Event::KeyDown {keycode, repeat, ..} => {
|
Event::KeyDown {keycode, repeat, ..} => {
|
||||||
if repeat == false {
|
if repeat == false {
|
||||||
keyboard.key_down(keycode);
|
keyboard.key_down(keycode.unwrap());
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
Event::KeyUp {keycode, ..} => {
|
Event::KeyUp {keycode, ..} => {
|
||||||
keyboard.key_up(keycode);
|
keyboard.key_up(keycode.unwrap());
|
||||||
},
|
},
|
||||||
_ => (),
|
_ => (),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if keyboard.was_pressed(KeyCode::Escape) {
|
if keyboard.was_pressed(Keycode::Escape) {
|
||||||
break 'main;
|
break 'main;
|
||||||
}
|
}
|
||||||
|
|
||||||
if keyboard.is_held(KeyCode::Right) && (player.dx >= 0.0 || player.on_ground) {
|
if keyboard.is_held(Keycode::Right) && (player.dx >= 0.0 || player.on_ground) {
|
||||||
let a = if player.dx > 0.0 {
|
let a = if player.dx > 0.0 {
|
||||||
PLAYER_ACCELERATION_X_START
|
PLAYER_ACCELERATION_X_START
|
||||||
} else {
|
} else {
|
||||||
@@ -245,7 +226,7 @@ fn main() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
player.dx = a * PLAYER_SPEED_X + (1.0 - a) * player.dx;
|
player.dx = a * PLAYER_SPEED_X + (1.0 - a) * player.dx;
|
||||||
} else if keyboard.is_held(KeyCode::Left) && (player.dx <= 0.0 || player.on_ground) {
|
} else if keyboard.is_held(Keycode::Left) && (player.dx <= 0.0 || player.on_ground) {
|
||||||
let a = if player.dx < 0.0 {
|
let a = if player.dx < 0.0 {
|
||||||
PLAYER_ACCELERATION_X_START
|
PLAYER_ACCELERATION_X_START
|
||||||
} else {
|
} else {
|
||||||
@@ -262,14 +243,14 @@ fn main() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if player.on_ground {
|
if player.on_ground {
|
||||||
if keyboard.was_pressed(KeyCode::Up) {
|
if keyboard.was_pressed(Keycode::Up) {
|
||||||
player.dy = -8.0;
|
player.dy = -8.0;
|
||||||
|
|
||||||
player.on_ground = false;
|
player.on_ground = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if keyboard.was_released(KeyCode::Up) {
|
if keyboard.was_released(Keycode::Up) {
|
||||||
if player.dy < -4.0 {
|
if player.dy < -4.0 {
|
||||||
player.dy = -4.0;
|
player.dy = -4.0;
|
||||||
}
|
}
|
||||||
@@ -285,11 +266,11 @@ fn main() {
|
|||||||
let p = player.x + player.w as f32;
|
let p = player.x + player.w as f32;
|
||||||
let mut d = player.dx;
|
let mut d = player.dx;
|
||||||
|
|
||||||
for y in intersect.y..intersect.y + intersect.h + 1 {
|
for y in intersect.y()..intersect.y() + intersect.height() as i32 + 1 {
|
||||||
let mut x = intersect.x;
|
let mut x = intersect.x();
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
let t = (x * TILE_WIDTH) as f32 - p;
|
let t = (x * TILE_WIDTH as i32) as f32 - p;
|
||||||
|
|
||||||
if t > d {
|
if t > d {
|
||||||
break;
|
break;
|
||||||
@@ -321,11 +302,11 @@ fn main() {
|
|||||||
let p = player.x;
|
let p = player.x;
|
||||||
let mut d = player.dx;
|
let mut d = player.dx;
|
||||||
|
|
||||||
for y in intersect.y..intersect.y + intersect.h + 1 {
|
for y in intersect.y()..intersect.y() + intersect.height() as i32 + 1 {
|
||||||
let mut x = intersect.x;
|
let mut x = intersect.x();
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
let t = (x * TILE_WIDTH + TILE_WIDTH) as f32 - p;
|
let t = (x * TILE_WIDTH as i32 + TILE_WIDTH as i32) as f32 - p;
|
||||||
|
|
||||||
if t < d {
|
if t < d {
|
||||||
break;
|
break;
|
||||||
@@ -359,11 +340,11 @@ fn main() {
|
|||||||
let p = player.y + player.h as f32;
|
let p = player.y + player.h as f32;
|
||||||
let mut d = player.dy;
|
let mut d = player.dy;
|
||||||
|
|
||||||
for x in intersect.x..intersect.x + intersect.w + 1 {
|
for x in intersect.x()..intersect.x() + intersect.width() as i32 + 1 {
|
||||||
let mut y = intersect.y;
|
let mut y = intersect.y();
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
let t = (y * TILE_HEIGHT) as f32 - p;
|
let t = (y * TILE_HEIGHT as i32) as f32 - p;
|
||||||
|
|
||||||
if t > d {
|
if t > d {
|
||||||
break;
|
break;
|
||||||
@@ -399,11 +380,11 @@ fn main() {
|
|||||||
let p = player.y;
|
let p = player.y;
|
||||||
let mut d = player.dy;
|
let mut d = player.dy;
|
||||||
|
|
||||||
for x in intersect.x..intersect.x + intersect.w + 1 {
|
for x in intersect.x()..intersect.x() + intersect.width() as i32 + 1 {
|
||||||
let mut y = intersect.y;
|
let mut y = intersect.y();
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
let t = (y * TILE_HEIGHT + TILE_HEIGHT) as f32 - p;
|
let t = (y * TILE_HEIGHT as i32 + TILE_HEIGHT as i32) as f32 - p;
|
||||||
|
|
||||||
if t < d {
|
if t < d {
|
||||||
break;
|
break;
|
||||||
@@ -441,36 +422,36 @@ fn main() {
|
|||||||
lag -= MS_PER_UPDATE;
|
lag -= MS_PER_UPDATE;
|
||||||
}
|
}
|
||||||
|
|
||||||
drawer.set_draw_color(Color::RGB(93, 148, 251));
|
renderer.set_draw_color(Color::RGB(93, 148, 251));
|
||||||
drawer.clear();
|
renderer.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_relative_rect(&camera.to_rect(), position);
|
let object = camera_relative_rect(&camera.to_rect(), position);
|
||||||
|
|
||||||
match *tile {
|
match *tile {
|
||||||
Tile::Background(src) => {
|
Tile::Background(src) => {
|
||||||
let _ = drawer.copy(&world_sprites, Some(src), Some(object));
|
let _ = renderer.copy(&world_sprites, Some(src), Some(object));
|
||||||
},
|
},
|
||||||
Tile::Floor(src) => {
|
Tile::Floor(src) => {
|
||||||
let _ = drawer.copy(&world_sprites, Some(src), Some(object));
|
let _ = renderer.copy(&world_sprites, Some(src), Some(object));
|
||||||
},
|
},
|
||||||
Tile::Static(ref sprite, _) => sprite.render(&mut drawer, &object),
|
Tile::Static(ref sprite, _) => sprite.render(&mut renderer, &object),
|
||||||
_ => ()
|
_ => ()
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
let player_rect = camera_relative_rect(&camera.to_rect(), &player.to_rect());
|
let player_rect = camera_relative_rect(&camera.to_rect(), &player.to_rect());
|
||||||
|
|
||||||
player_sprite.render(&mut drawer, &player_rect);
|
player_sprite.render(&mut renderer, &player_rect);
|
||||||
|
|
||||||
drawer.present();
|
renderer.present();
|
||||||
|
|
||||||
delay(5);
|
sleep_ms(5);
|
||||||
}
|
}
|
||||||
|
|
||||||
sdl2_image::quit();
|
sdl2_image::quit();
|
||||||
}
|
}
|
||||||
|
|
||||||
fn camera_relative_rect(camera: &Rect, other: &Rect) -> Rect {
|
fn camera_relative_rect(camera: &Rect, other: &Rect) -> Rect {
|
||||||
Rect::new(other.x - camera.x, other.y - camera.y, other.w, other.h)
|
Rect::new_unwrap(other.x() - camera.x(), other.y() - camera.y(), other.width(), other.height())
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,8 +4,8 @@ use sdl2::rect::Rect;
|
|||||||
pub struct Player {
|
pub struct Player {
|
||||||
pub x: f32,
|
pub x: f32,
|
||||||
pub y: f32,
|
pub y: f32,
|
||||||
pub w: i32,
|
pub w: u32,
|
||||||
pub h: i32,
|
pub h: u32,
|
||||||
pub dx: f32,
|
pub dx: f32,
|
||||||
pub dy: f32,
|
pub dy: f32,
|
||||||
pub gravity: f32,
|
pub gravity: f32,
|
||||||
@@ -37,6 +37,6 @@ impl Player {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn to_rect(&self) -> Rect {
|
pub fn to_rect(&self) -> Rect {
|
||||||
Rect::new(self.x as i32, self.y as i32, self.w, self.h)
|
Rect::new_unwrap(self.x as i32, self.y as i32, self.w, self.h)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
use sdl2::render::{Texture, RenderDrawer};
|
use sdl2::render::{Texture, Renderer};
|
||||||
use sdl2::rect::Rect;
|
use sdl2::rect::Rect;
|
||||||
|
|
||||||
|
|
||||||
pub trait Sprite {
|
pub trait Sprite {
|
||||||
fn update(&mut self, u32) {}
|
fn update(&mut self, u64) {}
|
||||||
fn render(&self, &mut RenderDrawer, &Rect);
|
fn render(&self, &mut Renderer, &Rect);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -25,8 +25,8 @@ impl<'a> StaticSprite<'a> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl<'a> Sprite for StaticSprite<'a> {
|
impl<'a> Sprite for StaticSprite<'a> {
|
||||||
fn render(&self, drawer: &mut RenderDrawer, destination: &Rect) {
|
fn render(&self, drawer: &mut Renderer, destination: &Rect) {
|
||||||
drawer.copy(self.texture, Some(Rect::new(self.x, self.y, 16, 16)), Some(*destination));
|
drawer.copy(self.texture, Some(Rect::new_unwrap(self.x, self.y, 16, 16)), Some(*destination));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -35,14 +35,14 @@ pub struct AnimatedSprite<'a> {
|
|||||||
texture: &'a Texture,
|
texture: &'a Texture,
|
||||||
x: i32,
|
x: i32,
|
||||||
y: i32,
|
y: i32,
|
||||||
frame: i32,
|
frame: u32,
|
||||||
frames: i32,
|
frames: u32,
|
||||||
time: u32,
|
time: u64,
|
||||||
frame_time: u32
|
frame_time: u64
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a> AnimatedSprite<'a> {
|
impl<'a> AnimatedSprite<'a> {
|
||||||
pub fn new(texture: &'a Texture, x: i32, y: i32, frames: i32, fps: i32) -> AnimatedSprite<'a> {
|
pub fn new(texture: &'a Texture, x: i32, y: i32, frames: u32, fps: u32) -> AnimatedSprite<'a> {
|
||||||
AnimatedSprite {
|
AnimatedSprite {
|
||||||
texture: texture,
|
texture: texture,
|
||||||
x: x,
|
x: x,
|
||||||
@@ -50,13 +50,13 @@ impl<'a> AnimatedSprite<'a> {
|
|||||||
frame: 0,
|
frame: 0,
|
||||||
frames: frames,
|
frames: frames,
|
||||||
time: 0,
|
time: 0,
|
||||||
frame_time: 1000 / fps as u32
|
frame_time: 1000 / fps as u64
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a> Sprite for AnimatedSprite<'a> {
|
impl<'a> Sprite for AnimatedSprite<'a> {
|
||||||
fn update(&mut self, elapsed: u32) {
|
fn update(&mut self, elapsed: u64) {
|
||||||
self.time += elapsed;
|
self.time += elapsed;
|
||||||
|
|
||||||
if self.time > self.frame_time {
|
if self.time > self.frame_time {
|
||||||
@@ -73,7 +73,7 @@ impl<'a> Sprite for AnimatedSprite<'a> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn render(&self, drawer: &mut RenderDrawer, destination: &Rect) {
|
fn render(&self, drawer: &mut Renderer, destination: &Rect) {
|
||||||
drawer.copy(self.texture, Some(Rect::new(self.x, self.y, 16, 16)), Some(*destination));
|
drawer.copy(self.texture, Some(Rect::new_unwrap(self.x, self.y, 16, 16)), Some(*destination));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
36
src/tile.rs
36
src/tile.rs
@@ -6,14 +6,14 @@ use sdl2::rect::Rect;
|
|||||||
|
|
||||||
pub struct Layer<T> {
|
pub struct Layer<T> {
|
||||||
tiles: Vec<T>,
|
tiles: Vec<T>,
|
||||||
width: i32,
|
width: u32,
|
||||||
height: i32,
|
height: u32,
|
||||||
tile_width: i32,
|
tile_width: u32,
|
||||||
tile_height: i32
|
tile_height: u32
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T> Layer<T> where T: Clone {
|
impl<T> Layer<T> where T: Clone {
|
||||||
pub fn new(width: i32, height: i32, tile_width: i32, tile_height: i32, tile: T) -> Layer<T> {
|
pub fn new(width: u32, height: u32, tile_width: u32, tile_height: u32, tile: T) -> Layer<T> {
|
||||||
Layer {
|
Layer {
|
||||||
tiles: repeat(tile).take((width * height) as usize).collect(),
|
tiles: repeat(tile).take((width * height) as usize).collect(),
|
||||||
width: width,
|
width: width,
|
||||||
@@ -24,7 +24,7 @@ impl<T> Layer<T> where T: Clone {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_tile(&self, x: i32, y: i32) -> Option<&T> {
|
pub fn get_tile(&self, x: i32, y: i32) -> Option<&T> {
|
||||||
let offset = (x + y * self.width) as usize;
|
let offset = (x + y * self.width as i32) as usize;
|
||||||
|
|
||||||
if offset < self.tiles.len() {
|
if offset < self.tiles.len() {
|
||||||
Some(&self.tiles[offset])
|
Some(&self.tiles[offset])
|
||||||
@@ -34,33 +34,33 @@ impl<T> Layer<T> where T: Clone {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn set_tile(&mut self, x: i32, y: i32, tile: T) {
|
pub fn set_tile(&mut self, x: i32, y: i32, tile: T) {
|
||||||
let offset = (x + y * self.width) as usize;
|
let offset = (x + y * self.width as i32) as usize;
|
||||||
|
|
||||||
self.tiles[offset] = tile;
|
self.tiles[offset] = tile;
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn find_intersecting(&self, rect: &Rect) -> Option<Rect> {
|
pub fn find_intersecting(&self, rect: &Rect) -> Option<Rect> {
|
||||||
let x1 = max(rect.x / self.tile_width, 0);
|
let x1 = max(rect.x() / self.tile_width as i32, 0);
|
||||||
let y1 = max(rect.y / self.tile_height, 0);
|
let y1 = max(rect.y() / self.tile_height as i32, 0);
|
||||||
let x2 = min((rect.x + rect.w - 1) / self.tile_width, self.width - 1);
|
let x2 = min((rect.x() + rect.width() as i32 - 1) / self.tile_width as i32, self.width as i32 - 1);
|
||||||
let y2 = min((rect.y + rect.h - 1) / self.tile_height, self.height - 1);
|
let y2 = min((rect.y() + rect.height() as i32 - 1) / self.tile_height as i32, self.height as i32 - 1);
|
||||||
|
|
||||||
if x1 < 0 || x2 >= self.width {
|
if x1 < 0 || x2 >= self.width as i32 {
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
else if y1 < 0 || y2 >= self.height {
|
else if y1 < 0 || y2 >= self.height as i32 {
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
Some(Rect::new(x1, y1, x2 - x1, y2 - y1))
|
Some(Rect::new_unwrap(x1, y1, (x2 - x1) as u32, (y2 - y1) 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.h + 1 {
|
for y in intersect.y()..intersect.y() + intersect.height() as i32 + 1 {
|
||||||
for x in intersect.x..intersect.x + intersect.w + 1 {
|
for x in intersect.x()..intersect.x() + intersect.width() as i32 + 1 {
|
||||||
let position = Rect::new(x * self.tile_width, y * self.tile_height, self.tile_width, self.tile_height);
|
let position = Rect::new_unwrap(x * self.tile_width as i32, y * self.tile_height as i32, self.tile_width, self.tile_height);
|
||||||
|
|
||||||
f(self.get_tile(x, y).unwrap(), &position);
|
f(self.get_tile(x, y).unwrap(), &position);
|
||||||
}
|
}
|
||||||
@@ -69,6 +69,6 @@ impl<T> Layer<T> where T: Clone {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn to_rect(&self) -> Rect {
|
pub fn to_rect(&self) -> Rect {
|
||||||
Rect::new(0, 0, self.width * self.tile_width, self.height * self.tile_height)
|
Rect::new_unwrap(0, 0, self.width * self.tile_width, self.height * self.tile_height)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user