diff --git a/src/projectile.rs b/src/projectile.rs index 16d6a29..030b85f 100644 --- a/src/projectile.rs +++ b/src/projectile.rs @@ -1,6 +1,12 @@ use bevy::prelude::*; -use crate::{GameState, collision::Collided, damagable::Damagable, ships::Factions}; +use crate::{ + GameState, + collision::{Collided, Collider}, + damagable::Damagable, + ships::Factions, + velocity::Velocity, +}; #[derive(Component)] pub struct Projectile { @@ -10,10 +16,7 @@ pub struct Projectile { } #[derive(Resource)] -pub struct ProjectileSprite { - pub player_projectile: Handle, - pub enemy_projectile: Handle, -} +pub struct ProjectileSprite(Handle); pub struct ProjectilePlugin; @@ -29,20 +32,16 @@ impl Projectile { impl Plugin for ProjectilePlugin { fn build(&self, app: &mut App) { - app.add_systems(Startup, projectile_startup) + app.add_systems(OnEnter(GameState::Game), projectile_startup) .add_systems( FixedPreUpdate, projectile_despawn_countdown.run_if(in_state(GameState::Game)), - ) - .add_observer(observe_collision); + ); } } pub fn projectile_startup(mut commands: Commands, asset_server: Res) { - commands.insert_resource(ProjectileSprite { - player_projectile: asset_server.load("projectile.png"), - enemy_projectile: asset_server.load("enemy_projectile.png"), - }); + commands.insert_resource(ProjectileSprite(asset_server.load("projectile.png"))); } pub fn projectile_despawn_countdown( @@ -58,6 +57,24 @@ pub fn projectile_despawn_countdown( } } +pub fn spawn_projectile( + commands: &mut Commands, + sprite: Res, + transform: Transform, + damage: u32, + faction: Factions, +) { + commands + .spawn(( + Projectile::new(damage, faction), + Sprite::from(sprite.0.clone()), + Collider::new(8.), + transform, + Velocity::moving(1024.0, 0.0), + )) + .observe(observe_collision); +} + pub fn observe_collision( collision: On, mut commands: Commands, diff --git a/src/ships/gun.rs b/src/ships/gun.rs deleted file mode 100644 index c402c2e..0000000 --- a/src/ships/gun.rs +++ /dev/null @@ -1,59 +0,0 @@ -use bevy::prelude::*; -use rand::random_range; - -use crate::{ - collision::Collider, - projectile::{Projectile, ProjectileSprite}, - ships::Factions, - velocity::Velocity, -}; - -#[derive(Component)] -pub struct Gun { - pub shoot: bool, - shoot_timer: Timer, - damage: u32, - spread_radius: f32, -} - -impl Gun { - pub fn new(damage: u32, spread: f32, firerate: f32) -> Self { - Self { - shoot: false, - shoot_timer: Timer::from_seconds(firerate, TimerMode::Once), - damage, - spread_radius: spread, - } - } -} - -pub fn gun_shooting_system( - mut commands: Commands, - time: Res