Compare commits

..

No commits in common. "385f1ba20fb2f39f808e61caa64ca26b65aee40e" and "4bf62bfe39f48fd562ede99a66b53105ea80dfc4" have entirely different histories.

4 changed files with 11 additions and 52 deletions

View file

@ -3,30 +3,23 @@ use bevy::prelude::*;
use crate::{
collision::{Collided, Collider},
damagable::Damagable,
ships::Factions,
};
#[derive(Component)]
pub struct Projectile {
damage: u32,
faction: Factions,
}
impl Projectile {
pub fn new(damage: u32, faction: Factions) -> Projectile {
Projectile { damage, faction }
pub fn new(damage: u32) -> Projectile {
Projectile { damage }
}
}
pub fn spawn_projectile(
commands: &mut Commands,
sprite: Handle<Image>,
damage: u32,
faction: Factions,
) {
pub fn spawn_projectile(commands: &mut Commands, sprite: Handle<Image>, damage: u32) {
commands
.spawn((
Projectile::new(damage, faction),
Projectile::new(damage),
Sprite::from(sprite),
Collider::new(8.),
Transform::from_xyz(0., 0., 0.),
@ -37,17 +30,14 @@ pub fn observe_collision(
collision: On<Collided>,
mut commands: Commands,
projectile_query: Query<&Projectile>,
mut collision_query: Query<(&mut Damagable, &Factions)>,
mut collision_query: Query<&mut Damagable>,
) {
let Ok(projectile) = projectile_query.get(collision.entity) else {
return;
};
let Ok((mut collided, faction)) = collision_query.get_mut(collision.with) else {
let Ok(mut collided) = collision_query.get_mut(collision.with) else {
return;
};
if projectile.faction.can_damage(faction) {
return;
}
collided.damage(projectile.damage);
commands.get_entity(collision.entity).unwrap().despawn();

View file

@ -1,6 +1,6 @@
use bevy::prelude::*;
use crate::{collision::Collider, damagable::Damagable, movable::Movable, ships::Factions};
use crate::{collision::Collider, damagable::Damagable, movable::Movable};
#[derive(Component)]
pub struct Enemy;
@ -13,6 +13,5 @@ pub fn spawn_enemy(commands: &mut Commands, sprite: Handle<Image>, at: Vec2) {
Sprite::from(sprite),
Transform::from_xyz(at.x, at.y, 0.),
Damagable::new(10),
Factions::EnemyFaction,
));
}

View file

@ -5,35 +5,6 @@ use crate::projectile::spawn_projectile;
pub mod enemy;
pub mod player;
#[derive(Component)]
pub enum Factions {
PlayerFaction,
EnemyFaction,
NeutralFaction,
}
impl Factions {
pub fn can_damage(&self, other: &Factions) -> bool {
match self {
Factions::PlayerFaction => match other {
Factions::PlayerFaction => false,
Factions::EnemyFaction => true,
Factions::NeutralFaction => false,
},
Factions::EnemyFaction => match other {
Factions::PlayerFaction => true,
Factions::EnemyFaction => false,
Factions::NeutralFaction => false,
},
Factions::NeutralFaction => match other {
Factions::EnemyFaction => false,
Factions::NeutralFaction => false,
Factions::PlayerFaction => false,
},
}
}
}
pub struct ShipsPlugin;
impl Plugin for ShipsPlugin {
@ -51,7 +22,7 @@ fn startup(mut commands: Commands, asset_server: Res<AssetServer>) {
commands.spawn(Camera2d);
player::spawn_player(&mut commands, player_sprite, Vec2::new(100., 100.));
enemy::spawn_enemy(&mut commands, enemy_sprite.clone(), Vec2::new(0., 0.));
spawn_projectile(&mut commands, projectile, 1, Factions::PlayerFaction);
player::spawn_player(&mut commands, player_sprite, Vec2::new(0., 0.));
enemy::spawn_enemy(&mut commands, enemy_sprite.clone(), Vec2::new(100., 100.));
spawn_projectile(&mut commands, projectile, 1);
}

View file

@ -1,4 +1,4 @@
use crate::{collision::Collider, damagable::Damagable, movable::Movable, ships::Factions};
use crate::{collision::Collider, damagable::Damagable, movable::Movable};
use bevy::prelude::*;
#[derive(Component)]
@ -14,7 +14,6 @@ pub fn spawn_player(commands: &mut Commands, sprite: Handle<Image>, at: Vec2) {
Sprite::from(sprite),
Transform::from_xyz(at.x, at.y, 0.),
Damagable::new(10),
Factions::PlayerFaction,
));
}