30 lines
1.1 KiB
Rust
30 lines
1.1 KiB
Rust
use specs::prelude::*;
|
|
use super::{WantsToPickupItem, Name, InBackpack, Position, gamelog::GameLog};
|
|
|
|
pub struct ItemCollectionSystem {}
|
|
|
|
impl<'a> System<'a> for ItemCollectionSystem {
|
|
#[allow(clippy::type_complexity)]
|
|
type SystemData = ( ReadExpect<'a, Entity>,
|
|
WriteExpect<'a, GameLog>,
|
|
WriteStorage<'a, WantsToPickupItem>,
|
|
WriteStorage<'a, Position>,
|
|
ReadStorage<'a, Name>,
|
|
WriteStorage<'a, InBackpack>
|
|
);
|
|
|
|
fn run (&mut self, data : Self::SystemData) {
|
|
let (player_entity, mut log, mut wants_pickup, mut positions, names, mut backpack) = data;
|
|
|
|
for pickup in wants_pickup.join() {
|
|
positions.remove(pickup.item);
|
|
backpack.insert(pickup.item, InBackpack{ owner: pickup.collected_by }).expect("Unable to insert item");
|
|
|
|
if pickup.collected_by == *player_entity {
|
|
log.entries.push(format!("You pick up the {}.", names.get(pickup.item).unwrap().name));
|
|
}
|
|
}
|
|
|
|
wants_pickup.clear();
|
|
}
|
|
} |