From 2b0cc677f4092d94b31e95f3e9961ec6ed91327b Mon Sep 17 00:00:00 2001 From: troido Date: Sat, 22 Feb 2020 12:55:10 +0100 Subject: can now pick up specific object from ground --- src/systems/take.rs | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) (limited to 'src/systems/take.rs') 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()); -- cgit