summaryrefslogtreecommitdiff
path: root/src/resources
diff options
context:
space:
mode:
Diffstat (limited to 'src/resources')
-rw-r--r--src/resources/ground.rs14
1 files changed, 13 insertions, 1 deletions
diff --git a/src/resources/ground.rs b/src/resources/ground.rs
index a5f4c00..8194a44 100644
--- a/src/resources/ground.rs
+++ b/src/resources/ground.rs
@@ -8,7 +8,7 @@ use specs::{
};
use crate::{
- components::{Visible, Removed},
+ components::{Visible, Removed, Flags, Flag},
Pos
};
@@ -28,6 +28,15 @@ impl Ground {
.collect()
}
+ pub fn all_components_on<'a, C: Component>(&self, pos: Pos, component_type: &'a ReadStorage<C>) -> Vec<&'a C> {
+ self.cells
+ .get(&pos)
+ .unwrap_or(&HashSet::new())
+ .iter()
+ .filter_map(|e| component_type.get(*e))
+ .collect()
+ }
+
pub fn by_height(&self, pos: &Pos, visibles: &ReadStorage<Visible>, ignore: &Entity) -> Vec<Entity> {
let mut entities: Vec<Entity> = self.cells
.get(&pos).unwrap_or(&HashSet::new())
@@ -41,4 +50,7 @@ impl Ground {
entities
}
+ pub fn flags_on<'a>(&self, pos: Pos, flags: &'a ReadStorage<Flags>) -> HashSet<Flag> {
+ self.all_components_on::<Flags>(pos, flags).into_iter().fold(HashSet::new(), |a, b| &a | &b.0)
+ }
}