|
@@ -1,16 +1,19 @@
|
|
|
-use crate::components::{Motion, Renderable};
|
|
|
-use crate::map::Map;
|
|
|
+use crate::components::{Motion, Player, Renderable};
|
|
|
+use crate::map::{Map, Viewshed};
|
|
|
|
|
|
system_impl! {
|
|
|
Draw(
|
|
|
resource mut game_board: carpet::GameBoard<carpet::CP437>,
|
|
|
resource map: Map,
|
|
|
+ resource vs: Viewshed,
|
|
|
renderable: Renderable,
|
|
|
pos: carpet::Coord,
|
|
|
) {
|
|
|
game_board.clear();
|
|
|
for (x, y, t) in map.tiles.iter() {
|
|
|
- game_board.set([x, y], t.glyph());
|
|
|
+ if vs.vs.visibility([x, y]) == carpet::Visibility::Visible {
|
|
|
+ game_board.set([x, y], t.glyph());
|
|
|
+ }
|
|
|
}
|
|
|
for (p, r) in (&pos, &renderable).join() {
|
|
|
game_board.set_with_color([p.x, p.y], r.glyph, r.color);
|
|
@@ -34,3 +37,17 @@ system! {
|
|
|
motion.clear();
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+system! {
|
|
|
+ Visibility(
|
|
|
+ resource map: Map,
|
|
|
+ resource mut viewshed: Viewshed,
|
|
|
+ pos: carpet::Coord,
|
|
|
+ _player: Player,
|
|
|
+ ) {
|
|
|
+ if viewshed.dirty {
|
|
|
+ viewshed.vs.calculate_from(&map.tiles, *pos);
|
|
|
+ viewshed.dirty = false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|