Save / Load levels

This commit is contained in:
2019-03-30 13:34:09 +01:00
parent ae601720e3
commit 2ff29eb0c6
12 changed files with 277 additions and 128 deletions
+7 -5
View File
@@ -17,7 +17,7 @@ fn main() {
let mut running = true;
let mut map = Map::from_str(include_str!("../../assets/levels/level2.txt")).unwrap();
let mut map = Map::load("./assets/levels/level2.lvl").unwrap();
loop {
let top_panel_size = Vector2::new(renderer.window().size().x as f32, 50.0);
@@ -42,10 +42,12 @@ fn main() {
let x = ((x - left_panel_size.x as i32) / 16) as usize;
let y = ((y - top_panel_size.y as i32) / 16) as usize;
if map.tile(y, x) == CollisionTile::empty() {
map.set_tile(y, x, CollisionTile::full());
} else {
map.set_tile(y, x, CollisionTile::empty());
if let Some(tile) = map.tile(y, x) {
if tile == CollisionTile::empty() {
map.set_tile(y, x, CollisionTile::full());
} else {
map.set_tile(y, x, CollisionTile::empty());
}
}
}
},
+22 -15
View File
@@ -7,6 +7,7 @@ use sfml::window::{joystick, Event, Key};
use rusty::engine::character::Character;
use rusty::engine::controls::Controls;
use rusty::engine::renderer::Renderer;
use rusty::engine::map::Map;
use rusty::engine::scene::Scene;
fn parse_resolution(res: &str) -> Result<(u32, u32), String> {
@@ -32,20 +33,25 @@ fn parse_resolution(res: &str) -> Result<(u32, u32), String> {
fn main() {
let matches = App::new("Rusty Maker")
.version(crate_version!())
.arg(
Arg::with_name("resolution")
.short("r")
.long("resolution")
.value_name("WIDTHxHEIGHT")
.takes_value(true)
.default_value("800x450")
.validator(|x| parse_resolution(&x).map(|_| ())),
).arg(
Arg::with_name("fullscreen")
.short("f")
.long("fullscreen")
.takes_value(false),
).get_matches();
.arg(Arg::with_name("resolution")
.short("r")
.long("resolution")
.value_name("WIDTHxHEIGHT")
.takes_value(true)
.default_value("800x450")
.validator(|x| parse_resolution(&x).map(|_| ())))
.arg(Arg::with_name("map")
.short("m")
.long("map")
.value_name("MAP")
.takes_value(true)
.default_value("assets/levels/level2.lvl")
.validator(|x| Map::load(x).map(|_| ()).map_err(|x| format!("{}", x))))
.arg(Arg::with_name("fullscreen")
.short("f")
.long("fullscreen")
.takes_value(false))
.get_matches();
let resolution = parse_resolution(matches.value_of("resolution").unwrap()).unwrap();
let fullscreen = matches.is_present("fullscreen");
@@ -62,7 +68,8 @@ fn main() {
let mut character = Character::with_controls(controls);
character.set_position((10.0, 0.0));
let mut scene = Scene::new();
let map = Map::load(matches.value_of("map").unwrap()).unwrap();
let mut scene = Scene::from_map(map);
scene.add(character);
let mut renderer = Renderer::new(resolution.0, resolution.1, fullscreen);