Projectile damage
This commit is contained in:
parent
f56ae2bc04
commit
4bf62bfe39
6 changed files with 71 additions and 2 deletions
44
src/projectile.rs
Normal file
44
src/projectile.rs
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
use bevy::prelude::*;
|
||||
|
||||
use crate::{
|
||||
collision::{Collided, Collider},
|
||||
damagable::Damagable,
|
||||
};
|
||||
|
||||
#[derive(Component)]
|
||||
pub struct Projectile {
|
||||
damage: u32,
|
||||
}
|
||||
|
||||
impl Projectile {
|
||||
pub fn new(damage: u32) -> Projectile {
|
||||
Projectile { damage }
|
||||
}
|
||||
}
|
||||
|
||||
pub fn spawn_projectile(commands: &mut Commands, sprite: Handle<Image>, damage: u32) {
|
||||
commands
|
||||
.spawn((
|
||||
Projectile::new(damage),
|
||||
Sprite::from(sprite),
|
||||
Collider::new(8.),
|
||||
Transform::from_xyz(0., 0., 0.),
|
||||
))
|
||||
.observe(observe_collision);
|
||||
}
|
||||
pub fn observe_collision(
|
||||
collision: On<Collided>,
|
||||
mut commands: Commands,
|
||||
projectile_query: Query<&Projectile>,
|
||||
mut collision_query: Query<&mut Damagable>,
|
||||
) {
|
||||
let Ok(projectile) = projectile_query.get(collision.entity) else {
|
||||
return;
|
||||
};
|
||||
let Ok(mut collided) = collision_query.get_mut(collision.with) else {
|
||||
return;
|
||||
};
|
||||
|
||||
collided.damage(projectile.damage);
|
||||
commands.get_entity(collision.entity).unwrap().despawn();
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue