aboutsummaryrefslogtreecommitdiff
path: root/azalea/src/bot.rs
diff options
context:
space:
mode:
Diffstat (limited to 'azalea/src/bot.rs')
-rw-r--r--azalea/src/bot.rs18
1 files changed, 13 insertions, 5 deletions
diff --git a/azalea/src/bot.rs b/azalea/src/bot.rs
index ccc016e6..529bb251 100644
--- a/azalea/src/bot.rs
+++ b/azalea/src/bot.rs
@@ -170,27 +170,35 @@ fn look_at_listener(
) {
for event in events.read() {
if let Ok((position, eye_height, mut look_direction)) = query.get_mut(event.entity) {
- let (y_rot, x_rot) =
+ let new_look_direction =
direction_looking_at(&position.up(eye_height.into()), &event.position);
trace!(
"look at {:?} (currently at {:?})",
event.position,
**position
);
- (look_direction.y_rot, look_direction.x_rot) = (y_rot, x_rot);
+ *look_direction = new_look_direction;
}
}
}
-/// Return the (`y_rot`, `x_rot`) that would make a client at `current` be
+/// Return the look direction that would make a client at `current` be
/// looking at `target`.
-fn direction_looking_at(current: &Vec3, target: &Vec3) -> (f32, f32) {
+pub fn direction_looking_at(current: &Vec3, target: &Vec3) -> LookDirection {
// borrowed from mineflayer's Bot.lookAt because i didn't want to do math
let delta = target - current;
let y_rot = (PI - f64::atan2(-delta.x, -delta.z)) * (180.0 / PI);
let ground_distance = f64::sqrt(delta.x * delta.x + delta.z * delta.z);
let x_rot = f64::atan2(delta.y, ground_distance) * -(180.0 / PI);
- (y_rot as f32, x_rot as f32)
+
+ // clamp
+ let y_rot = y_rot.rem_euclid(360.0);
+ let x_rot = x_rot.clamp(-90.0, 90.0) % 360.0;
+
+ LookDirection {
+ x_rot: x_rot as f32,
+ y_rot: y_rot as f32,
+ }
}
/// A [`PluginGroup`] for the plugins that add extra bot functionality to the