Compare commits

..

No commits in common. "70a12b984c1a6d4b77ddde2a5147496f0dd49958" and "66797415bd55af141e64526fcbcd49d93a0ac5d4" have entirely different histories.

11 changed files with 14 additions and 133 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 150 B

After

Width:  |  Height:  |  Size: 147 B

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 660 B

After

Width:  |  Height:  |  Size: 653 B

Before After
Before After

View file

@ -2,7 +2,7 @@ use bevy::prelude::*;
use rand::{prelude::*, rng}; use rand::{prelude::*, rng};
use crate::{ use crate::{
FIRST_CORNER_X, FIRST_CORNER_Y, GameObject, GameState, SECOND_CORNER_X, SECOND_CORNER_Y, FIRST_CORNER_X, FIRST_CORNER_Y, GameState, SECOND_CORNER_X, SECOND_CORNER_Y,
collision::{Collided, Collider}, collision::{Collided, Collider},
damagable::Damagable, damagable::Damagable,
projectile::Projectile, projectile::Projectile,
@ -52,7 +52,6 @@ pub fn setup_asteroids(mut commands: Commands, asset_server: Res<AssetServer>) {
Transform::from_translation(position), Transform::from_translation(position),
Collider::new(8.), Collider::new(8.),
Damagable::new(200), Damagable::new(200),
GameObject,
)) ))
.observe(bump); .observe(bump);
} }

View file

@ -32,9 +32,6 @@ pub enum GameState {
Gameover, Gameover,
} }
#[derive(Component)]
pub struct GameObject;
fn main() { fn main() {
App::new() App::new()
.insert_resource(ClearColor(Color::srgb(0.0, 0.0, 0.0))) .insert_resource(ClearColor(Color::srgb(0.0, 0.0, 0.0)))
@ -68,16 +65,5 @@ fn main() {
.add_systems(Startup, |mut commands: Commands| { .add_systems(Startup, |mut commands: Commands| {
commands.spawn(Camera2d); commands.spawn(Camera2d);
}) })
.add_systems(OnExit(GameState::Game), cleanup_gameobjects)
.run(); .run();
} }
pub fn cleanup_gameobjects(mut commands: Commands, query: Query<Entity, With<GameObject>>) {
for entity in query {
let Ok(mut interface) = commands.get_entity(entity) else {
continue;
};
interface.despawn();
}
}

View file

@ -1,4 +1,4 @@
use crate::{GameObject, velocity::Velocity}; use crate::velocity::Velocity;
use bevy::prelude::*; use bevy::prelude::*;
use crate::{ use crate::{
@ -33,9 +33,8 @@ pub fn spawn_enemy(commands: &mut Commands, sprite: Handle<Image>, at: Vec2) {
Velocity::moving(256., f32::to_radians(180.)), Velocity::moving(256., f32::to_radians(180.)),
Sprite::from(sprite), Sprite::from(sprite),
Transform::from_xyz(at.x, at.y, 0.), Transform::from_xyz(at.x, at.y, 0.),
Damagable::new(20), Damagable::new(100),
Factions::EnemyFaction, Factions::EnemyFaction,
GameObject,
)); ));
} }

View file

@ -2,7 +2,6 @@ use bevy::prelude::*;
use rand::random_range; use rand::random_range;
use crate::{ use crate::{
GameObject,
collision::Collider, collision::Collider,
projectile::{Projectile, ProjectileSprite}, projectile::{Projectile, ProjectileSprite},
ships::Factions, ships::Factions,
@ -46,7 +45,6 @@ pub fn gun_shooting_system(
commands.spawn(( commands.spawn((
Projectile::new(gun.damage, faction.clone()), Projectile::new(gun.damage, faction.clone()),
GameObject,
bullet_transform, bullet_transform,
Velocity::moving(1024., 0.), Velocity::moving(1024., 0.),
Collider::new(8.), Collider::new(8.),

View file

@ -1,10 +1,6 @@
use bevy::prelude::*; use bevy::prelude::*;
use rand::{prelude::*, rng};
use crate::{ use crate::GameState;
FIRST_CORNER_X, FIRST_CORNER_Y, GameState, SECOND_CORNER_X, SECOND_CORNER_Y,
ships::enemy::spawn_enemy,
};
pub mod enemy; pub mod enemy;
pub mod gun; pub mod gun;
@ -55,15 +51,5 @@ fn startup(mut commands: Commands, asset_server: Res<AssetServer>) {
let enemy_sprite: Handle<Image> = asset_server.load("enemy.png"); let enemy_sprite: Handle<Image> = asset_server.load("enemy.png");
player::spawn_player(&mut commands, player_sprite, Vec2::new(0., 0.)); player::spawn_player(&mut commands, player_sprite, Vec2::new(0., 0.));
enemy::spawn_enemy(&mut commands, enemy_sprite.clone(), Vec2::new(100., 100.));
let mut random = rng();
for _ in 0..50 {
let position = Vec2::new(
random.random_range(FIRST_CORNER_X..SECOND_CORNER_X),
random.random_range(FIRST_CORNER_Y..SECOND_CORNER_Y),
);
spawn_enemy(&mut commands, enemy_sprite.clone(), position);
}
} }

View file

@ -1,5 +1,5 @@
use crate::{ use crate::{
GameObject, GameState, GameState,
collision::Collider, collision::Collider,
damagable::{Damagable, DamageableKilled}, damagable::{Damagable, DamageableKilled},
ships::{Factions, enemy::Enemy, gun::Gun}, ships::{Factions, enemy::Enemy, gun::Gun},
@ -28,7 +28,6 @@ pub fn spawn_player(commands: &mut Commands, sprite: Handle<Image>, at: Vec2) {
Transform::from_xyz(at.x, at.y, 0.), Transform::from_xyz(at.x, at.y, 0.),
Factions::PlayerFaction, Factions::PlayerFaction,
Damagable::new(150), Damagable::new(150),
GameObject,
)); ));
} }

View file

@ -1,81 +0,0 @@
use bevy::{input_focus::InputFocus, prelude::*};
use crate::{GameState, score::Score};
#[derive(Component)]
pub struct Gameover;
pub fn setup_gameover(mut commands: Commands, score: Res<Score>) {
//setup menu text
commands.spawn((
Text::new("U DEAD"),
TextFont {
font_size: 32.,
..default()
},
TextLayout::new_with_justify(Justify::Center),
Gameover,
Node {
position_type: PositionType::Absolute,
align_self: AlignSelf::Center,
justify_self: JustifySelf::Center,
..default()
},
));
//Max score
commands.spawn((
Text::new("Your score:".to_string() + score.max_score.to_string().as_str()),
TextLayout::new_with_justify(Justify::Center),
Gameover,
Node {
position_type: PositionType::Absolute,
align_self: AlignSelf::Center,
justify_self: JustifySelf::Center,
top: px(32),
..default()
},
));
//setup button
commands.spawn((
Button,
Node {
align_self: AlignSelf::Center,
justify_self: JustifySelf::Center,
justify_content: JustifyContent::Center,
align_items: AlignItems::Center,
top: px(64),
..default()
},
Gameover,
children![(Text::new("Continue"))],
));
}
pub fn gameover_button_system(
mut commands: Commands,
mut input_focus: ResMut<InputFocus>,
interaction_query: Query<(Entity, &Interaction, &mut Button), Changed<Interaction>>,
) {
for (entity, interaction, mut button) in interaction_query {
match interaction {
Interaction::Pressed => {
input_focus.set(entity);
button.set_changed();
commands.set_state(GameState::Game);
}
Interaction::Hovered => {
input_focus.set(entity);
button.set_changed();
}
Interaction::None => {
input_focus.clear();
}
}
}
}
pub fn cleanup_gameover(mut commands: Commands, query: Query<Entity, With<Gameover>>) {
for entity in query {
commands.get_entity(entity).unwrap().despawn();
}
}

View file

@ -16,8 +16,9 @@ pub fn setup_menu(mut commands: Commands) {
TextLayout::new_with_justify(Justify::Center), TextLayout::new_with_justify(Justify::Center),
Menu, Menu,
Node { Node {
align_self: AlignSelf::Center, position_type: PositionType::Absolute,
justify_self: JustifySelf::Center, top: percent(25),
right: percent(33),
..default() ..default()
}, },
)); ));
@ -25,15 +26,15 @@ pub fn setup_menu(mut commands: Commands) {
commands.spawn(( commands.spawn((
Button, Button,
Node { Node {
align_self: AlignSelf::Center, width: px(150),
justify_self: JustifySelf::Center, height: px(65),
top: px(128), border: UiRect::all(px(5)),
justify_content: JustifyContent::Center, justify_content: JustifyContent::Center,
align_items: AlignItems::Center, align_items: AlignItems::Center,
..default() ..default()
}, },
Menu, Menu,
children![(Text::new("Play"))], children![(Text::new("Igron"))],
)); ));
} }

View file

@ -23,12 +23,6 @@ impl Plugin for UIPlugin {
(update_player_health_display, update_player_score_display) (update_player_health_display, update_player_score_display)
.run_if(in_state(GameState::Game)), .run_if(in_state(GameState::Game)),
) )
.add_systems(OnExit(GameState::Game), cleanup_player_interface) .add_systems(OnExit(GameState::Game), cleanup_player_interface);
.add_systems(OnEnter(GameState::Gameover), setup_gameover)
.add_systems(
Update,
gameover_button_system.run_if(in_state(GameState::Gameover)),
)
.add_systems(OnExit(GameState::Gameover), cleanup_gameover);
} }
} }