Allow player to pick up items
This commit is contained in:
parent
4e639f9179
commit
4aecf6f7d6
@ -78,3 +78,6 @@ pub struct ProvidesHealing {
|
|||||||
|
|
||||||
#[derive(Clone, Copy, Debug, PartialEq)]
|
#[derive(Clone, Copy, Debug, PartialEq)]
|
||||||
pub struct ProvidesDungeonMap;
|
pub struct ProvidesDungeonMap;
|
||||||
|
|
||||||
|
#[derive(Clone, PartialEq)]
|
||||||
|
pub struct Carried(pub Entity);
|
||||||
|
@ -5,6 +5,8 @@ use crate::prelude::*;
|
|||||||
#[read_component(Player)]
|
#[read_component(Player)]
|
||||||
#[read_component(Enemy)]
|
#[read_component(Enemy)]
|
||||||
#[write_component(Health)]
|
#[write_component(Health)]
|
||||||
|
#[read_component(Item)]
|
||||||
|
#[read_component(Carried)]
|
||||||
pub fn player_input(
|
pub fn player_input(
|
||||||
ecs: &mut SubWorld,
|
ecs: &mut SubWorld,
|
||||||
commands: &mut CommandBuffer,
|
commands: &mut CommandBuffer,
|
||||||
@ -18,6 +20,23 @@ pub fn player_input(
|
|||||||
VirtualKeyCode::Right | VirtualKeyCode::D => Point::new(1, 0),
|
VirtualKeyCode::Right | VirtualKeyCode::D => Point::new(1, 0),
|
||||||
VirtualKeyCode::Up | VirtualKeyCode::W => Point::new(0, -1),
|
VirtualKeyCode::Up | VirtualKeyCode::W => Point::new(0, -1),
|
||||||
VirtualKeyCode::Down | VirtualKeyCode::S => Point::new(0, 1),
|
VirtualKeyCode::Down | VirtualKeyCode::S => Point::new(0, 1),
|
||||||
|
VirtualKeyCode::G => {
|
||||||
|
let (player, player_pos) = players
|
||||||
|
.iter(ecs)
|
||||||
|
.find_map(|(entity, pos)| Some((*entity, *pos)))
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
let mut items = <(Entity, &Item, &Point)>::query();
|
||||||
|
items
|
||||||
|
.iter(ecs)
|
||||||
|
.filter(|(_entity, _item, &item_pos)| item_pos == player_pos)
|
||||||
|
.for_each(|(entity, _item, _item_pos)| {
|
||||||
|
commands.remove_component::<Point>(*entity);
|
||||||
|
commands.add_component(*entity, Carried(player));
|
||||||
|
});
|
||||||
|
|
||||||
|
Point::new(0, 0)
|
||||||
|
}
|
||||||
_ => Point::new(0, 0),
|
_ => Point::new(0, 0),
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -26,11 +45,10 @@ pub fn player_input(
|
|||||||
.find_map(|(entity, pos)| Some((*entity, *pos + delta)))
|
.find_map(|(entity, pos)| Some((*entity, *pos + delta)))
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
let mut enemies = <(Entity, &Point)>::query().filter(component::<Enemy>());
|
|
||||||
|
|
||||||
let mut did_something = false;
|
let mut did_something = false;
|
||||||
if delta.x != 0 || delta.y != 0 {
|
if delta.x != 0 || delta.y != 0 {
|
||||||
let mut hit_something = false;
|
let mut hit_something = false;
|
||||||
|
let mut enemies = <(Entity, &Point)>::query().filter(component::<Enemy>());
|
||||||
enemies
|
enemies
|
||||||
.iter(ecs)
|
.iter(ecs)
|
||||||
.filter(|(_, pos)| **pos == destination)
|
.filter(|(_, pos)| **pos == destination)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user