glorbs/src/game/systems/creature.rs

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);
}
}