use crate::display; use crate::display::draw_box::{BoxStyle, Stylable}; use crate::entities::Entity; use crate::types::{Neighbors, Position}; use std::io::{self, Write}; entity! { pub struct Wall { pub style: BoxStyle } } static_description!(Wall, "a wall"); impl Wall { pub fn new(position: Position, style: BoxStyle) -> Self { new_entity!(Wall { position, style }) } } impl display::DrawWithNeighbors for Wall { fn do_draw_with_neighbors<'a, 'b>( &'a self, out: &'b mut dyn Write, neighbors: &'a Neighbors>>, ) -> io::Result<()> { let neighbor_styles: Neighbors> = neighbors.map(|es| { es.iter() .filter_map(|e| e.downcast_ref::()) .map(|wall| wall.style) .next() }); write!(out, "{}", neighbor_styles.style(self.style)) } }