Upgrade to most recent version of Rust. Still doesn't work.
This commit is contained in:
247
src/main.rs
247
src/main.rs
@@ -1,13 +1,16 @@
|
||||
extern crate time;
|
||||
extern crate sdl2;
|
||||
extern crate sdl2_image;
|
||||
|
||||
|
||||
use std::path::Path;
|
||||
use std::thread::sleep_ms;
|
||||
|
||||
use sdl2::video::{Window, WindowPos, OPENGL};
|
||||
use sdl2::timer::{get_ticks, delay};
|
||||
//use sdl2::video::{Window, WindowPos, OPENGL};
|
||||
//use sdl2::timer::{get_ticks, delay};
|
||||
use sdl2_image::LoadTexture;
|
||||
use sdl2::rect::Rect;
|
||||
use sdl2::keycode::KeyCode;
|
||||
use sdl2::keyboard::Keycode;
|
||||
use sdl2::pixels::Color;
|
||||
|
||||
use tile::Layer;
|
||||
@@ -24,13 +27,13 @@ mod keyboard;
|
||||
mod sprite;
|
||||
|
||||
|
||||
const SCREEN_WIDTH : i32 = 960;
|
||||
const SCREEN_HEIGHT : i32 = 640;
|
||||
const SCREEN_WIDTH : u32 = 960;
|
||||
const SCREEN_HEIGHT : u32 = 640;
|
||||
|
||||
const TILE_WIDTH : i32 = 32;
|
||||
const TILE_HEIGHT : i32 = 32;
|
||||
const TILE_WIDTH : u32 = 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_THRESHOLD_X : f32 = 0.2;
|
||||
@@ -51,41 +54,20 @@ enum Tile<'a> {
|
||||
|
||||
|
||||
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);
|
||||
|
||||
let window = match Window::new(&sdl_context, "Super Matte Bros", WindowPos::PosCentered, WindowPos::PosCentered, SCREEN_WIDTH, SCREEN_HEIGHT, OPENGL) {
|
||||
Ok(window) => window,
|
||||
Err(err) => panic!("failed to create window: {}", err)
|
||||
};
|
||||
let window = video_subsystem.window("Super Matte Bros", SCREEN_WIDTH, SCREEN_HEIGHT).position_centered().build().unwrap();
|
||||
let mut renderer = window.renderer().software().build().unwrap();
|
||||
|
||||
let mut renderer = match sdl2::render::Renderer::from_window(window, sdl2::render::RenderDriverIndex::Auto, sdl2::render::ACCELERATED) {
|
||||
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 world_sprites = renderer.load_texture(&Path::new("gfx/world.png")).unwrap();
|
||||
|
||||
let floor_sprite = StaticSprite::new(&world_sprites, 16 * 0, 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")) {
|
||||
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 player_sprites = renderer.load_texture(&Path::new("gfx/mario.png")).unwrap();
|
||||
|
||||
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);
|
||||
|
||||
|
||||
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(2, 16, Tile::Background(Rect::new(16 * 8, 16 * 9, 16, 16)));
|
||||
layer.set_tile(3, 16, Tile::Background(Rect::new(16 * 10, 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_unwrap(16 * 8, 16 * 9, 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(1, 17, Tile::Background(Rect::new(16 * 8, 16 * 9, 16, 16)));
|
||||
layer.set_tile(2, 17, Tile::Background(Rect::new(16 * 9, 16 * 9, 16, 16)));
|
||||
layer.set_tile(3, 17, Tile::Background(Rect::new(16 * 8, 16 * 9, 16, 16)));
|
||||
layer.set_tile(4, 17, Tile::Background(Rect::new(16 * 10, 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_unwrap(16 * 8, 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_unwrap(16 * 8, 16 * 9, 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(12, 17, Tile::Background(Rect::new(16 * 12, 16 * 9, 16, 16)));
|
||||
layer.set_tile(13, 17, Tile::Background(Rect::new(16 * 12, 16 * 9, 16, 16)));
|
||||
layer.set_tile(14, 17, Tile::Background(Rect::new(16 * 12, 16 * 9, 16, 16)));
|
||||
layer.set_tile(15, 17, Tile::Background(Rect::new(16 * 13, 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_unwrap(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_unwrap(16 * 12, 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(17, 17, Tile::Background(Rect::new(16 * 8, 16 * 9, 16, 16)));
|
||||
layer.set_tile(18, 17, Tile::Background(Rect::new(16 * 10, 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_unwrap(16 * 8, 16 * 9, 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(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(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(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(20, 7, Tile::Floor(Rect::new(16 * 1, 16 * 20, 16, 16)));
|
||||
layer.set_tile(21, 7, Tile::Floor(Rect::new(16 * 2, 16 * 20, 16, 16)));
|
||||
layer.set_tile(19, 8, Tile::Floor(Rect::new(16 * 0, 16 * 21, 16, 16)));
|
||||
layer.set_tile(20, 8, Tile::Floor(Rect::new(16 * 1, 16 * 21, 16, 16)));
|
||||
layer.set_tile(21, 8, Tile::Floor(Rect::new(16 * 2, 16 * 21, 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_unwrap(16 * 1, 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_unwrap(16 * 0, 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_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(24, 17, Tile::Background(Rect::new(16 * 12, 16 * 9, 16, 16)));
|
||||
layer.set_tile(25, 17, Tile::Background(Rect::new(16 * 13, 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_unwrap(16 * 12, 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(29, 16, Tile::Floor(Rect::new(16 * 1, 16 * 8, 16, 16)));
|
||||
layer.set_tile(28, 17, Tile::Floor(Rect::new(16 * 0, 16 * 9, 16, 16)));
|
||||
layer.set_tile(29, 17, Tile::Floor(Rect::new(16 * 1, 16 * 9, 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_unwrap(16 * 1, 16 * 8, 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_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(39, 15, Tile::Floor(Rect::new(16 * 1, 16 * 8, 16, 16)));
|
||||
layer.set_tile(38, 16, Tile::Floor(Rect::new(16 * 0, 16 * 9, 16, 16)));
|
||||
layer.set_tile(39, 16, Tile::Floor(Rect::new(16 * 1, 16 * 9, 16, 16)));
|
||||
layer.set_tile(38, 17, Tile::Floor(Rect::new(16 * 0, 16 * 9, 16, 16)));
|
||||
layer.set_tile(39, 17, Tile::Floor(Rect::new(16 * 1, 16 * 9, 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_unwrap(16 * 1, 16 * 8, 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_unwrap(16 * 1, 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_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(42, 17, Tile::Background(Rect::new(16 * 12, 16 * 9, 16, 16)));
|
||||
layer.set_tile(43, 17, Tile::Background(Rect::new(16 * 12, 16 * 9, 16, 16)));
|
||||
layer.set_tile(44, 17, Tile::Background(Rect::new(16 * 13, 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_unwrap(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_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(47, 14, Tile::Floor(Rect::new(16 * 1, 16 * 8, 16, 16)));
|
||||
layer.set_tile(46, 15, Tile::Floor(Rect::new(16 * 0, 16 * 9, 16, 16)));
|
||||
layer.set_tile(47, 15, Tile::Floor(Rect::new(16 * 1, 16 * 9, 16, 16)));
|
||||
layer.set_tile(46, 16, Tile::Floor(Rect::new(16 * 0, 16 * 9, 16, 16)));
|
||||
layer.set_tile(47, 16, Tile::Floor(Rect::new(16 * 1, 16 * 9, 16, 16)));
|
||||
layer.set_tile(46, 17, Tile::Floor(Rect::new(16 * 0, 16 * 9, 16, 16)));
|
||||
layer.set_tile(47, 17, Tile::Floor(Rect::new(16 * 1, 16 * 9, 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_unwrap(16 * 1, 16 * 8, 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_unwrap(16 * 1, 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_unwrap(16 * 1, 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_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(50, 16, Tile::Background(Rect::new(16 * 8, 16 * 9, 16, 16)));
|
||||
layer.set_tile(51, 16, Tile::Background(Rect::new(16 * 10, 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_unwrap(16 * 8, 16 * 9, 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(49, 17, Tile::Background(Rect::new(16 * 8, 16 * 9, 16, 16)));
|
||||
layer.set_tile(50, 17, Tile::Background(Rect::new(16 * 9, 16 * 9, 16, 16)));
|
||||
layer.set_tile(51, 17, Tile::Background(Rect::new(16 * 8, 16 * 9, 16, 16)));
|
||||
layer.set_tile(52, 17, Tile::Background(Rect::new(16 * 10, 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_unwrap(16 * 8, 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_unwrap(16 * 8, 16 * 9, 16, 16)));
|
||||
layer.set_tile(52, 17, Tile::Background(Rect::new_unwrap(16 * 10, 16 * 8, 16, 16)));
|
||||
|
||||
|
||||
for x in 0..212 {
|
||||
@@ -200,16 +182,15 @@ fn main() {
|
||||
|
||||
let mut player = Player::new(390.0, 390.0);
|
||||
|
||||
let mut current : u32;
|
||||
let mut elapsed : u32;
|
||||
let mut previous : u32 = get_ticks();
|
||||
let mut lag : u32 = 0;
|
||||
let mut current : u64;
|
||||
let mut elapsed : u64;
|
||||
let mut previous : u64 = time::precise_time_ns();
|
||||
let mut lag : u64 = 0;
|
||||
|
||||
let mut drawer = renderer.drawer();
|
||||
let mut event_pump = sdl_context.event_pump();
|
||||
let mut event_pump = sdl_context.event_pump().unwrap();
|
||||
|
||||
'main : loop {
|
||||
current = get_ticks();
|
||||
current = time::precise_time_ns();
|
||||
elapsed = current - previous;
|
||||
previous = current;
|
||||
lag += elapsed;
|
||||
@@ -223,21 +204,21 @@ fn main() {
|
||||
Event::Quit {..} => break 'main,
|
||||
Event::KeyDown {keycode, repeat, ..} => {
|
||||
if repeat == false {
|
||||
keyboard.key_down(keycode);
|
||||
keyboard.key_down(keycode.unwrap());
|
||||
}
|
||||
},
|
||||
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;
|
||||
}
|
||||
|
||||
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 {
|
||||
PLAYER_ACCELERATION_X_START
|
||||
} else {
|
||||
@@ -245,7 +226,7 @@ fn main() {
|
||||
};
|
||||
|
||||
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 {
|
||||
PLAYER_ACCELERATION_X_START
|
||||
} else {
|
||||
@@ -262,14 +243,14 @@ fn main() {
|
||||
}
|
||||
|
||||
if player.on_ground {
|
||||
if keyboard.was_pressed(KeyCode::Up) {
|
||||
if keyboard.was_pressed(Keycode::Up) {
|
||||
player.dy = -8.0;
|
||||
|
||||
player.on_ground = false;
|
||||
}
|
||||
}
|
||||
|
||||
if keyboard.was_released(KeyCode::Up) {
|
||||
if keyboard.was_released(Keycode::Up) {
|
||||
if player.dy < -4.0 {
|
||||
player.dy = -4.0;
|
||||
}
|
||||
@@ -285,11 +266,11 @@ fn main() {
|
||||
let p = player.x + player.w as f32;
|
||||
let mut d = player.dx;
|
||||
|
||||
for y in intersect.y..intersect.y + intersect.h + 1 {
|
||||
let mut x = intersect.x;
|
||||
for y in intersect.y()..intersect.y() + intersect.height() as i32 + 1 {
|
||||
let mut x = intersect.x();
|
||||
|
||||
loop {
|
||||
let t = (x * TILE_WIDTH) as f32 - p;
|
||||
let t = (x * TILE_WIDTH as i32) as f32 - p;
|
||||
|
||||
if t > d {
|
||||
break;
|
||||
@@ -321,11 +302,11 @@ fn main() {
|
||||
let p = player.x;
|
||||
let mut d = player.dx;
|
||||
|
||||
for y in intersect.y..intersect.y + intersect.h + 1 {
|
||||
let mut x = intersect.x;
|
||||
for y in intersect.y()..intersect.y() + intersect.height() as i32 + 1 {
|
||||
let mut x = intersect.x();
|
||||
|
||||
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 {
|
||||
break;
|
||||
@@ -359,11 +340,11 @@ fn main() {
|
||||
let p = player.y + player.h as f32;
|
||||
let mut d = player.dy;
|
||||
|
||||
for x in intersect.x..intersect.x + intersect.w + 1 {
|
||||
let mut y = intersect.y;
|
||||
for x in intersect.x()..intersect.x() + intersect.width() as i32 + 1 {
|
||||
let mut y = intersect.y();
|
||||
|
||||
loop {
|
||||
let t = (y * TILE_HEIGHT) as f32 - p;
|
||||
let t = (y * TILE_HEIGHT as i32) as f32 - p;
|
||||
|
||||
if t > d {
|
||||
break;
|
||||
@@ -399,11 +380,11 @@ fn main() {
|
||||
let p = player.y;
|
||||
let mut d = player.dy;
|
||||
|
||||
for x in intersect.x..intersect.x + intersect.w + 1 {
|
||||
let mut y = intersect.y;
|
||||
for x in intersect.x()..intersect.x() + intersect.width() as i32 + 1 {
|
||||
let mut y = intersect.y();
|
||||
|
||||
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 {
|
||||
break;
|
||||
@@ -441,36 +422,36 @@ fn main() {
|
||||
lag -= MS_PER_UPDATE;
|
||||
}
|
||||
|
||||
drawer.set_draw_color(Color::RGB(93, 148, 251));
|
||||
drawer.clear();
|
||||
renderer.set_draw_color(Color::RGB(93, 148, 251));
|
||||
renderer.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 _ = drawer.copy(&world_sprites, Some(src), Some(object));
|
||||
let _ = renderer.copy(&world_sprites, Some(src), Some(object));
|
||||
},
|
||||
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());
|
||||
|
||||
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();
|
||||
}
|
||||
|
||||
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())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user