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