kroz-rs/src/tile_data.rs
2022-11-23 23:57:14 -05:00

435 lines
13 KiB
Rust
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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<char> 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),
}
}
}