Spawn logic
This commit is contained in:
parent
1a11e0d670
commit
f56ae2bc04
4 changed files with 49 additions and 2 deletions
|
|
@ -17,6 +17,17 @@ pub struct Movable {
|
||||||
pub max_rotation_speed: f32,
|
pub max_rotation_speed: f32,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl Movable {
|
||||||
|
pub fn new(max_linear_speed: f32, max_rotation_speed: f32) -> Movable {
|
||||||
|
Movable {
|
||||||
|
linear_speed: 0.,
|
||||||
|
rotation_speed: 0.,
|
||||||
|
max_linear_speed: max_linear_speed,
|
||||||
|
max_rotation_speed: max_rotation_speed,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn movement_system(time: Res<Time>, query: Query<(&Movable, &mut Transform)>) {
|
fn movement_system(time: Res<Time>, query: Query<(&Movable, &mut Transform)>) {
|
||||||
for (movable, mut transform) in query {
|
for (movable, mut transform) in query {
|
||||||
transform.rotate_z(movable.rotation_speed * time.delta_secs());
|
transform.rotate_z(movable.rotation_speed * time.delta_secs());
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,16 @@
|
||||||
use bevy::prelude::*;
|
use bevy::prelude::*;
|
||||||
|
|
||||||
|
use crate::{collision::Collider, movable::Movable};
|
||||||
|
|
||||||
#[derive(Component)]
|
#[derive(Component)]
|
||||||
pub struct Enemy;
|
pub struct Enemy;
|
||||||
|
|
||||||
|
pub fn spawn_enemy(commands: &mut Commands, sprite: Handle<Image>, at: Vec2) {
|
||||||
|
commands.spawn((
|
||||||
|
Enemy,
|
||||||
|
Collider::new(8.),
|
||||||
|
Movable::new(500., f32::to_radians(360.)),
|
||||||
|
Sprite::from(sprite),
|
||||||
|
Transform::from_xyz(at.x, at.y, 0.),
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,5 +6,19 @@ pub mod player;
|
||||||
pub struct ShipsPlugin;
|
pub struct ShipsPlugin;
|
||||||
|
|
||||||
impl Plugin for ShipsPlugin {
|
impl Plugin for ShipsPlugin {
|
||||||
fn build(&self, app: &mut bevy::app::App) {}
|
fn build(&self, app: &mut bevy::app::App) {
|
||||||
|
app.insert_resource(Time::<Fixed>::from_hz(60.))
|
||||||
|
.add_systems(Startup, startup)
|
||||||
|
.add_systems(FixedUpdate, player::player_movement_system);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
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");
|
||||||
|
|
||||||
|
commands.spawn(Camera2d);
|
||||||
|
|
||||||
|
player::spawn_player(&mut commands, player_sprite, Vec2::new(0., 0.));
|
||||||
|
enemy::spawn_enemy(&mut commands, enemy_sprite.clone(), Vec2::new(100., 100.));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
use crate::movable::Movable;
|
use crate::{collision::Collider, movable::Movable};
|
||||||
use bevy::prelude::*;
|
use bevy::prelude::*;
|
||||||
|
|
||||||
#[derive(Component)]
|
#[derive(Component)]
|
||||||
|
|
@ -6,6 +6,16 @@ pub struct Player {
|
||||||
pub(super) acceleration: f32,
|
pub(super) acceleration: f32,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn spawn_player(commands: &mut Commands, sprite: Handle<Image>, at: Vec2) {
|
||||||
|
commands.spawn((
|
||||||
|
Player { acceleration: 100. },
|
||||||
|
Collider::new(8.),
|
||||||
|
Movable::new(500., f32::to_radians(360.)),
|
||||||
|
Sprite::from(sprite),
|
||||||
|
Transform::from_xyz(at.x, at.y, 0.),
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
pub(super) fn player_movement_system(
|
pub(super) fn player_movement_system(
|
||||||
time: Res<Time>,
|
time: Res<Time>,
|
||||||
keyboard_input: Res<ButtonInput<KeyCode>>,
|
keyboard_input: Res<ButtonInput<KeyCode>>,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue