2021-06-28 13:18:49 -05:00
|
|
|
package net.nuggetmc.ai.utils;
|
|
|
|
|
|
|
|
|
|
import org.bukkit.util.NumberConversions;
|
|
|
|
|
import org.bukkit.util.Vector;
|
|
|
|
|
|
|
|
|
|
public class MathUtils {
|
|
|
|
|
|
|
|
|
|
public static float[] fetchYawPitch(Vector dir) {
|
|
|
|
|
double x = dir.getX();
|
|
|
|
|
double z = dir.getZ();
|
|
|
|
|
|
|
|
|
|
float[] out = new float[2];
|
|
|
|
|
|
|
|
|
|
if (x == 0.0D && z == 0.0D) {
|
|
|
|
|
out[1] = (float) (dir.getY() > 0.0D ? -90 : 90);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
else {
|
|
|
|
|
double theta = Math.atan2(-x, z);
|
|
|
|
|
out[0] = (float) Math.toDegrees((theta + 6.283185307179586D) % 6.283185307179586D);
|
|
|
|
|
|
|
|
|
|
double x2 = NumberConversions.square(x);
|
|
|
|
|
double z2 = NumberConversions.square(z);
|
|
|
|
|
double xz = Math.sqrt(x2 + z2);
|
|
|
|
|
out[1] = (float) Math.toDegrees(Math.atan(-dir.getY() / xz));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return out;
|
|
|
|
|
}
|
2021-06-29 16:29:30 -05:00
|
|
|
|
2021-07-10 23:51:14 -05:00
|
|
|
public static float fetchPitch(Vector dir) {
|
|
|
|
|
double x = dir.getX();
|
|
|
|
|
double z = dir.getZ();
|
|
|
|
|
|
|
|
|
|
float result;
|
|
|
|
|
|
|
|
|
|
if (x == 0.0D && z == 0.0D) {
|
|
|
|
|
result = (float) (dir.getY() > 0.0D ? -90 : 90);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
else {
|
|
|
|
|
double x2 = NumberConversions.square(x);
|
|
|
|
|
double z2 = NumberConversions.square(z);
|
|
|
|
|
double xz = Math.sqrt(x2 + z2);
|
|
|
|
|
result = (float) Math.toDegrees(Math.atan(-dir.getY() / xz));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
2021-06-29 16:29:30 -05:00
|
|
|
public static Vector circleOffset(double r) {
|
|
|
|
|
double rad = 2 * Math.random() * Math.PI;
|
|
|
|
|
|
|
|
|
|
double x = r * Math.random() * Math.cos(rad);
|
|
|
|
|
double z = r * Math.random() * Math.sin(rad);
|
|
|
|
|
|
|
|
|
|
return new Vector(x, 0, z);
|
|
|
|
|
}
|
2021-07-04 03:15:30 -05:00
|
|
|
|
|
|
|
|
public static boolean isFinite(Vector vector) {
|
|
|
|
|
try {
|
|
|
|
|
vector.checkFinite();
|
|
|
|
|
return true;
|
|
|
|
|
} catch (IllegalArgumentException e) {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
2021-07-09 15:49:10 -05:00
|
|
|
|
|
|
|
|
public static void clean(Vector vector) {
|
|
|
|
|
if (!NumberConversions.isFinite(vector.getX())) vector.setX(0);
|
|
|
|
|
if (!NumberConversions.isFinite(vector.getY())) vector.setY(0);
|
|
|
|
|
if (!NumberConversions.isFinite(vector.getZ())) vector.setZ(0);
|
|
|
|
|
}
|
2021-06-28 13:18:49 -05:00
|
|
|
}
|