AimingData class
Пакет: com.hypixel.hytale.server.npc.util
Файл: com/hypixel/hytale/server/npc/util/AimingData.java
implements: ExtraInfoProvider
Поля (32)
| Модификаторы | Тип | Имя |
|---|---|---|
final |
double |
MIN_MOVE_SPEED_STATIC |
|
double |
var13 |
|
|
var13 |
|
|
var13 |
|
double |
var15 |
|
|
var15 |
|
double |
var17 |
|
double |
var19 |
|
double |
var21 |
|
double[] |
var23 |
|
double |
var24 |
|
double |
var26 |
|
double |
var28 |
|
double |
var30 |
|
int |
var32 |
|
int |
var33 |
|
double |
var34 |
|
|
var34 |
|
double |
var37 |
|
double |
var39 |
|
double |
var4 |
|
double |
var41 |
|
double |
var43 |
|
float |
var45 |
|
float |
var46 |
|
double |
var48 |
|
double |
var49 |
|
double |
var5 |
|
double |
var50 |
|
double |
var6 |
|
double |
var7 |
|
double |
var8 |
Методы (38)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
public |
void |
clearvoid clear() |
public |
void |
clearSolutionvoid clearSolution() |
public |
boolean |
computeSolutionboolean computeSolution(@Nonnull Vector3dc var1, @Nonnull Vector3dc var2, @Nullable Vector3dc var3) |
public |
boolean |
computeSolutionboolean computeSolution(double var1, double var3, double var5, double var7, double var9, double var11) |
|
|
for for(int var36 = 0; var36 < var32; var36++) |
public |
double |
getChargeDistancedouble getChargeDistance() |
public |
double |
getDesiredHitAngledouble getDesiredHitAngle() |
public |
float |
getPitchfloat getPitch() |
public |
float |
getPitchfloat getPitch(boolean var1) |
public |
float |
getYawfloat getYaw() |
public |
float |
getYawfloat getYaw(boolean var1) |
public |
boolean |
haveOrientationboolean haveOrientation() |
|
|
if if(this.target == null) |
|
|
if if(var15 < 1.0E-4) |
|
|
if if(this.ballisticData == null) |
|
|
if if(!this.pitchAdjustOffset && var13 > this.depthOffset * this.depthOffset) |
|
|
if if(var48 < 1.0E-4) |
|
|
if if(this.haveSolution) |
|
|
if if(var32 == 0) |
|
|
if if(var33 < 2) |
|
|
if if(var33 == 0) |
|
|
if if(var33 == 1) |
|
|
if if(this.ballisticData == null) |
|
|
if if(this.owner == Integer.MIN_VALUE) |
public |
boolean |
isClaimedByboolean isClaimedBy(int var1) |
public |
boolean |
isHaveAttackedboolean isHaveAttacked() |
public |
boolean |
isOnTargetboolean isOnTarget(float var1, float var2, double var3) |
public |
void |
releasevoid release() |
public |
void |
requireBallisticvoid requireBallistic(@Nonnull BallisticData var1) |
public |
void |
requireCloseCombatvoid requireCloseCombat() |
public |
void |
setChargeDistancevoid setChargeDistance(double var1) |
public |
void |
setDepthOffsetvoid setDepthOffset(double var1, boolean var3) |
public |
void |
setDesiredHitAnglevoid setDesiredHitAngle(double var1) |
public |
void |
setHaveAttackedvoid setHaveAttacked(boolean var1) |
public |
void |
setOrientationvoid setOrientation(float var1, float var2) |
public |
void |
setTargetvoid setTarget(@Nullable Ref<EntityStore> var1) |
public |
void |
setUseFlatTrajectoryvoid setUseFlatTrajectory(boolean var1) |
public |
void |
tryClaimvoid tryClaim(int var1) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.server.npc.util;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.math.util.TrigMathUtil;
class="kw">import com.hypixel.hytale.server.core.modules.entity.damage.DeathComponent;
class="kw">import com.hypixel.hytale.server.core.modules.physics.util.PhysicsMath;
class="kw">import com.hypixel.hytale.server.core.modules.projectile.config.BallisticData;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import com.hypixel.hytale.server.npc.sensorinfo.ExtraInfoProvider;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3dc;
class="kw">public class AimingData class="kw">implements ExtraInfoProvider {
class="kw">public class="kw">static class="kw">final double MIN_MOVE_SPEED_STATIC = 0.01;
class="kw">public class="kw">static class="kw">final double MIN_MOVE_SPEED_STATIC_2 = 1.0E-4;
class="kw">public class="kw">static class="kw">final double MIN_AIMING_DISTANCE = 0.01;
class="kw">public class="kw">static class="kw">final double MIN_AIMING_DISTANCE_2 = 1.0E-4;
class="kw">public class="kw">static class="kw">final double MIN_AIR_TIME = 0.01;
class="kw">public class="kw">static class="kw">final double ANGLE_EPSILON = 0.1;
@Nullable
class="kw">private BallisticData ballisticData;
class="kw">private boolean useFlatTrajectory = true;
class="kw">private double depthOffset;
class="kw">private boolean pitchAdjustOffset;
class="kw">private boolean haveSolution;
class="kw">private boolean haveOrientation;
class="kw">private boolean haveAttacked;
class="kw">private double chargeDistance;
class="kw">private double desiredHitAngle;
class="kw">private class="kw">final float[] pitch = new float[2];
class="kw">private class="kw">final float[] yaw = new float[2];
@Nullable
class="kw">private Ref<EntityStore> target;
class="kw">private int owner = Integer.MIN_VALUE;
class="kw">public AimingData() {
}
class="kw">public boolean isHaveAttacked() {
class="kw">return this.haveAttacked;
}
class="kw">public void setHaveAttacked(boolean var1) {
this.haveAttacked = var1;
}
class="kw">public void requireBallistic(@Nonnull BallisticData var1) {
this.ballisticData = var1;
this.haveSolution = false;
this.haveOrientation = false;
}
class="kw">public void requireCloseCombat() {
this.ballisticData = null;
this.haveSolution = false;
this.haveOrientation = false;
}
class="kw">public float getPitch() {
class="kw">return this.getPitch(this.useFlatTrajectory);
}
class="kw">public float getPitch(boolean var1) {
class="kw">return this.pitch[var1 ? 0 : 1];
}
class="kw">public float getYaw() {
class="kw">return this.getYaw(this.useFlatTrajectory);
}
class="kw">public float getYaw(boolean var1) {
class="kw">return this.yaw[var1 ? 0 : 1];
}
@Nullable
class="kw">public BallisticData getBallisticData() {
class="kw">return this.ballisticData;
}
class="kw">public void setUseFlatTrajectory(boolean var1) {
this.useFlatTrajectory = var1;
}
class="kw">public void setChargeDistance(double var1) {
this.chargeDistance = var1;
}
class="kw">public double getChargeDistance() {
class="kw">return this.chargeDistance;
}
class="kw">public void setDesiredHitAngle(double var1) {
this.desiredHitAngle = var1;
}
class="kw">public double getDesiredHitAngle() {
class="kw">return this.desiredHitAngle;
}
@Nonnull
@Override
class="kw">public Class<AimingData> getType() {
class="kw">return AimingData.class;
}
class="kw">public void setDepthOffset(double var1, boolean var3) {
this.depthOffset = var1;
this.pitchAdjustOffset = var1 != 0.0 && var3;
}
@Nullable
class="kw">public Ref<EntityStore> getTarget() {
if (this.target == null) {
class="kw">return null;
}
if (this.target.isValid() && !this.target.getStore().getArchetype(this.target).contains(DeathComponent.getComponentType())) {
class="kw">return this.target;
}
this.target = null;
class="kw">return null;
}
class="kw">public void setTarget(@Nullable Ref<EntityStore> var1) {
this.target = var1;
}
class="kw">public boolean haveOrientation() {
class="kw">return this.haveOrientation || this.haveSolution;
}
class="kw">public void setOrientation(float var1, float var2) {
this.yaw[0] = this.yaw[1] = var1;
this.pitch[0] = this.pitch[1] = var2;
this.haveOrientation = true;
}
class="kw">public void clearSolution() {
this.haveOrientation = false;
this.haveSolution = false;
this.target = null;
}
class="kw">public boolean computeSolution(@Nonnull Vector3dc var1, @Nonnull Vector3dc var2, @Nullable Vector3dc var3) {
double var4 = var2.x() - var1.x();
double var6 = var2.y() - var1.y();
double var8 = var2.z() - var1.z();
class="kw">return var3 == null ? this.computeSolution(var4, var6, var8, 0.0, 0.0, 0.0) : this.computeSolution(var4, var6, var8, var3.x(), var3.y(), var3.z());
}
class="kw">public boolean computeSolution(double var1, double var3, double var5, double var7, double var9, double var11) {
double var13 = var1 * var1 + var5 * var5;
double var15 = var13 + var3 * var3;
if (var15 < 1.0E-4) {
class="kw">return this.haveSolution = false;
}
if (this.ballisticData == null) {
this.yaw[0] = this.yaw[1] = PhysicsMath.normalizeTurnAngle(PhysicsMath.headingFromDirection(var1, var5));
this.pitch[0] = this.pitch[1] = PhysicsMath.pitchFromDirection(var1, var3, var5);
class="kw">return this.haveSolution = true;
}
if (!this.pitchAdjustOffset && var13 > this.depthOffset * this.depthOffset) {
double var17 = Math.sqrt(var13);
double var19 = var17 - this.depthOffset;
double var21 = var19 / var17;
var1 *= var21;
var5 *= var21;
var13 = var19 * var19;
var15 = var13 + var3 * var3;
}
double var48 = NPCPhysicsMath.dotProduct(var7, var9, var11);
if (var48 < 1.0E-4) {
this.haveSolution = AimingHelper.computePitch(
Math.sqrt(var13), var3, this.ballisticData.getMuzzleVelocity(), this.ballisticData.getGravity(), this.pitch
);
if (this.haveSolution) {
this.yaw[0] = this.yaw[1] = PhysicsMath.normalizeTurnAngle(PhysicsMath.headingFromDirection(var1, var5));
}
class="kw">return this.haveSolution;
} else {
double var49 = this.ballisticData.getGravity();
double var50 = this.ballisticData.getMuzzleVelocity();
double[] var23 = new double[4];
double var24 = var49 * var49 / 4.0;
double var26 = var9 * var49;
double var28 = var48 + var3 * var49 - var50 * var50;
double var30 = 2.0 * (var1 * var7 + var3 * var9 + var5 * var11);
int var32 = RootSolver.solveQuartic(var24, var26, var28, var30, var15, var23);
if (var32 == 0) {
class="kw">return this.haveSolution = false;
}
int var33 = 0;
double var34 = Double.MAX_VALUE;
for (int var36 = 0; var36 < var32; var36++) {
double var37 = var23[var36];
if (!(var37 <= 0.01)) {
double var39 = var1 + var37 * var7;
double var41 = var5 + var37 * var11;
var13 = var39 * var39 + var41 * var41;
if (!(var13 < 1.0E-4)) {
double var43 = (var3 / var37 + 0.5 * var49 * var37) / var50;
if (!(var43 < -1.0) && !(var43 > 1.0)) {
float var45 = TrigMathUtil.asin(var43);
float var46 = PhysicsMath.headingFromDirection(var39, var41);
if (var33 < 2) {
if (var33 != 0 && !(var37 > var34)) {
this.pitch[var33] = this.pitch[var33 - 1];
this.yaw[var33] = this.yaw[var33 - 1];
this.pitch[var33 - 1] = var45;
this.yaw[var33 - 1] = var46;
} else {
var34 = var37;
this.pitch[var33] = var45;
this.yaw[var33] = var46;
}
var33++;
}
}
}
}
}
if (var33 == 0) {
class="kw">return this.haveSolution = false;
}
if (var33 == 1) {
this.pitch[1] = this.pitch[0];
this.yaw[1] = this.yaw[0];
}
class="kw">return this.haveSolution = true;
}
}
class="kw">public boolean isOnTarget(float var1, float var2, double var3) {
if (!this.haveOrientation()) {
class="kw">return false;
}
double var5 = NPCPhysicsMath.turnAngle(var1, this.getYaw());
if (this.ballisticData == null) {
class="kw">return -var3 <= var5 && var5 <= var3;
}
double var7 = NPCPhysicsMath.turnAngle(var2, this.getPitch());
class="kw">return var7 >= -0.1 && var7 <= 0.1 && var5 >= -0.1 && var5 <= 0.1;
}
class="kw">public void tryClaim(int var1) {
if (this.owner == Integer.MIN_VALUE) {
this.owner = var1;
this.clear();
}
}
class="kw">public boolean isClaimedBy(int var1) {
class="kw">return this.owner == var1;
}
class="kw">public void release() {
this.owner = Integer.MIN_VALUE;
}
class="kw">public void clear() {
this.clearSolution();
this.ballisticData = null;
this.useFlatTrajectory = true;
this.depthOffset = 0.0;
this.pitchAdjustOffset = false;
this.haveAttacked = false;
}
}