summaryrefslogtreecommitdiff
path: root/src/systems/take.rs
diff options
context:
space:
mode:
authortroido <troido@protonmail.com>2020-02-22 12:55:10 +0100
committertroido <troido@protonmail.com>2020-02-22 12:55:10 +0100
commit2b0cc677f4092d94b31e95f3e9961ec6ed91327b (patch)
tree5c5e4683f5b8c9973ccfb260a876f88b599b0326 /src/systems/take.rs
parenta24e17014f37318d08fc8224d38e4062c959f34e (diff)
can now pick up specific object from ground
Diffstat (limited to 'src/systems/take.rs')
-rw-r--r--src/systems/take.rs20
1 files changed, 13 insertions, 7 deletions
diff --git a/src/systems/take.rs b/src/systems/take.rs
index 31634d2..99c66d5 100644
--- a/src/systems/take.rs
+++ b/src/systems/take.rs
@@ -1,5 +1,4 @@
-use std::collections::HashSet;
use specs::{
Entities,
@@ -15,7 +14,8 @@ use crate::components::{
Position,
Removed,
Inventory,
- Item
+ Item,
+ Visible
};
use crate::controls::{Control};
@@ -33,15 +33,21 @@ impl <'a> System<'a> for Take {
WriteStorage<'a, Removed>,
ReadStorage<'a, Item>,
WriteStorage<'a, Inventory>,
- Write<'a, NewEntities>
+ Write<'a, NewEntities>,
+ ReadStorage<'a, Visible>
);
- fn run(&mut self, (entities, controllers, positions, ground, mut removed, items, mut inventories, mut new): Self::SystemData) {
+ fn run(&mut self, (entities, controllers, positions, ground, mut removed, items, mut inventories, mut new, visibles): Self::SystemData) {
for (ent, controller, position, inventory) in (&entities, &controllers, &positions, &mut inventories).join(){
match &controller.0 {
- Control::Take(_rank) if inventory.items.len() < inventory.capacity => {
- let mut ents = ground.cells.get(&position.pos).unwrap_or(&HashSet::new()).clone();
- ents.remove(&ent);
+ Control::Take(rank) if inventory.items.len() < inventory.capacity => {
+ let mut ents = ground.by_height(&position.pos, &visibles, &ent);
+ if let Some(idx) = rank {
+ if *idx >= ents.len() {
+ return
+ }
+ ents = vec!(ents[*idx]);
+ }
for ent in ents {
if let Some(item) = items.get(ent) {
inventory.items.insert(0, item.clone());