use rusting_engine::prelude::*;
pub const SPEED: f32 = 3.0;
pub const STOP_DISTANCE: f32 = 1.5;
pub fn follow_player(scene: &mut GameScene<'_>, time: &FrameTime) {
let Some(target) = scene.try_object("Player").map(|p| p.position()) else {
return;
};
let step = SPEED * time.delta.as_secs_f32();
for name in scene.in_class("chaser") {
let at = scene.object(&name).position();
let (dx, dz) = (target[0] - at[0], target[2] - at[2]);
let distance = (dx * dx + dz * dz).sqrt();
if distance <= STOP_DISTANCE {
continue;
}
let step = step.min(distance - STOP_DISTANCE);
let to = [
at[0] + dx / distance * step,
at[1],
at[2] + dz / distance * step,
];
let yaw = (-dx).atan2(-dz);
let mut chaser = scene.object(&name);
chaser.set_position(to);
chaser.set_rotation([0.0, yaw, 0.0]);
}
}