monster_ai_system.rs 740 B

123456789101112131415161718192021222324
  1. extern crate specs;
  2. use specs::prelude::*;
  3. use super::{Viewshed, Monster, Name};
  4. extern crate rltk;
  5. use rltk::{Point, console};
  6. pub struct MonsterAI {}
  7. impl<'a> System<'a> for MonsterAI {
  8. type SystemData = ( ReadExpect<'a, Point>,
  9. ReadStorage<'a, Viewshed>,
  10. ReadStorage<'a, Monster>,
  11. ReadStorage<'a, Name>);
  12. fn run(&mut self, data : Self::SystemData) {
  13. let (player_pos, viewshed, monster, name) = data;
  14. for (viewshed,_monster,name) in (&viewshed, &monster, &name).join() {
  15. if viewshed.visible_tiles.contains(&*player_pos) {
  16. console::log(&format!("{} shouts insults", name.name));
  17. }
  18. }
  19. }
  20. }