/ src / board / view / view_tile.rs
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>> {}