From e72c87f670c228ac97120058e37ecd9effbc38ad Mon Sep 17 00:00:00 2001 From: TheMode Date: Mon, 16 Aug 2021 02:53:07 +0200 Subject: [PATCH] Reduce allocation in Navigator movement --- .../server/entity/pathfinding/Navigator.java | 7 +++---- .../server/utils/position/PositionUtils.java | 16 +++++++++++++--- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/src/main/java/net/minestom/server/entity/pathfinding/Navigator.java b/src/main/java/net/minestom/server/entity/pathfinding/Navigator.java index 7f6d35748..268146779 100644 --- a/src/main/java/net/minestom/server/entity/pathfinding/Navigator.java +++ b/src/main/java/net/minestom/server/entity/pathfinding/Navigator.java @@ -58,12 +58,11 @@ public class Navigator { final double speedX = Math.cos(radians) * speed; final double speedY = dy * speed; final double speedZ = Math.sin(radians) * speed; - // Update 'position' view - final var view = PositionUtils.lookAlong(position, dx, direction.y(), dz); - this.entity.setView(view.yaw(), view.pitch()); + final float yaw = PositionUtils.getLookYaw(dx, dz); + final float pitch = PositionUtils.getLookPitch(dx, direction.y(), dz); // Prevent ghosting final var physicsResult = CollisionUtils.handlePhysics(entity, new Vec(speedX, speedY, speedZ)); - this.entity.refreshPosition(physicsResult.newPosition()); + this.entity.refreshPosition(physicsResult.newPosition().withView(yaw, pitch)); } public void jump(float height) { diff --git a/src/main/java/net/minestom/server/utils/position/PositionUtils.java b/src/main/java/net/minestom/server/utils/position/PositionUtils.java index 3b670098b..2d456e1e5 100644 --- a/src/main/java/net/minestom/server/utils/position/PositionUtils.java +++ b/src/main/java/net/minestom/server/utils/position/PositionUtils.java @@ -1,13 +1,23 @@ package net.minestom.server.utils.position; import net.minestom.server.coordinate.Pos; +import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; +@ApiStatus.Internal public final class PositionUtils { public static Pos lookAlong(@NotNull Pos position, double dx, double dy, double dz) { - final double horizontalAngle = Math.atan2(dz, dx); - final float yaw = (float) (horizontalAngle * (180.0 / Math.PI)) - 90; - final float pitch = (float) Math.atan2(dy, Math.max(Math.abs(dx), Math.abs(dz))); + final float yaw = getLookYaw(dx, dz); + final float pitch = getLookPitch(dx, dy, dz); return position.withView(yaw, pitch); } + + public static float getLookYaw(double dx, double dz) { + final double horizontalAngle = Math.atan2(dz, dx); + return (float) (horizontalAngle * (180.0 / Math.PI)) - 90; + } + + public static float getLookPitch(double dx, double dy, double dz) { + return (float) Math.atan2(dy, Math.max(Math.abs(dx), Math.abs(dz))); + } }