generated from hheik/bevy-template
22 lines
796 B
Rust
22 lines
796 B
Rust
use bevy::prelude::*;
|
|
|
|
use crate::game::{creature::Mover, work::Worker};
|
|
|
|
pub fn worker_movement(
|
|
mut worker_query: Query<(Entity, &Mover, &Worker, &mut Transform)>,
|
|
global_query: Query<&GlobalTransform>,
|
|
time: Res<Time>,
|
|
) {
|
|
for (entity, mover, worker, mut transform) in worker_query.iter_mut() {
|
|
let Some(task) = worker.0 else { continue };
|
|
let (Ok(from), Ok(to)) = (global_query.get(entity), global_query.get(task.target)) else {
|
|
continue;
|
|
};
|
|
let diff = (to.translation() - from.translation()).xy();
|
|
let dist = diff.length().max(0.);
|
|
let dir = diff.normalize_or_zero();
|
|
let movement = dir.extend(0.) * mover.speed * time.delta_secs();
|
|
transform.translation += movement.clamp_length_max(dist);
|
|
}
|
|
}
|