use bracket_lib::prelude::*; use crate::graphics::vga_color as vga; #[derive(Eq, PartialEq, Copy, Clone)] pub struct TileData { pub glyph: FontCharType, pub color_fg: (u8, u8, u8), pub color_bg: (u8, u8, u8), pub serialized_char: char, } #[derive(Eq, PartialEq, Copy, Clone, Hash)] pub enum TileType { Floor, // 0 Slow, // 1 Medium, // 2 Fast, // 3 Block, // 4 Whip, // 5 Stairs, // 6 Chest, // 7 SlowTime, // 8 Gem, // 9 Invisible, // 10 Teleport, // 11 Key, // 12 Door, // 13 Wall, // 14 SpeedTime, // 15 Trap, // 16 River, // 17 Power, // 18 Forest, // 19 Tree, // 20, 252 Bomb, // 21 Lava, // 22 Pit, // 23 Tome, // 24 Tunnel, // 25 Freeze, // 26 Nugget, // 27 Quake, // 28 InvisibleBlock, // 29 InvisibleWall, // 30 InvisibleDoor, // 31 Stop, // 32 Zap, // 34 Create, // 35 Generator, // 36 Trap2, // 33 Trap3, // 37 Trap4, // 39 Trap5, // 67 Trap6, // 224 Trap7, // 225 Trap8, // 226 Trap9, // 227 Trap10, // 228 Trap11, // 229 Trap12, // 230 Trap13, // 231 Player, // 40 Punctuation, // 222 Letter(char), } pub fn tile_data(tile: TileType) -> TileData { match tile { TileType::Floor => TileData { glyph: 0, serialized_char: ' ', color_fg: vga::BLACK, color_bg: vga::BLACK, }, TileType::Slow => TileData { glyph: 0, serialized_char: '1', color_fg: vga::BLACK, color_bg: vga::BLACK, }, TileType::Medium => TileData { glyph: 0, serialized_char: '2', color_fg: vga::BLACK, color_bg: vga::BLACK, }, TileType::Fast => TileData { glyph: 0, serialized_char: '3', color_fg: vga::BLACK, color_bg: vga::BLACK, }, TileType::Block => TileData { glyph: to_cp437('▓'), serialized_char: 'X', color_fg: vga::YELLOW, color_bg: vga::BLACK, }, TileType::Whip => TileData { glyph: to_cp437('⌠'), serialized_char: 'W', color_fg: vga::WHITE_BRIGHT, color_bg: vga::BLACK, }, TileType::Stairs => TileData { glyph: to_cp437('≡'), serialized_char: 'L', color_fg: vga::BLACK, color_bg: vga::WHITE, }, TileType::Chest => TileData { glyph: to_cp437('C'), serialized_char: 'C', color_fg: vga::YELLOW_BRIGHT, color_bg: vga::RED, }, TileType::SlowTime => TileData { glyph: to_cp437('Φ'), serialized_char: 'S', color_fg: vga::CYAN_BRIGHT, color_bg: vga::BLACK, }, TileType::Gem => TileData { glyph: to_cp437('♦'), serialized_char: '+', color_fg: vga::WHITE, color_bg: vga::BLACK, }, TileType::Invisible => TileData { glyph: to_cp437('¡'), serialized_char: 'I', color_fg: vga::GREEN, color_bg: vga::BLACK, }, TileType::Teleport => TileData { glyph: to_cp437('↑'), serialized_char: 'T', color_fg: vga::MAGENTA_BRIGHT, color_bg: vga::BLACK, }, TileType::Key => TileData { glyph: to_cp437('î'), serialized_char: 'K', color_fg: vga::RED_BRIGHT, color_bg: vga::BLACK, }, TileType::Door => TileData { glyph: to_cp437('∞'), serialized_char: 'D', color_fg: vga::CYAN, color_bg: vga::MAGENTA, }, TileType::Wall => TileData { glyph: to_cp437('█'), serialized_char: '#', color_fg: vga::YELLOW, color_bg: vga::BLACK, }, TileType::SpeedTime => TileData { glyph: to_cp437('Θ'), serialized_char: 'F', color_fg: vga::CYAN_BRIGHT, color_bg: vga::BLACK, }, TileType::Trap => TileData { glyph: to_cp437('∙'), serialized_char: '.', color_fg: vga::WHITE, color_bg: vga::BLACK, }, TileType::River => TileData { glyph: to_cp437('≈'), serialized_char: 'R', color_fg: vga::BLUE_BRIGHT, color_bg: vga::BLUE, }, TileType::Power => TileData { glyph: to_cp437('○'), serialized_char: 'Q', color_fg: vga::WHITE_BRIGHT, color_bg: vga::BLACK, }, TileType::Forest => TileData { glyph: to_cp437('█'), serialized_char: '/', color_fg: vga::GREEN, color_bg: vga::BLACK, }, TileType::Tree => TileData { glyph: to_cp437('♣'), serialized_char: '\\', color_fg: vga::YELLOW, color_bg: vga::GREEN, }, TileType::Bomb => TileData { glyph: to_cp437('¥'), serialized_char: 'B', color_fg: vga::WHITE_BRIGHT, color_bg: vga::BLACK, }, TileType::Lava => TileData { glyph: to_cp437('▓'), serialized_char: 'V', color_fg: vga::RED_BRIGHT, color_bg: vga::RED, }, TileType::Pit => TileData { glyph: to_cp437('░'), serialized_char: '=', color_fg: vga::WHITE, color_bg: vga::BLACK, }, TileType::Tome => TileData { glyph: to_cp437('♀'), serialized_char: 'A', color_fg: vga::WHITE_BRIGHT, color_bg: vga::BLACK, }, TileType::Tunnel => TileData { glyph: to_cp437('∩'), serialized_char: 'U', color_fg: vga::WHITE_BRIGHT, color_bg: vga::BLACK, }, TileType::Freeze => TileData { glyph: to_cp437('ƒ'), serialized_char: 'Z', color_fg: vga::CYAN_BRIGHT, color_bg: vga::BLACK, }, TileType::Nugget => TileData { glyph: to_cp437('☼'), serialized_char: '*', color_fg: vga::YELLOW_BRIGHT, color_bg: vga::BLACK, }, TileType::Quake => TileData { glyph: 0, serialized_char: 'E', color_fg: vga::BLACK, color_bg: vga::BLACK, }, TileType::InvisibleBlock => TileData { glyph: 0, serialized_char: ';', color_fg: vga::BLACK, color_bg: vga::BLACK, }, TileType::InvisibleWall => TileData { glyph: 0, serialized_char: ':', color_fg: vga::BLACK, color_bg: vga::BLACK, }, TileType::InvisibleDoor => TileData { glyph: 0, serialized_char: '`', color_fg: vga::BLACK, color_bg: vga::BLACK, }, TileType::Stop => TileData { glyph: 0, serialized_char: '-', color_fg: vga::BLACK, color_bg: vga::BLACK, }, TileType::Zap => TileData { glyph: to_cp437('▲'), serialized_char: '%', color_fg: vga::RED_BRIGHT, color_bg: vga::BLACK, }, TileType::Create => TileData { glyph: to_cp437('▼'), serialized_char: ']', color_fg: vga::WHITE_BRIGHT, color_bg: vga::BLACK, }, TileType::Generator => TileData { glyph: to_cp437('♠'), serialized_char: 'G', color_fg: vga::BLACK, color_bg: vga::BLACK, }, TileType::Trap2 => TileData { glyph: 0, serialized_char: '@', color_fg: vga::BLACK, color_bg: vga::BLACK, }, TileType::Trap3 => TileData { glyph: 0, serialized_char: ')', color_fg: vga::BLACK, color_bg: vga::BLACK, }, TileType::Trap4 => TileData { glyph: 0, serialized_char: '(', color_fg: vga::BLACK, color_bg: vga::BLACK, }, TileType::Trap5 => TileData { glyph: 0, serialized_char: '$', // Unsure about this color_fg: vga::BLACK, color_bg: vga::BLACK, }, TileType::Trap6 => TileData { glyph: 0, serialized_char: 'α', color_fg: vga::BLACK, color_bg: vga::BLACK, }, TileType::Trap7 => TileData { glyph: 0, serialized_char: 'ß', color_fg: vga::BLACK, color_bg: vga::BLACK, }, TileType::Trap8 => TileData { glyph: 0, serialized_char: 'Γ', color_fg: vga::BLACK, color_bg: vga::BLACK, }, TileType::Trap9 => TileData { glyph: 0, serialized_char: 'π', color_fg: vga::BLACK, color_bg: vga::BLACK, }, TileType::Trap10 => TileData { glyph: 0, serialized_char: 'Σ', color_fg: vga::BLACK, color_bg: vga::BLACK, }, TileType::Trap11 => TileData { glyph: 0, serialized_char: 'σ', color_fg: vga::BLACK, color_bg: vga::BLACK, }, TileType::Trap12 => TileData { glyph: 0, serialized_char: 'µ', color_fg: vga::BLACK, color_bg: vga::BLACK, }, TileType::Trap13 => TileData { glyph: 0, serialized_char: 'τ', color_fg: vga::BLACK, color_bg: vga::BLACK, }, TileType::Player => TileData { glyph: 0, serialized_char: 'P', color_fg: vga::BLACK, color_bg: vga::BLACK, }, TileType::Punctuation => TileData { glyph: to_cp437('!'), serialized_char: '!', color_fg: vga::WHITE_BRIGHT, color_bg: vga::YELLOW, }, TileType::Letter(c) => TileData { glyph: to_cp437(c.to_ascii_uppercase()), serialized_char: c, color_fg: vga::WHITE_BRIGHT, color_bg: vga::YELLOW, }, } } impl From for TileType { fn from(c: char) -> Self { match c { ' ' => TileType::Floor, '1' => TileType::Slow, '2' => TileType::Medium, '3' => TileType::Fast, 'X' => TileType::Block, 'W' => TileType::Whip, 'L' => TileType::Stairs, 'C' => TileType::Chest, 'S' => TileType::SlowTime, '+' => TileType::Gem, 'I' => TileType::Invisible, 'T' => TileType::Teleport, 'K' => TileType::Key, 'D' => TileType::Door, '#' => TileType::Wall, 'F' => TileType::SpeedTime, '.' => TileType::Trap, 'R' => TileType::River, 'Q' => TileType::Power, '/' => TileType::Forest, '\\' => TileType::Tree, 'B' => TileType::Bomb, 'V' => TileType::Lava, '=' => TileType::Pit, 'A' => TileType::Tome, 'U' => TileType::Tunnel, 'Z' => TileType::Freeze, '*' => TileType::Nugget, 'E' => TileType::Quake, ';' => TileType::InvisibleBlock, ':' => TileType::InvisibleWall, '`' => TileType::InvisibleDoor, '-' => TileType::Stop, '%' => TileType::Zap, ']' => TileType::Create, 'G' => TileType::Generator, '@' => TileType::Trap2, ')' => TileType::Trap3, '(' => TileType::Trap4, '$' => TileType::Trap5, 'α' => TileType::Trap6, 'ß' => TileType::Trap7, 'Γ' => TileType::Trap8, 'π' => TileType::Trap9, 'Σ' => TileType::Trap10, 'σ' => TileType::Trap11, 'µ' => TileType::Trap12, 'τ' => TileType::Trap13, 'P' => TileType::Player, '!' => TileType::Punctuation, _ => TileType::Letter(c), } } }