Factions
This commit is contained in:
parent
4bf62bfe39
commit
526caf91c7
4 changed files with 29 additions and 11 deletions
|
|
@ -3,23 +3,30 @@ use bevy::prelude::*;
|
||||||
use crate::{
|
use crate::{
|
||||||
collision::{Collided, Collider},
|
collision::{Collided, Collider},
|
||||||
damagable::Damagable,
|
damagable::Damagable,
|
||||||
|
ships::Factions,
|
||||||
};
|
};
|
||||||
|
|
||||||
#[derive(Component)]
|
#[derive(Component)]
|
||||||
pub struct Projectile {
|
pub struct Projectile {
|
||||||
damage: u32,
|
damage: u32,
|
||||||
|
faction: Factions,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Projectile {
|
impl Projectile {
|
||||||
pub fn new(damage: u32) -> Projectile {
|
pub fn new(damage: u32, faction: Factions) -> Projectile {
|
||||||
Projectile { damage }
|
Projectile { damage, faction }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn spawn_projectile(commands: &mut Commands, sprite: Handle<Image>, damage: u32) {
|
pub fn spawn_projectile(
|
||||||
|
commands: &mut Commands,
|
||||||
|
sprite: Handle<Image>,
|
||||||
|
damage: u32,
|
||||||
|
faction: Factions,
|
||||||
|
) {
|
||||||
commands
|
commands
|
||||||
.spawn((
|
.spawn((
|
||||||
Projectile::new(damage),
|
Projectile::new(damage, faction),
|
||||||
Sprite::from(sprite),
|
Sprite::from(sprite),
|
||||||
Collider::new(8.),
|
Collider::new(8.),
|
||||||
Transform::from_xyz(0., 0., 0.),
|
Transform::from_xyz(0., 0., 0.),
|
||||||
|
|
@ -30,14 +37,17 @@ pub fn observe_collision(
|
||||||
collision: On<Collided>,
|
collision: On<Collided>,
|
||||||
mut commands: Commands,
|
mut commands: Commands,
|
||||||
projectile_query: Query<&Projectile>,
|
projectile_query: Query<&Projectile>,
|
||||||
mut collision_query: Query<&mut Damagable>,
|
mut collision_query: Query<(&mut Damagable, &Factions)>,
|
||||||
) {
|
) {
|
||||||
let Ok(projectile) = projectile_query.get(collision.entity) else {
|
let Ok(projectile) = projectile_query.get(collision.entity) else {
|
||||||
return;
|
return;
|
||||||
};
|
};
|
||||||
let Ok(mut collided) = collision_query.get_mut(collision.with) else {
|
let Ok((mut collided, faction)) = collision_query.get_mut(collision.with) else {
|
||||||
return;
|
return;
|
||||||
};
|
};
|
||||||
|
if faction == &projectile.faction {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
collided.damage(projectile.damage);
|
collided.damage(projectile.damage);
|
||||||
commands.get_entity(collision.entity).unwrap().despawn();
|
commands.get_entity(collision.entity).unwrap().despawn();
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
use bevy::prelude::*;
|
use bevy::prelude::*;
|
||||||
|
|
||||||
use crate::{collision::Collider, damagable::Damagable, movable::Movable};
|
use crate::{collision::Collider, damagable::Damagable, movable::Movable, ships::Factions};
|
||||||
|
|
||||||
#[derive(Component)]
|
#[derive(Component)]
|
||||||
pub struct Enemy;
|
pub struct Enemy;
|
||||||
|
|
@ -13,5 +13,6 @@ pub fn spawn_enemy(commands: &mut Commands, sprite: Handle<Image>, at: Vec2) {
|
||||||
Sprite::from(sprite),
|
Sprite::from(sprite),
|
||||||
Transform::from_xyz(at.x, at.y, 0.),
|
Transform::from_xyz(at.x, at.y, 0.),
|
||||||
Damagable::new(10),
|
Damagable::new(10),
|
||||||
|
Factions::EnemyFaction,
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,12 @@ use crate::projectile::spawn_projectile;
|
||||||
pub mod enemy;
|
pub mod enemy;
|
||||||
pub mod player;
|
pub mod player;
|
||||||
|
|
||||||
|
#[derive(Component, PartialEq)]
|
||||||
|
pub enum Factions {
|
||||||
|
PlayerFaction,
|
||||||
|
EnemyFaction,
|
||||||
|
}
|
||||||
|
|
||||||
pub struct ShipsPlugin;
|
pub struct ShipsPlugin;
|
||||||
|
|
||||||
impl Plugin for ShipsPlugin {
|
impl Plugin for ShipsPlugin {
|
||||||
|
|
@ -22,7 +28,7 @@ fn startup(mut commands: Commands, asset_server: Res<AssetServer>) {
|
||||||
|
|
||||||
commands.spawn(Camera2d);
|
commands.spawn(Camera2d);
|
||||||
|
|
||||||
player::spawn_player(&mut commands, player_sprite, Vec2::new(0., 0.));
|
player::spawn_player(&mut commands, player_sprite, Vec2::new(100., 100.));
|
||||||
enemy::spawn_enemy(&mut commands, enemy_sprite.clone(), Vec2::new(100., 100.));
|
enemy::spawn_enemy(&mut commands, enemy_sprite.clone(), Vec2::new(0., 0.));
|
||||||
spawn_projectile(&mut commands, projectile, 1);
|
spawn_projectile(&mut commands, projectile, 1, Factions::PlayerFaction);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
use crate::{collision::Collider, damagable::Damagable, movable::Movable};
|
use crate::{collision::Collider, damagable::Damagable, movable::Movable, ships::Factions};
|
||||||
use bevy::prelude::*;
|
use bevy::prelude::*;
|
||||||
|
|
||||||
#[derive(Component)]
|
#[derive(Component)]
|
||||||
|
|
@ -14,6 +14,7 @@ pub fn spawn_player(commands: &mut Commands, sprite: Handle<Image>, at: Vec2) {
|
||||||
Sprite::from(sprite),
|
Sprite::from(sprite),
|
||||||
Transform::from_xyz(at.x, at.y, 0.),
|
Transform::from_xyz(at.x, at.y, 0.),
|
||||||
Damagable::new(10),
|
Damagable::new(10),
|
||||||
|
Factions::PlayerFaction,
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue