Compare commits
No commits in common. "f56ae2bc047c7d4fa4e7b61eea1f6e859e9cfca8" and "0181ad7f2dfb7fdbae11c9a8975c002066c2144b" have entirely different histories.
f56ae2bc04
...
0181ad7f2d
7 changed files with 96 additions and 100 deletions
4
src/damagable/enemy.rs
Normal file
4
src/damagable/enemy.rs
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
use bevy::ecs::component::Component;
|
||||||
|
|
||||||
|
#[derive(Component)]
|
||||||
|
pub struct Enemy;
|
||||||
87
src/damagable/mod.rs
Normal file
87
src/damagable/mod.rs
Normal file
|
|
@ -0,0 +1,87 @@
|
||||||
|
use bevy::prelude::*;
|
||||||
|
|
||||||
|
use crate::{
|
||||||
|
collision::{Collided, Collider},
|
||||||
|
damagable::{
|
||||||
|
enemy::Enemy,
|
||||||
|
player::{Player, player_movement_system},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
pub mod enemy;
|
||||||
|
pub mod player;
|
||||||
|
|
||||||
|
pub struct DamagablePlugin;
|
||||||
|
|
||||||
|
impl Plugin for DamagablePlugin {
|
||||||
|
fn build(&self, app: &mut App) {
|
||||||
|
app.insert_resource(Time::<Fixed>::from_hz(60.0))
|
||||||
|
.add_systems(Startup, setup)
|
||||||
|
.add_systems(
|
||||||
|
FixedUpdate,
|
||||||
|
(player_movement_system, movement_system).chain(),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Component)]
|
||||||
|
pub struct Damagable {
|
||||||
|
hp: u32,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Component)]
|
||||||
|
pub struct Movable {
|
||||||
|
linear_speed: f32,
|
||||||
|
rotation_speed: f32,
|
||||||
|
max_linear_speed: f32,
|
||||||
|
max_rotation_speed: f32,
|
||||||
|
}
|
||||||
|
|
||||||
|
fn setup(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);
|
||||||
|
|
||||||
|
//Create player
|
||||||
|
commands.spawn((
|
||||||
|
Player { acceleration: 100. },
|
||||||
|
Movable {
|
||||||
|
linear_speed: 0.,
|
||||||
|
rotation_speed: 0.,
|
||||||
|
max_linear_speed: 500.,
|
||||||
|
max_rotation_speed: f32::to_radians(360.),
|
||||||
|
},
|
||||||
|
Damagable { hp: 10 },
|
||||||
|
Sprite::from_image(player_sprite),
|
||||||
|
Transform::from_xyz(20., 20., 0.),
|
||||||
|
Collider::new(8.),
|
||||||
|
));
|
||||||
|
|
||||||
|
commands.spawn((
|
||||||
|
Enemy,
|
||||||
|
Movable {
|
||||||
|
linear_speed: 0.,
|
||||||
|
rotation_speed: 0.,
|
||||||
|
max_linear_speed: 500.,
|
||||||
|
max_rotation_speed: f32::to_radians(360.),
|
||||||
|
},
|
||||||
|
Damagable { hp: 10 },
|
||||||
|
Sprite::from_image(enemy_sprite),
|
||||||
|
Transform::from_xyz(0., 0., 0.),
|
||||||
|
Collider::new(8.),
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
fn movement_system(time: Res<Time>, query: Query<(&Movable, &mut Transform)>) {
|
||||||
|
for (movable, mut transform) in query {
|
||||||
|
transform.rotate_z(movable.rotation_speed * time.delta_secs());
|
||||||
|
let movement_direction = transform.rotation * Vec3::X;
|
||||||
|
let movement_distance = movable.linear_speed * time.delta_secs();
|
||||||
|
let translation_delta = movement_direction * movement_distance;
|
||||||
|
|
||||||
|
transform.translation += translation_delta;
|
||||||
|
|
||||||
|
//TODO: Loop on bounds
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
use crate::{collision::Collider, movable::Movable};
|
use crate::damagable::Movable;
|
||||||
use bevy::prelude::*;
|
use bevy::prelude::*;
|
||||||
|
|
||||||
#[derive(Component)]
|
#[derive(Component)]
|
||||||
|
|
@ -6,16 +6,6 @@ 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>>,
|
||||||
11
src/main.rs
11
src/main.rs
|
|
@ -1,18 +1,15 @@
|
||||||
use bevy::prelude::*;
|
use bevy::prelude::*;
|
||||||
|
|
||||||
use crate::collision::CollisionPlugin;
|
use crate::collision::{Collided, Collider, CollisionPlugin};
|
||||||
use crate::movable::MovablePlugin;
|
use crate::damagable::DamagablePlugin;
|
||||||
use crate::ships::ShipsPlugin;
|
|
||||||
|
|
||||||
mod collision;
|
mod collision;
|
||||||
mod movable;
|
mod damagable;
|
||||||
mod ships;
|
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
App::new()
|
App::new()
|
||||||
.add_plugins(DefaultPlugins)
|
.add_plugins(DefaultPlugins)
|
||||||
.add_plugins(MovablePlugin)
|
.add_plugins(DamagablePlugin)
|
||||||
.add_plugins(CollisionPlugin)
|
.add_plugins(CollisionPlugin)
|
||||||
.add_plugins(ShipsPlugin)
|
|
||||||
.run();
|
.run();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,42 +0,0 @@
|
||||||
use bevy::prelude::*;
|
|
||||||
|
|
||||||
pub struct MovablePlugin;
|
|
||||||
|
|
||||||
impl Plugin for MovablePlugin {
|
|
||||||
fn build(&self, app: &mut App) {
|
|
||||||
app.insert_resource(Time::<Fixed>::from_hz(60.0))
|
|
||||||
.add_systems(FixedUpdate, movement_system);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Component)]
|
|
||||||
pub struct Movable {
|
|
||||||
pub linear_speed: f32,
|
|
||||||
pub rotation_speed: f32,
|
|
||||||
pub max_linear_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)>) {
|
|
||||||
for (movable, mut transform) in query {
|
|
||||||
transform.rotate_z(movable.rotation_speed * time.delta_secs());
|
|
||||||
let movement_direction = transform.rotation * Vec3::X;
|
|
||||||
let movement_distance = movable.linear_speed * time.delta_secs();
|
|
||||||
let translation_delta = movement_direction * movement_distance;
|
|
||||||
|
|
||||||
transform.translation += translation_delta;
|
|
||||||
|
|
||||||
//TODO: Loop on bounds
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,16 +0,0 @@
|
||||||
use bevy::prelude::*;
|
|
||||||
|
|
||||||
use crate::{collision::Collider, movable::Movable};
|
|
||||||
|
|
||||||
#[derive(Component)]
|
|
||||||
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.),
|
|
||||||
));
|
|
||||||
}
|
|
||||||
|
|
@ -1,24 +0,0 @@
|
||||||
use bevy::prelude::*;
|
|
||||||
|
|
||||||
pub mod enemy;
|
|
||||||
pub mod player;
|
|
||||||
|
|
||||||
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(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.));
|
|
||||||
}
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue