blob: 8f8a56706287c7c20b6409cbf896a7a9b2e8bac7 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
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<Vec<&'a Box<dyn Entity>>>,
) -> io::Result<()> {
let neighbor_styles: Neighbors<Option<BoxStyle>> =
neighbors.map(|es| {
es.iter()
.filter_map(|e| e.downcast_ref::<Wall>())
.map(|wall| wall.style)
.next()
});
write!(out, "{}", neighbor_styles.style(self.style))
}
}
|