55 lines
1.7 KiB
Rust
55 lines
1.7 KiB
Rust
use bevy::prelude::*;
|
|
|
|
use crate::GameState;
|
|
|
|
pub mod enemy;
|
|
pub mod gun;
|
|
pub mod player;
|
|
|
|
#[derive(Component, Copy, Clone, PartialEq, Eq)]
|
|
pub enum Factions {
|
|
PlayerFaction,
|
|
EnemyFaction,
|
|
}
|
|
|
|
impl Factions {
|
|
pub fn can_damage(&self, other: &Factions) -> bool {
|
|
match self {
|
|
Factions::PlayerFaction => match other {
|
|
Factions::PlayerFaction => false,
|
|
Factions::EnemyFaction => true,
|
|
},
|
|
Factions::EnemyFaction => match other {
|
|
Factions::PlayerFaction => true,
|
|
Factions::EnemyFaction => false,
|
|
},
|
|
}
|
|
}
|
|
}
|
|
|
|
pub struct ShipsPlugin;
|
|
|
|
impl Plugin for ShipsPlugin {
|
|
fn build(&self, app: &mut bevy::app::App) {
|
|
app.insert_resource(Time::<Fixed>::from_hz(60.))
|
|
.add_systems(OnEnter(GameState::Game), startup)
|
|
.add_systems(
|
|
FixedUpdate,
|
|
(
|
|
player::player_movement_system.run_if(in_state(GameState::Game)),
|
|
player::player_shooting_system.run_if(in_state(GameState::Game)),
|
|
gun::gun_shooting_system.run_if(in_state(GameState::Game)),
|
|
enemy::enemy_ai_system.run_if(in_state(GameState::Game)),
|
|
),
|
|
)
|
|
.add_observer(player::player_death_observer);
|
|
}
|
|
}
|
|
|
|
fn startup(mut commands: Commands, asset_server: Res<AssetServer>) {
|
|
let player_sprite: Handle<Image> = asset_server.load("player.png");
|
|
let enemy_sprite: Handle<Image> = asset_server.load("enemy.png");
|
|
|
|
player::spawn_player(&mut commands, player_sprite, Vec2::new(0., 0.));
|
|
enemy::spawn_enemy(&mut commands, enemy_sprite.clone(), Vec2::new(100., 100.));
|
|
}
|