Skip to content

Commit

Permalink
beginning of movement system, enemies follow player
Browse files Browse the repository at this point in the history
  • Loading branch information
odecay committed Jul 2, 2022
1 parent 08b1300 commit ed6b756
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 0 deletions.
2 changes: 2 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ serde = { version = "1.0.137", features = ["derive"] }
serde_yaml = "0.8.24"
thiserror = "1.0.31"
structopt = "0.3.26"
rand = "0.8.5"
getrandom = { version = "0.2", features = ["js"] }

bevy_mod_debugdump = { version = "0.4", optional = true }
bevy-inspector-egui = { version = "0.11", optional = true }
Expand Down
29 changes: 29 additions & 0 deletions src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ use bevy::{
use bevy_parallax::{ParallaxCameraComponent, ParallaxPlugin, ParallaxResource};
use bevy_rapier2d::prelude::*;
use iyes_loopless::prelude::*;
use rand::Rng;
use structopt::StructOpt;

#[cfg(feature = "debug")]
Expand Down Expand Up @@ -217,6 +218,8 @@ fn main() {
.with_system(throw_item_system)
.with_system(item_attacks_enemy_collision)
.with_system(rotate_system)
.with_system(set_target_near_player)
.with_system(move_to_target)
.with_system(pause)
.into(),
)
Expand Down Expand Up @@ -530,3 +533,29 @@ fn despawn_entities(mut commands: Commands, query: Query<Entity, With<DespawnMar
commands.entity(entity).despawn_recursive();
}
}

fn set_target_near_player(
mut commands: Commands,
query: Query<(Entity, &Transform), (With<Enemy>, Without<Target>)>,
player_query: Query<&Transform, With<Player>>,
) {
if let Ok(player_transform) = player_query.get_single() {
let mut rng = rand::thread_rng();

for (entity, transform) in query.iter() {
if transform
.translation
.truncate()
.distance(player_transform.translation.truncate())
>= 100.0
{
let x_offset = rng.gen_range(-100.0..100.);
let y_offset = rng.gen_range(-100.0..100.);
commands.entity(entity).insert(Target {
position: player_transform.translation.truncate()
+ Vec2::new(x_offset, y_offset),
});
}
}
}
}
20 changes: 20 additions & 0 deletions src/movement.rs
Original file line number Diff line number Diff line change
Expand Up @@ -202,3 +202,23 @@ pub fn rotate_system(mut query: Query<(&mut Transform, &Rotate)>, time: Res<Time
Quat::from_rotation_z(rotation_factor * rotate.speed * time.delta_seconds());
}
}

#[derive(Component)]
pub struct Target {
pub position: Vec2,
}
pub fn move_to_target(
mut query: Query<(Entity, &mut Transform, &Stats, &Target)>,
mut commands: Commands,
time: Res<Time>,
) {
for (entity, mut transform, stats, target) in query.iter_mut() {
let translation_old = transform.translation.clone();
transform.translation += (target.position.extend(0.) - translation_old).normalize()
* stats.movement_speed
* time.delta_seconds();
if transform.translation.truncate().distance(target.position) <= 100. {
commands.entity(entity).remove::<Target>();
}
}
}

0 comments on commit ed6b756

Please sign in to comment.