Direction enum
Пакет: com.hypixel.hytale.server.npc.util
Файл: com/hypixel/hytale/server/npc/util/NPCPhysicsMath.java
Поля (1)
| Модификаторы | Тип | Имя |
|---|---|---|
|
POS_X,
NEG_X,
POS_Y,
NEG_Y,
POS_Z, |
NEG_Z |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.server.npc.util;
class="kw">import com.hypixel.hytale.component.ComponentAccessor;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.math.shape.Box;
class="kw">import com.hypixel.hytale.math.util.ChunkUtil;
class="kw">import com.hypixel.hytale.math.util.MathUtil;
class="kw">import com.hypixel.hytale.math.util.TrigMathUtil;
class="kw">import com.hypixel.hytale.math.vector.Rotation3f;
class="kw">import com.hypixel.hytale.math.vector.Rotation3fc;
class="kw">import com.hypixel.hytale.protocol.BlockMaterial;
class="kw">import com.hypixel.hytale.server.core.asset.type.blockhitbox.BlockBoundingBoxes;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.BlockType;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.BoundingBox;
class="kw">import com.hypixel.hytale.server.core.modules.physics.util.PhysicsMath;
class="kw">import com.hypixel.hytale.server.core.universe.world.World;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.BlockChunk;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.WorldChunk;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.section.BlockSection;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.ChunkStore;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import com.hypixel.hytale.server.npc.entities.NPCEntity;
class="kw">import com.hypixel.hytale.server.npc.role.Role;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3d;
class="kw">import org.joml.Vector3dc;
class="kw">public class NPCPhysicsMath {
class="kw">public class="kw">static class="kw">final double EPSILON_LENGTH = 1.0E-6;
class="kw">public class="kw">static class="kw">final double EPSILON_LENGTH_2 = 1.0E-12;
class="kw">private NPCPhysicsMath() {
}
class="kw">public class="kw">static boolean near(@Nonnull Vector3dc var0, @Nonnull Vector3dc var1) {
class="kw">return near(var0, var1, 1.0E-12);
}
class="kw">public class="kw">static boolean near(@Nonnull Vector3dc var0, @Nonnull Vector3dc var1, double var2) {
class="kw">return var0.distanceSquared(var1) <= var2;
}
class="kw">public class="kw">static boolean near(double var0, double var2) {
class="kw">return near(var0, var2, 1.0E-6);
}
class="kw">public class="kw">static boolean near(double var0, double var2, double var4) {
class="kw">return Math.abs(var0 - var2) <= var4;
}
class="kw">public class="kw">static float headingFromDirection(double var0, double var2, float var4) {
double var5 = var0 * var0 + var2 * var2;
class="kw">return var5 < 1.0E-12 ? var4 : PhysicsMath.headingFromDirection(var0, var2);
}
class="kw">public class="kw">static float pitchFromDirection(double var0, double var2, double var4, float var6) {
double var7 = var0 * var0 + var4 * var4;
class="kw">return var7 < 1.0E-12 ? var6 : TrigMathUtil.atan2(var2, Math.sqrt(var7));
}
class="kw">public class="kw">static void rotationFromDirection(double var0, double var2, double var4, @Nonnull Rotation3fc var6, @Nonnull Rotation3f var7) {
double var8 = var0 * var0 + var4 * var4;
var7.setYaw(var8 < 1.0E-12 ? var6.yaw() : PhysicsMath.headingFromDirection(var0, var4));
var7.setPitch(var8 < 1.0E-12 ? var6.pitch() : TrigMathUtil.atan2(var2, Math.sqrt(var8)));
var7.setRoll(var6.roll());
}
class="kw">public class="kw">static void rotationFromDirection(@Nonnull Vector3dc var0, @Nonnull Rotation3fc var1, @Nonnull Rotation3f var2) {
rotationFromDirection(var0.x(), var0.y(), var0.z(), var1, var2);
}
class="kw">public class="kw">static void rotationFromDirection(@Nonnull Vector3dc var0, @Nonnull Vector3dc var1, @Nonnull Rotation3fc var2, @Nonnull Rotation3f var3) {
rotationFromDirection(var1.x() - var0.x(), var1.y() - var0.y(), var1.z() - var0.z(), var2, var3);
}
@Nonnull
class="kw">public class="kw">static Vector3d getViewDirection(@Nonnull Rotation3f var0, @Nonnull Vector3d var1) {
class="kw">return PhysicsMath.vectorFromAngles(var0.yaw(), var0.pitch(), var1);
}
class="kw">public class="kw">static double cosAngleBetweenVectors(@Nonnull Vector3d var0, @Nonnull Vector3d var1) {
class="kw">return cosAngleBetweenVectors(var0, var0.length(), var1, var1.length());
}
class="kw">public class="kw">static double cosAngleBetweenVectors(@Nonnull Vector3d var0, double var1, @Nonnull Vector3d var3, double var4) {
class="kw">return var0.dot(var3) / (var1 * var4);
}
class="kw">public class="kw">static double cosAngleBetweenUnitVectors(@Nonnull Vector3d var0, @Nonnull Vector3d var1) {
class="kw">return var0.dot(var1);
}
class="kw">public class="kw">static void realignVector(@Nonnull Vector3d var0, @Nonnull Vector3d var1, double var2, @Nonnull Vector3d var4) {
realignVector(var0, var0.length(), var1, var1.length(), var2, var4);
}
class="kw">public class="kw">static void realignVector(@Nonnull Vector3d var0, double var1, @Nonnull Vector3d var3, double var4, double var6, @Nonnull Vector3d var8) {
double var9 = Math.sqrt(1.0 - var6 * var6);
double var11 = var0.y * var3.z - var0.z * var3.y;
double var13 = var0.z * var3.x - var0.x * var3.z;
double var15 = var0.x * var3.y - var0.y * var3.x;
double var17 = var0.y * var15 - var0.z * var13;
double var19 = var0.z * var11 - var0.x * var15;
double var21 = var0.x * var13 - var0.y * var11;
double var23 = Math.sqrt(dotProduct(var17, var19, var21));
double var25 = var6 * var4 / var1;
double var27 = var9 * var4 / var23;
var8.x = var25 * var0.x - var27 * var17;
var8.y = var25 * var0.y - var27 * var19;
var8.z = var25 * var0.z - var27 * var21;
}
class="kw">public class="kw">static void realignUnitVector(@Nonnull Vector3d var0, @Nonnull Vector3d var1, double var2, @Nonnull Vector3d var4) {
double var5 = Math.sqrt(1.0 - var2 * var2);
double var7 = var0.y * var1.z - var0.z * var1.y;
double var9 = var0.z * var1.x - var0.x * var1.z;
double var11 = var0.x * var1.y - var0.y * var1.x;
double var13 = var0.y * var11 - var0.z * var9;
double var15 = var0.z * var7 - var0.x * var11;
double var17 = var0.x * var9 - var0.y * var7;
double var19 = Math.sqrt(dotProduct(var13, var15, var17));
double var21 = var5 / var19;
var4.x = var2 * var0.x - var21 * var13;
var4.y = var2 * var0.y - var21 * var15;
var4.z = var2 * var0.z - var21 * var17;
var4.normalize();
}
class="kw">public class="kw">static boolean realignVectorReturnDirection(
@Nonnull Vector3d var0, double var1, @Nonnull Vector3d var3, double var4, double var6, @Nonnull Vector3d var8
) {
double var9 = Math.sqrt(1.0 - var6 * var6);
double var11 = var0.y * var3.z - var0.z * var3.y;
double var13 = var0.z * var3.x - var0.x * var3.z;
double var15 = var0.x * var3.y - var0.y * var3.x;
double var17 = var0.y * var15 - var0.z * var13;
double var19 = var0.z * var11 - var0.x * var15;
double var21 = var0.x * var13 - var0.y * var11;
double var23 = Math.sqrt(dotProduct(var17, var19, var21));
double var25 = var6 * var4 / var1;
double var27 = var9 * var4 / var23;
var8.x = var25 * var0.x - var27 * var17;
var8.y = var25 * var0.y - var27 * var19;
var8.z = var25 * var0.z - var27 * var21;
class="kw">return dotProduct(var0.x, var0.y, var0.z, var17, var19, var21) > 0.0;
}
@Nonnull
class="kw">public class="kw">static Vector3d createOrthogonalvector(@Nonnull Vector3d var0, @Nonnull Vector3d var1) {
double var2 = var0.x;
double var4 = var0.y;
double var6 = var0.z;
double var8 = Math.abs(var2);
double var10 = Math.abs(var4);
double var12 = Math.abs(var6);
if (var8 >= var10 && var8 >= var12) {
var1.x = var4;
var1.y = -var2;
var1.z = 0.0;
} else if (var10 >= var8 && var10 >= var12) {
var1.x = 0.0;
var1.y = var6;
var1.z = -var4;
} else {
var1.x = -var6;
var1.y = 0.0;
var1.z = var2;
}
class="kw">return var1;
}
class="kw">public class="kw">static boolean inViewSector(double var0, double var2, float var4, float var5, double var6, double var8) {
if (var5 > (float) Math.PI) {
class="kw">return !inViewSector(var0, var2, var4 + (float) Math.PI, (float) (Math.PI * 2) - var5, var6, var8);
}
var6 -= var0;
var8 -= var2;
double var10 = var6 * var6 + var8 * var8;
if (var10 <= 1.0E-6) {
class="kw">return true;
}
float var12 = PhysicsMath.headingFromDirection(var6, var8);
var12 -= var4;
while (var12 < (float) -Math.PI) {
var12 += (float) (Math.PI * 2);
}
while (var12 > (float) Math.PI) {
var12 -= (float) (Math.PI * 2);
}
var12 *= 2.0F;
class="kw">return -var5 <= var12 && var12 <= var5;
}
class="kw">public class="kw">static boolean isInViewCone(
double var0, double var2, double var4, double var6, double var8, double var10, float var12, double var13, double var15, double var17
) {
class="kw">return isInViewCone(var6, var8, var10, var12, var13 - var0, var15 - var2, var17 - var4);
}
class="kw">public class="kw">static boolean isInViewCone(double var0, double var2, double var4, float var6, double var7, double var9, double var11) {
if (var6 >= 1.0F) {
class="kw">return true;
}
double var13 = length(var7, var9, var11);
if (var13 < 1.0E-6) {
class="kw">return true;
}
double var15 = dotProduct(var0, var2, var4, var7, var9, var11);
class="kw">return var15 > var6 * var13;
}
class="kw">public class="kw">static boolean isInViewCone(@Nonnull Vector3d var0, @Nonnull Vector3d var1, float var2, @Nonnull Vector3d var3) {
class="kw">return isInViewCone(var0.x, var0.y, var0.z, var1.x, var1.y, var1.z, var2, var3.x, var3.y, var3.z);
}
class="kw">public class="kw">static boolean isInViewCone(@Nonnull Vector3d var0, @Nonnull Vector3d var1, float var2, @Nonnull Vector3d var3, @Nonnull Vector3d var4) {
double var5 = var4.x;
double var7 = var4.y;
double var9 = var4.z;
class="kw">return isInViewCone(
var0.x * var5, var0.y * var7, var0.z * var9, var1.x * var5, var1.y * var7, var1.z * var9, var2, var3.x * var5, var3.y * var7, var3.z * var9
);
}
class="kw">public class="kw">static float turnAngle(float var0, float var1) {
float var2 = PhysicsMath.normalizeAngle(var1) - PhysicsMath.normalizeAngle(var0);
if (var2 < (float) -Math.PI) {
var2 += (float) (Math.PI * 2);
} else if (var2 > (float) Math.PI) {
var2 -= (float) (Math.PI * 2);
}
class="kw">return var2;
}
class="kw">public class="kw">static float clampRotation(float var0, float var1) {
if (var0 >= var1) {
class="kw">return var1;
} else {
class="kw">return var0 > -var1 ? var0 : -var1;
}
}
class="kw">public class="kw">static int intersectLineSphere(
@Nonnull Vector3d var0, double var1, @Nonnull Vector3d var3, @Nonnull Vector3d var4, @Nonnull Vector3d var5, @Nonnull Vector3d var6, boolean var7
) {
var5.set(var4).sub(var3);
var6.set(var3).sub(var0);
double var8 = var5.dot(var5);
double var10 = 2.0 * var5.dot(var6);
double var12 = var6.dot(var6) - var1 * var1;
double var14 = var10 * var10 - 4.0 * var8 * var12;
if (var8 == 0.0) {
if (var14 != 0.0) {
class="kw">return 0;
}
var5.set(var3);
class="kw">return 1;
} else {
if (var14 < 0.0) {
class="kw">return 0;
}
if (var14 != 0.0) {
var14 = Math.sqrt(var14) / (2.0 * var8);
double var25 = -var10 / (2.0 * var8);
double var18 = var25 - var14;
double var20 = var25 + var14;
if (var20 < var18) {
double var22 = var18;
var18 = var20;
var20 = var22;
}
if (var7) {
if (var18 > 1.0) {
class="kw">return 0;
}
if (var18 >= 0.0) {
var5.set(var3).fma(var18, var6);
if (var20 <= 1.0) {
var6.mul(var20).add(var3);
class="kw">return 2;
}
class="kw">return 1;
}
if (var20 >= 0.0 && var20 <= 1.0) {
var5.set(var3).fma(var18, var6);
class="kw">return 1;
}
}
var5.set(var3).fma(var18, var6);
var6.mul(var20).add(var3);
class="kw">return 2;
} else {
double var16 = -var10 / (2.0 * var8);
if (!var7 || !(var16 < 0.0) && !(var16 > 1.0)) {
var5.set(var3).fma(var16, var6);
class="kw">return 1;
} else {
class="kw">return 0;
}
}
}
}
class="kw">public class="kw">static double intersectLineSphereLerp(
@Nonnull Vector3d var0,
double var1,
@Nonnull Vector3d var3,
@Nonnull Vector3d var4,
@Nonnull Vector3d var5,
@Nonnull Vector3d var6,
@Nonnull Vector3d var7
) {
var5.set(var4).sub(var3).mul(var7);
var6.set(var3).sub(var0).mul(var7);
double var8 = var5.dot(var5);
double var10 = 2.0 * var5.dot(var6);
double var12 = var6.dot(var6) - var1 * var1;
double var14 = var10 * var10 - 4.0 * var8 * var12;
if (var8 == 0.0) {
class="kw">return var14 == 0.0 ? 0.0 : 1.0;
}
if (var14 < 0.0) {
class="kw">return 1.0;
}
if (var14 == 0.0) {
double var25 = -var10 / (2.0 * var8);
class="kw">return !(var25 < 0.0) && !(var25 > 1.0) ? var25 : 1.0;
}
var14 = Math.sqrt(var14) / (2.0 * var8);
double var16 = -var10 / (2.0 * var8);
double var18 = var16 - var14;
double var20 = var16 + var14;
if (var20 < var18) {
double var22 = var18;
var18 = var20;
var20 = var22;
}
if (var18 > 1.0) {
class="kw">return 1.0;
} else if (var18 >= 0.0) {
class="kw">return var18;
} else {
class="kw">return var20 >= 0.0 && var20 <= 1.0 ? var20 : 1.0;
}
}
class="kw">public class="kw">static double intersectLineSphereLerp(@Nonnull Vector3d var0, double var1, @Nonnull Vector3d var3, @Nonnull Vector3d var4, @Nonnull Vector3d var5) {
class="kw">return intersectLineSphereLerp(var0, var1, var3, var4, new Vector3d(), new Vector3d(), var5);
}
class="kw">public class="kw">static double dotProduct(@Nonnull Vector3d var0, @Nonnull Vector3d var1, @Nonnull Vector3d var2) {
double var3 = var1.x - var0.x;
double var5 = var1.y - var0.y;
double var7 = var1.z - var0.z;
double var9 = var2.x - var0.x;
double var11 = var2.y - var0.y;
double var13 = var2.z - var0.z;
class="kw">return var3 * var9 + var5 * var11 + var7 * var13;
}
class="kw">public class="kw">static double dotProduct(@Nonnull Vector3d var0, @Nonnull Vector3d var1, @Nonnull Vector3d var2, @Nonnull Vector3d var3) {
double var4 = (var1.x - var0.x) * var3.x;
double var6 = (var1.y - var0.y) * var3.y;
double var8 = (var1.z - var0.z) * var3.z;
double var10 = (var2.x - var0.x) * var3.x;
double var12 = (var2.y - var0.y) * var3.y;
double var14 = (var2.z - var0.z) * var3.z;
class="kw">return var4 * var10 + var6 * var12 + var8 * var14;
}
class="kw">public class="kw">static double dotProduct(double var0, double var2, double var4) {
class="kw">return var0 * var0 + var2 * var2 + var4 * var4;
}
class="kw">public class="kw">static double dotProduct(double var0, double var2, double var4, double var6, double var8, double var10) {
class="kw">return var0 * var6 + var2 * var8 + var4 * var10;
}
class="kw">public class="kw">static double dotProduct(float var0, float var1, float var2) {
class="kw">return var0 * var0 + var1 * var1 + var2 * var2;
}
class="kw">public class="kw">static double dotProduct(float var0, float var1, float var2, float var3, float var4, float var5) {
class="kw">return var0 * var3 + var1 * var4 + var2 * var5;
}
class="kw">private class="kw">static double length(double var0, double var2, double var4) {
class="kw">return Math.sqrt(dotProduct(var0, var2, var4));
}
class="kw">public class="kw">static void lerpDistance(@Nonnull Vector3d var0, @Nonnull Vector3d var1, double var2, @Nonnull Vector3d var4) {
lerp(var0, var1, var2 / var0.distance(var1), var4);
}
class="kw">public class="kw">static void lerp(@Nonnull Vector3d var0, @Nonnull Vector3d var1, double var2, @Nonnull Vector3d var4) {
double var5 = var1.x - var0.x;
double var7 = var1.y - var0.y;
double var9 = var1.z - var0.z;
offsetVector(var0, var5, var7, var9, var2, var4);
}
class="kw">public class="kw">static double lerp(double var0, double var2, double var4) {
class="kw">return (1.0 - var4) * var0 + var4 * var2;
}
class="kw">public class="kw">static void offsetVector(@Nonnull Vector3d var0, double var1, double var3, double var5, double var7, @Nonnull Vector3d var9) {
var9.set(var0.x + var7 * var1, var0.y + var7 * var3, var0.z + var7 * var5);
}
class="kw">public class="kw">static void offsetVector(double var0, double var2, double var4, double var6, double var8, double var10, double var12, @Nonnull Vector3d var14) {
var14.set(var0 + var12 * var6, var2 + var12 * var8, var4 + var12 * var10);
}
class="kw">public class="kw">static void orthoComposition(@Nonnull Vector3d var0, @Nonnull Vector3d var1, @Nonnull Vector3d var2, double var3, @Nonnull Vector3d var5) {
double var6 = var1.x - var0.x;
double var8 = var1.y - var0.y;
double var10 = var1.z - var0.z;
double var12 = var8 * var2.z - var10 * var2.y;
double var14 = var10 * var2.x - var6 * var2.z;
double var16 = var6 * var2.y - var8 * var2.x;
offsetVector(var1, var12, var14, var16, var3 / length(var12, var14, var16), var5);
}
class="kw">public class="kw">static void orthoComposition(
@Nonnull Vector3dc var0, @Nonnull Vector3dc var1, double var2, @Nonnull Vector3dc var4, double var5, @Nonnull Vector3d var7
) {
double var8 = var1.x() - var0.x();
double var10 = var1.y() - var0.y();
double var12 = var1.z() - var0.z();
double var14 = var10 * var4.z() - var12 * var4.y();
double var16 = var12 * var4.x() - var8 * var4.z();
double var18 = var8 * var4.y() - var10 * var4.x();
double var20 = var2 / length(var8, var10, var12);
offsetVector(var0.x() + var20 * var8, var0.y() + var20 * var10, var0.z() + var20 * var12, var14, var16, var18, var5 / length(var14, var16, var18), var7);
}
class="kw">public class="kw">static float lookatHeading(@Nonnull Vector3d var0, @Nonnull Vector3d var1, float var2) {
double var3 = var1.x - var0.x;
double var5 = var1.z - var0.z;
class="kw">return var3 == 0.0 && var5 == 0.0 ? var2 : PhysicsMath.headingFromDirection(var3, var5);
}
class="kw">public class="kw">static double blockEmptySpace(@Nullable BlockType var0, int var1, @Nonnull NPCPhysicsMath.Direction var2) {
if (var0 == null) {
class="kw">return 1.0;
}
if (var0 != BlockType.EMPTY && var0.getMaterial() == BlockMaterial.Solid) {
BlockBoundingBoxes var3 = BlockBoundingBoxes.getAssetMap().getAsset(var0.getHitboxTypeIndex());
if (var3 == null) {
class="kw">return 1.0;
}
Box var4 = var3.get(var1).getBoundingBox();
double var5;
class="kw">switch (var2) {
case POS_X:
var5 = var4.min.x;
break;
case NEG_X:
var5 = 1.0 - var4.max.x;
break;
case POS_Y:
var5 = var4.min.y;
break;
case NEG_Y:
var5 = 1.0 - var4.max.y;
break;
case POS_Z:
var5 = var4.min.z;
break;
case NEG_Z:
var5 = 1.0 - var4.max.z;
break;
class="kw">default:
class="kw">return 0.0;
}
class="kw">return var5 > 0.0 && var5 < 1.0 ? var5 : 0.0;
} else {
class="kw">return 1.0;
}
}
class="kw">public class="kw">static double heightOverGround(@Nonnull World var0, double var1, double var3, double var5) {
int var7 = MathUtil.floor(var1);
int var8 = MathUtil.floor(var3);
int var9 = MathUtil.floor(var5);
ChunkStore var10 = var0.getChunkStore();
Ref var11 = var10.getChunkReference(ChunkUtil.indexChunkFromBlock(var7, var9));
if (var11 != null && var11.isValid()) {
Store var12 = var10.getStore();
BlockChunk var13 = var12.getComponent(var11, BlockChunk.getComponentType());
if (var13 == null) {
class="kw">return var8 + 1;
}
BlockSection var14 = var13.getSectionAtBlockY(var8);
BlockType var15 = BlockType.getAssetMap().getAsset(var14.get(var7, var8, var9));
int var16 = var14.getRotationIndex(var7, var8, var9);
class="kw">return var8 + blockHeight(var15, var16);
} else {
class="kw">return var8 + 1;
}
}
class="kw">public class="kw">static double heightOverGround(@Nonnull World var0, double var1, double var3) {
int var5 = MathUtil.floor(var1);
int var6 = MathUtil.floor(var3);
ChunkStore var7 = var0.getChunkStore();
Ref var8 = var7.getChunkReference(ChunkUtil.indexChunkFromBlock(var5, var6));
if (var8 != null && var8.isValid()) {
Store var9 = var7.getStore();
WorldChunk var10 = var9.getComponent(var8, WorldChunk.getComponentType());
if (var10 == null) {
class="kw">return -1.0;
}
BlockChunk var11 = var9.getComponent(var8, BlockChunk.getComponentType());
if (var11 == null) {
class="kw">return -1.0;
}
int var12 = var10.getHeight(var5, var6);
BlockSection var13 = var11.getSectionAtBlockY(var12);
BlockType var14 = BlockType.getAssetMap().getAsset(var13.get(var5, var12, var6));
int var15 = var13.getRotationIndex(var5, var12, var6);
class="kw">return var12 + blockHeight(var14, var15);
} else {
class="kw">return -1.0;
}
}
class="kw">public class="kw">static double blockHeight(@Nullable BlockType var0, int var1) {
class="kw">return 1.0 - blockEmptySpace(var0, var1, NPCPhysicsMath.Direction.NEG_Y);
}
class="kw">public class="kw">static double dotProduct(double var0, double var2, double var4, @Nonnull Vector3d var6) {
class="kw">return var0 * var0 * var6.x + var2 * var2 * var6.y + var4 * var4 * var6.z;
}
class="kw">public class="kw">static double dotProduct(double var0, double var2, double var4, double var6, double var8, double var10, @Nonnull Vector3d var12) {
class="kw">return var0 * var6 * var12.x + var2 * var8 * var12.y + var4 * var10 * var12.z;
}
class="kw">public class="kw">static double projectedLengthSquared(@Nonnull Vector3d var0, @Nonnull Vector3d var1) {
class="kw">return dotProduct(var0.x, var0.y, var0.z, var1);
}
class="kw">public class="kw">static double projectedLength(@Nonnull Vector3d var0, @Nonnull Vector3d var1) {
class="kw">return Math.sqrt(projectedLengthSquared(var0, var1));
}
class="kw">public class="kw">static double getMaxBoundingBoxExtent(@Nonnull Box var0, @Nonnull Vector3dc var1) {
double var2 = 0.0;
if (var1.x() != 0.0) {
var2 = var0.width();
}
if (var1.y() != 0.0) {
var2 = Math.max(var2, var0.height());
}
if (var1.z() != 0.0) {
var2 = Math.max(var2, var0.depth());
}
class="kw">return var2;
}
class="kw">public class="kw">static double getMinBoundingBoxExtent(@Nonnull Box var0, @Nonnull Vector3dc var1) {
double var2 = Double.MAX_VALUE;
if (var1.x() != 0.0) {
var2 = var0.width();
}
if (var1.y() != 0.0) {
var2 = Math.min(var2, var0.height());
}
if (var1.z() != 0.0) {
var2 = Math.min(var2, var0.depth());
}
class="kw">return var2 == Double.MAX_VALUE ? 0.0 : var2;
}
class="kw">public class="kw">static double getMinBoundingBoxDistance(@Nonnull Box var0, @Nonnull Box var1, @Nonnull Vector3dc var2) {
double var3 = Double.MAX_VALUE;
if (var2.x() != 0.0) {
var3 = var0.width() + var1.width();
}
if (var2.y() != 0.0) {
var3 = Math.min(var3, var0.height() + var1.height());
}
if (var2.z() != 0.0) {
var3 = Math.min(var3, var0.depth() + var1.depth());
}
class="kw">return var3 == Double.MAX_VALUE ? 0.0 : var3 / 2.0;
}
class="kw">public class="kw">static double dotProductWithSelector(@Nonnull Vector3d var0, @Nonnull Vector3d var1, @Nonnull Vector3d var2) {
class="kw">return dotProduct(var0.x, var0.y, var0.z, var1.x, var1.y, var1.z, var2);
}
class="kw">public class="kw">static double distanceWithSelector(@Nonnull Vector3d var0, @Nonnull Vector3d var1, @Nonnull Vector3d var2) {
class="kw">return Math.sqrt(distanceSquaredWithSelector(var0, var1, var2));
}
class="kw">public class="kw">static double distanceSquaredWithSelector(@Nonnull Vector3d var0, @Nonnull Vector3d var1, @Nonnull Vector3d var2) {
double var3 = (var0.x - var1.x) * var2.x;
double var5 = (var0.y - var1.y) * var2.y;
double var7 = (var0.z - var1.z) * var2.z;
class="kw">return var3 * var3 + var5 * var5 + var7 * var7;
}
class="kw">public class="kw">static int intersectSweptSpheres(
@Nonnull Vector3d var0, @Nonnull Vector3d var1, @Nonnull Vector3d var2, @Nonnull Vector3d var3, double var4, @Nonnull Vector3d var6, double[] var7
) {
class="kw">return intersectSweptSpheres(var0.x, var0.y, var0.z, var1.x, var1.y, var1.z, var2.x, var2.y, var2.z, var3.x, var3.y, var3.z, var4, var6, var7);
}
class="kw">public class="kw">static int intersectSweptSpheresFootpoint(
@Nonnull Vector3d var0,
@Nonnull Vector3d var1,
double var2,
@Nonnull Vector3d var4,
@Nonnull Vector3d var5,
double var6,
@Nonnull Vector3dc var8,
double[] var9
) {
class="kw">return intersectSweptSpheres(
var0.x, var0.y + var2, var0.z, var1.x, var1.y, var1.z, var4.x, var4.y + var6, var4.z, var5.x, var5.y, var5.z, var2 + var6, var8, var9
);
}
class="kw">public class="kw">static int intersectSweptSpheres(
double var0,
double var2,
double var4,
double var6,
double var8,
double var10,
double var12,
double var14,
double var16,
double var18,
double var20,
double var22,
double var24,
@Nonnull Vector3dc var26,
double[] var27
) {
double var28 = (var12 - var0) * var26.x();
double var30 = (var14 - var2) * var26.y();
double var32 = (var16 - var4) * var26.z();
double var34 = (var18 - var6) * var26.x();
double var36 = (var20 - var8) * var26.y();
double var38 = (var22 - var10) * var26.z();
double var40 = dotProduct(var34, var36, var38);
double var42 = 2.0 * dotProduct(var28, var30, var32, var34, var36, var38);
double var44 = dotProduct(var28, var30, var32) - var24 * var24;
double var46 = var42 * var42 - 4.0 * var40 * var44;
if (var46 < 0.0) {
class="kw">return 0;
} else {
var27[0] = -var42 / (2.0 * var40);
var27[1] = var27[0];
if (var46 == 0.0) {
class="kw">return 1;
} else {
var46 = Math.sqrt(var46) / (2.0 * var40);
var27[0] -= var46;
var27[1] += var46;
if (var27[0] >= var27[1]) {
throw new IllegalArgumentException("IntersectSweptSpheres: Near result larger far result");
} else {
class="kw">return 2;
}
}
}
}
class="kw">public class="kw">static double collisionSphereRadius(@Nonnull Box var0) {
class="kw">return collisionSphereRadius(var0.max.x - var0.min.x, var0.max.z - var0.min.z, var0.max.y - var0.min.y);
}
class="kw">public class="kw">static double collisionSphereRadius(double var0, double var2, double var4) {
class="kw">return Math.pow(var0 * var4 * var2 * 3.0 / (float) (Math.PI * 4), 0.3333333333333333);
}
class="kw">public class="kw">static double collisionSphereRadius(@Nonnull Ref<EntityStore> var0, @Nonnull ComponentAccessor<EntityStore> var1) {
NPCEntity var2 = var1.getComponent(var0, NPCEntity.getComponentType());
if (var2 != null) {
Role var3 = var2.getRole();
double var4 = var3 != null ? var3.getCollisionRadius() : -1.0;
if (var4 >= 0.0) {
class="kw">return var4;
}
}
BoundingBox var6 = var1.getComponent(var0, BoundingBox.getComponentType());
Box var7 = var6 != null ? var6.getBoundingBox() : null;
class="kw">return var7 != null ? collisionSphereRadius(var7.width(), var7.depth(), var7.height()) : 0.75;
}
class="kw">public class="kw">static double rayCircleIntersect(double var0, double var2, double var4, double var6, double var8) {
double var10 = var4 * var4 + var6 * var6;
double var12 = 2.0 * (var0 * var4 + var2 * var6);
double var14 = var0 * var0 + var2 * var2 - var8 * var8;
double var16 = var12 * var12 - 4.0 * var10 * var14;
if (var16 < 0.0) {
class="kw">return -1.0;
} else {
var16 = Math.sqrt(var16);
var10 *= 2.0;
double var18 = (-var12 - var16) / var10;
double var20 = (-var12 + var16) / var10;
if (var18 < 0.0) {
class="kw">return var20 < 0.0 ? -1.0 : var20;
} else if (var20 < 0.0) {
class="kw">return var18;
} else {
class="kw">return var18 < var20 ? var18 : var20;
}
}
}
class="kw">public class="kw">static double rayCircleIntersect(@Nonnull Vector3dc var0, @Nonnull Vector3dc var1, @Nonnull Vector3dc var2, double var3, @Nonnull Vector3dc var5) {
if (var5.x() == 0.0) {
class="kw">return rayCircleIntersect(var0.y() - var2.y(), var0.z() - var2.z(), var1.y() - var0.y(), var1.z() - var0.z(), var3);
} else {
class="kw">return var5.y() == 0.0
? rayCircleIntersect(var0.x() - var2.x(), var0.z() - var2.z(), var1.x() - var0.x(), var1.z() - var0.z(), var3)
: rayCircleIntersect(var0.x() - var2.x(), var0.y() - var2.y(), var1.x() - var0.x(), var1.y() - var0.y(), var3);
}
}
@Nonnull
class="kw">public class="kw">static Vector3d projection(@Nonnull Vector3d var0, @Nonnull Vector3d var1, @Nonnull Vector3d var2) {
var2.set(var0).mul(var1.dot(var0) / var0.dot(var0));
class="kw">return var2;
}
@Nonnull
class="kw">public class="kw">static Vector3d rejection(@Nonnull Vector3d var0, @Nonnull Vector3d var1, @Nonnull Vector3d var2) {
projection(var0, var1, var2);
var2.negate().add(var1);
class="kw">return var2;
}
@Nonnull
class="kw">public class="kw">static Vector3d subtractVector(@Nonnull Vector3d var0, @Nonnull Vector3d var1, @Nonnull Vector3d var2) {
class="kw">return var2.set(var0.x - var1.x, var0.y - var1.y, var0.z - var1.z);
}
@Nonnull
class="kw">public class="kw">static Vector3d addDifference(@Nonnull Vector3d var0, @Nonnull Vector3d var1, @Nonnull Vector3d var2) {
class="kw">return var0.add(var1.x - var2.x, var1.y - var2.y, var1.z - var2.z);
}
@Nonnull
class="kw">public class="kw">static Vector3d projection(@Nonnull Vector3d var0, @Nonnull Vector3d var1, @Nonnull Vector3d var2, @Nonnull Vector3d var3) {
subtractVector(var1, var0, var3).mul(dotProduct(var0, var2, var1) / dotProduct(var0, var1, var1));
class="kw">return var3;
}
@Nonnull
class="kw">public class="kw">static Vector3d rejection(@Nonnull Vector3d var0, @Nonnull Vector3d var1, @Nonnull Vector3d var2, @Nonnull Vector3d var3) {
projection(var0, var1, var2, var3).negate();
addDifference(var3, var2, var0);
class="kw">return var3;
}
@Nonnull
class="kw">public class="kw">static Vector3d multiply(@Nonnull Vector3d var0, @Nonnull Vector3d var1) {
var0.x = var0.x * var1.x;
var0.y = var0.y * var1.y;
var0.z = var0.z * var1.z;
class="kw">return var0;
}
class="kw">public class="kw">static double squaredDistProjected(double var0, double var2, double var4, @Nonnull Vector3d var6, @Nonnull Vector3dc var7) {
class="kw">return squaredDistProjected(var0, var2, var4, var6.x, var6.y, var6.z, var7);
}
class="kw">public class="kw">static double squaredDistProjected(double var0, double var2, double var4, double var6, double var8, double var10, @Nonnull Vector3dc var12) {
double var13 = 0.0;
if (var12.x() == 0.0) {
double var15 = var6 - var0;
var13 += var15 * var15;
}
if (var12.y() == 0.0) {
double var17 = var8 - var2;
var13 += var17 * var17;
}
if (var12.z() == 0.0) {
double var18 = var10 - var4;
var13 += var18 * var18;
}
class="kw">return var13;
}
class="kw">public class="kw">static double getProjectedDifference(@Nonnull Vector3d var0, @Nonnull Vector3d var1, @Nonnull Vector3d var2) {
class="kw">return (var0.x - var1.x) * (1.0 - var2.x) + (var0.y - var1.y) * (1.0 - var2.y) + (var0.z - var1.z) * (1.0 - var2.z);
}
class="kw">public class="kw">static boolean isInvalid(double var0) {
class="kw">return Double.isNaN(var0) || Double.isInfinite(var0);
}
class="kw">public class="kw">static boolean isInvalid(@Nonnull Vector3d var0) {
class="kw">return isInvalid(var0.x) || isInvalid(var0.y) || isInvalid(var0.z);
}
class="kw">public class="kw">static boolean isValid(double var0) {
class="kw">return Double.isFinite(var0);
}
class="kw">public class="kw">static boolean isValid(@Nonnull Vector3d var0) {
class="kw">return isValid(var0.x) && isValid(var0.y) && isValid(var0.z);
}
class="kw">public class="kw">static double jumpParameters(@Nonnull Vector3d var0, @Nonnull Vector3d var1, double var2, @Nonnull Vector3d var4) {
double var5 = var1.x - var0.x;
double var7 = var1.z - var0.z;
double var9 = Math.sqrt(var5 * var5 + var7 * var7);
double var11 = var1.y - var0.y;
double var13 = Math.sqrt(var9 * var9 + var11 * var11);
double var15 = var11 + var13;
double var17 = var11 - var13;
double var19 = Math.sqrt(var15 / var2);
float var21 = TrigMathUtil.atan(-var19 * var19 / (var2 * var9));
var4.set(var5, TrigMathUtil.sin(var21) * var9, var7).normalize(var19);
class="kw">return var19;
}
class="kw">public class="kw">static double accelerate(double var0, double var2, double var4, double var6) {
var0 += var2 * var4;
if (var0 > var6) {
var0 = var6;
}
class="kw">return var0;
}
class="kw">public class="kw">static double deccelerateToStop(double var0, double var2, double var4) {
if (var0 < 0.0) {
var0 += var2 * var4;
if (var0 > 0.0) {
var0 = 0.0;
}
} else {
var0 -= var2 * var4;
if (var0 < 0.0) {
var0 = 0.0;
}
}
class="kw">return var0;
}
@Nonnull
class="kw">public class="kw">static Vector3d deccelerateToStop(@Nonnull Vector3d var0, double var1, double var3) {
var0.x = deccelerateToStop(var0.x, var1, var3);
var0.y = deccelerateToStop(var0.y, var1, var3);
var0.z = deccelerateToStop(var0.z, var1, var3);
class="kw">return var0;
}
class="kw">public class="kw">static double accelerateDrag(double var0, double var2, double var4, double var6, double var8) {
class="kw">return var0 + var4 * var2 * (1.0 - Math.pow(Math.abs(var0 / var6), var8));
}
class="kw">public class="kw">static double accelerateDragCapped(double var0, double var2, double var4, double var6, double var8) {
var0 = accelerateDrag(var0, var2, var4, var6, var8);
class="kw">return var0 <= var6 ? var0 : var6;
}
class="kw">public class="kw">static double accelerateDrag(double var0, double var2, double var4, double var6) {
class="kw">return accelerateDrag(var0, var2, var4, var6, 3.0);
}
class="kw">public class="kw">static double accelerateDragCapped(double var0, double var2, double var4, double var6) {
class="kw">return accelerateDragCapped(var0, var2, var4, var6, 3.0);
}
class="kw">public class="kw">static double accelerateToTargetSpeed(double var0, double var2, double var4, double var6, double var8, double var10, double var12) {
var2 = MathUtil.clamp(var2, var10, var12);
if (var0 == var2) {
class="kw">return var2;
}
double var14;
if (var0 == 0.0) {
var14 = 0.0;
} else if (var0 > 0.0) {
var14 = -var6 * Math.pow(Math.abs(var0 / var12), 3.0);
} else if (var10 < 0.0) {
var14 = var8 * Math.pow(Math.abs(var0 / var10), 3.0);
} else {
var14 = var6 * Math.pow(Math.abs(var0 / var12), 3.0);
}
if (var0 < var2) {
double var19 = var0 + var4 * (var14 + var6);
class="kw">return var19 > var2 ? var2 : var19;
} else {
double var16 = var0 + var4 * (var14 - var8);
class="kw">return var16 < var2 ? var2 : var16;
}
}
class="kw">public class="kw">static double accelerateToTargetSpeed(double var0, double var2, double var4, double var6, double var8, double var10) {
class="kw">return accelerateToTargetSpeed(var0, var2, var4, var6, var8, 0.0, var10);
}
class="kw">public class="kw">static double accelerateToTargetSpeed(double var0, double var2, double var4, double var6, double var8) {
class="kw">return accelerateToTargetSpeed(var0, var2, var4, var6, var6, 0.0, var8);
}
class="kw">public class="kw">static double gravityDrag(double var0, double var2, double var4, double var6, double var8) {
double var10 = Math.abs(var0 / var6);
double var12 = Math.pow(var10, var8);
double var14 = var2 * var12;
if (var0 < 0.0) {
double var18 = var0 - var4 * (var2 - var14);
class="kw">return var0 < -var6 && var18 > -var6 ? -var6 : var18;
} else {
double var16 = var0 - var4 * (var2 + var14);
class="kw">return var0 > var6 && var16 < var6 ? var6 : var16;
}
}
class="kw">public class="kw">static double gravityDrag(double var0, double var2, double var4, double var6) {
class="kw">return gravityDrag(var0, var2, var4, var6, 3.0);
}
class="kw">public enum Direction {
POS_X,
NEG_X,
POS_Y,
NEG_Y,
POS_Z,
NEG_Z;
Direction() {
}
}
}