view_tile.rs
1 use ratatui::{ 2 style::{Color, Style}, 3 text::{Span, Text}, 4 }; 5 6 use crate::board::tile::{Biome, Tile}; 7 8 #[allow(unused)] 9 pub trait TileView<'a>: Into<Text<'a>> {} 10 11 #[derive(Clone)] 12 pub struct WorldTile { 13 pub tile: Tile, 14 pub biome: Biome, 15 } 16 17 impl<'a> From<WorldTile> for Text<'a> { 18 fn from(value: WorldTile) -> Self { 19 let (glyph, bg, fg) = match value.tile { 20 Tile::Wall => match value.biome { 21 Biome::Ocean => ("@@", Color::LightBlue, Color::Red), 22 Biome::Beach => ("$$", Color::LightYellow, Color::Black), 23 Biome::Castle => ("##", Color::Black, Color::White), 24 }, 25 Tile::Ground => match value.biome { 26 Biome::Ocean => ("%%", Color::LightBlue, Color::Blue), 27 Biome::Beach => ("##", Color::LightYellow, Color::Yellow), 28 Biome::Castle => ("..", Color::Black, Color::Gray), 29 }, 30 }; 31 32 Span::raw(glyph) 33 .style(Style::default().fg(fg).bg(bg)) 34 .into() 35 } 36 } 37 38 impl<'a, T> TileView<'a> for T where T: Into<Text<'a>> {}