reorg: no main binary, all in bin/
This commit is contained in:
52
src/bin/printmap.rs
Normal file
52
src/bin/printmap.rs
Normal file
@@ -0,0 +1,52 @@
|
||||
extern crate vrtue;
|
||||
use vrtue::{arena, tile, town, world};
|
||||
|
||||
extern crate itertools;
|
||||
extern crate memmap;
|
||||
|
||||
use std::mem::transmute;
|
||||
use std::env;
|
||||
|
||||
use itertools::Itertools;
|
||||
use memmap::{Mmap, Protection};
|
||||
|
||||
|
||||
fn mmap_to_rows<'a, M: world::HasMap>(mmap: &memmap::Mmap) -> &'a world::HasMap
|
||||
where M: Copy + 'a
|
||||
{
|
||||
assert_eq!(std::mem::size_of::<M>(), mmap.len());
|
||||
unsafe { transmute::<*const u8, &M>(mmap.ptr()) }
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let args: Vec<String> = env::args().collect();
|
||||
let filename;
|
||||
if args.len() > 1 {
|
||||
filename = &args[1] as &str;
|
||||
} else {
|
||||
filename = "data/WORLD.MAP";
|
||||
}
|
||||
let conv = match filename {
|
||||
s if s.ends_with("SHRINE.CON") => mmap_to_rows::<arena::Shrine>,
|
||||
s if s.ends_with(".CON") => mmap_to_rows::<arena::Arena>,
|
||||
s if s.ends_with(".ULT") => mmap_to_rows::<town::Town>,
|
||||
s if s.ends_with("WORLD.MAP") => mmap_to_rows::<world::World>,
|
||||
_ => panic!("unrecognized map file"),
|
||||
};
|
||||
|
||||
let file_mmap = Mmap::open_path(filename, Protection::Read).unwrap();
|
||||
let world = conv(&file_mmap);
|
||||
|
||||
print_rows(world.map().rows());
|
||||
}
|
||||
|
||||
fn print_rows<'a, T: ?Sized, U: ?Sized>(rows: Box<T>)
|
||||
where T: Iterator<Item = Box<U>> + 'a,
|
||||
U: Iterator<Item = &'a tile::Tile> + 'a
|
||||
{
|
||||
for row in rows {
|
||||
let s1: String = row.into_iter().map(|tile| tile.as_char()).collect();
|
||||
let s: String = s1.chars().intersperse(' ').collect();
|
||||
println!("{}", s);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user