extern crate gfx; use ega; use ::std; use std::io::Read; use std::path::Path; use self::gfx::tex; #[repr(C)] #[derive(Clone, Copy)] pub struct Tile { pub val: u8, } pub fn get_tiles(factory: &mut F) -> (//gfx::handle::Texture, gfx::handle::ShaderResourceView) where R: gfx::Resources, F: gfx::Factory, T: gfx::format::TextureFormat { let filename = "data/SHAPES.EGA"; let mut file = std::fs::File::open(Path::new(filename)) .expect(&format!("failed opening tiles file: {}", filename)); let mut ega_vec = Vec::new(); file.read_to_end(&mut ega_vec).expect("Read tiles file"); let ega_page = ega::decode(&ega_vec, ega::Compression::UNCOMPRESSED, ega::Tiling::TILED(16)); let tex = factory.create_texture_const_u8::(tex::Kind::D2(16, 16 * 256, tex::AaMode::Single), &[&ega_page.data]) .expect("create tile texture"); tex.1 } impl Tile { pub fn as_char(&self) -> char { match self.val { 0 => '~', // deep water '๐ŸŒŠ' 1 => 'โ‰ˆ', // medium water 2 => 'โ‰‹', // shallow water 3 => ',', // swamp 4 => 'โขŠ', // plain 'โ–‘' 5 => '๐ŸŒฟ', // scrub 'แƒฌ' 6 => '๐ŸŒณ', // forest 7 => 'โŒ“', // hill 'โˆฉ' 8 => 'โจ‡', // mountain 'โ–ณ' 9 => 'โ˜—', // dungeon 10 => 'โŸ', // city 11 | 13...15 => 'โ›ซ', // castle 12 => 'โ–', // village 22 => 'โŽ”', // tile floor 23 => 'โŸ—', // bridge 24 => 'โงฌ', // balloon 25 => 'โ‰ƒ', // bridge top 26 => 'โ‰‚', // bridge bottom 27 => 'โ', // ladder up 28 => 'โ—', // ladder down 29 => 'v', // ruin 30 => 'โ—Œ', // shrine 31 => '๐Ÿ˜‡', // avatar 48 => 'โ—ฏ', // column 49 => 'โ—ฃ', // SW 50 => 'โ—ข', // SE 51 => 'โ—ค', // NW 52 => 'โ—ฅ', // NE 53 => 'โ—‰', // Mast 54 => 'โŽˆ', // ship's wheel 55 => 'แƒค', // rocks 'โ' 56 => '/', // Lyin down 57 => 'โฌ›', // stone wall 58 => 'โงฏ', // '๐Ÿ”’', // locked door 59 => 'โงฎ', // '๐Ÿ”“', // unlocked door 60 => '๐Ÿ’ฐ', // chest 61 => 'โ˜ฅ', // ankh 62 => 'โจณ', // brick floor 'โŒ—' 63 => 'โ–ค', // wood planks 'โงป' 68 => '๐ŸŒซ', // poison field 69 => 'โšก', // energy field 70 => '๐Ÿ”ฅ', // fire field 71 => '๐Ÿ’ค', // sleep field 72 => 'โ–ฃ', // solid barrier 73 => 'โ–’', // hidden passage 75 => '๐Ÿ–', // spit (rotisserie) '๐Ÿณ' 76 => 'โŒ˜', // lava // 79 => '๐Ÿ’ฅ', // attack flash // 88 | 89 => 'แŒฟ', // beggar 96...121 => ::std::char::from_u32((self.val - 31) as u32).unwrap(), 122 => '=', // space 123 => 'โА', // right '' 124 => 'โŠ', // left 'โŠจ' 125 => 'โ–ข', // window 126 => 'โœจ', // space 127 => 'โ–“', // brick wall // 140 | 141 => '๐ŸŒ€', // whirlpool 189 => 'โš”', // phantom 2 _ => panic!("{0}", self.val) } } }