Reduce allocation in Navigator movement

This commit is contained in:
TheMode 2021-08-16 02:53:07 +02:00
parent f3524d4a4f
commit e72c87f670
2 changed files with 16 additions and 7 deletions

View File

@ -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) {

View File

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