TargetContactSamplePlanner class

Пакет: com.hypixel.hytale.server.npc.movement.controllers

Файл: com/hypixel/hytale/server/npc/movement/controllers/TargetContactSamplePlanner.java

Поля (29)

МодификаторыТипИмя
final int MAX_SAMPLES
public double end
public final TargetContactSamplePlanner.RunBounds runBounds
public final ProbeMoveData.SegmentLocation segmentLocation
public double start
double var11
var11
double var12
int var13
double var14
var14
int var14
double var16
var16
double var18
double var19
double var21
double var23
double var25
int var27
var27
var27
var27
int var4
ProbeMoveData.Segment[] var5
ProbeMoveData.Segment var6
double var7
double var9
var9

Методы (15)

МодификаторыВозвратСигнатура
abstract throw new IllegalArgumentExceptionthrow new IllegalArgumentException("sample buffers must have at least MAX_SAMPLES entries")
public RunBoundspublic RunBounds()
public Scratchpublic Scratch()
static int addFallbackSampleint addFallbackSample(double var0, double var2, double var4, double var6, int var8, @Nonnull double[] var9, @Nonnull RailPathSmoother.HitSide[] var10)
abstract return addFallbackSamplereturn addFallbackSample(var16 + var7, var12, var5, var1, var27, var10, var11)
static boolean computeTargetRunBoundsboolean computeTargetRunBounds(@Nonnull ProbeMoveData var0, double var1, @Nonnull TargetContactSamplePlanner.Scratch var3)
if if(var10.length < 6 || var11.length < 6)
if if(var14 > var16)
if if(var19 <= var21)
if if(var23 <= var25)
if if(var4 >= 0 && var4 < var0.segmentCount)
if if(var6 == null)
static boolean isSameRunYboolean isSameRunY(@Nullable ProbeMoveData.Segment var0, double var1)
static int planSamplesint planSamples(@Nonnull ProbeMoveData var0, double var1, double var3, double var5, double var7, @Nonnull TargetContactSamplePlanner.Scratch var9, @Nonnull double[] var10, @Nonnull RailPathSmoother.HitSide[] var11)
static double segmentStartDistancedouble segmentStartDistance(@Nonnull ProbeMoveData var0, int var1)

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.server.npc.movement.controllers;

class="kw">import com.hypixel.hytale.math.util.MathUtil;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;

class="kw">public class="kw">final class TargetContactSamplePlanner {
   class="kw">public class="kw">static class="kw">final int MAX_SAMPLES = 6;

   class="kw">private TargetContactSamplePlanner() {
   }

   class="kw">public class="kw">static int planSamples(
      @Nonnull ProbeMoveData var0,
      double var1,
      double var3,
      double var5,
      double var7,
      @Nonnull TargetContactSamplePlanner.Scratch var9,
      @Nonnull double[] var10,
      @Nonnull RailPathSmoother.HitSide[] var11
   ) {
      if (var10.length < 6 || var11.length < 6) {
         throw new IllegalArgumentException("sample buffers must have at least MAX_SAMPLES entries");
      }

      if (!computeTargetRunBounds(var0, var1, var9)) {
         class="kw">return 0;
      }

      double var12 = 0.0;
      double var14 = MathUtil.clamp(var9.runBounds.start, var12, var5);
      double var16 = MathUtil.clamp(var9.runBounds.end, var12, var5);
      if (var14 > var16) {
         double var18 = var14;
         var14 = var16;
         var16 = var18;
      }

      int var27 = 0;
      double var19 = var14 + var7;
      double var21 = Math.min(var16 - var7, var1 - var7);
      if (var19 <= var21) {
         var10[var27] = MathUtil.clamp(var1 - var3 + 1.0E-6, var19, var21);
         var11[var27] = RailPathSmoother.HitSide.BEFORE_TARGET;
         var27++;
      }

      double var23 = Math.max(var14 + var7, var1 + var7);
      double var25 = var16 - var7;
      if (var23 <= var25) {
         var10[var27] = MathUtil.clamp(var1 + var3 - 1.0E-6, var23, var25);
         var11[var27] = RailPathSmoother.HitSide.AFTER_TARGET;
         var27++;
      }

      var27 = addFallbackSample(var14 + var7, var12, var5, var1, var27, var10, var11);
      var27 = addFallbackSample(var16 - var7, var12, var5, var1, var27, var10, var11);
      var27 = addFallbackSample(var14 - var7, var12, var5, var1, var27, var10, var11);
      class="kw">return addFallbackSample(var16 + var7, var12, var5, var1, var27, var10, var11);
   }

   class="kw">private class="kw">static int addFallbackSample(
      double var0, double var2, double var4, double var6, int var8, @Nonnull double[] var9, @Nonnull RailPathSmoother.HitSide[] var10
   ) {
      if (Double.isFinite(var0) && !(var0 < var2 - 1.0E-6) && !(var0 > var4 + 1.0E-6)) {
         var9[var8] = var0;
         var10[var8] = var0 <= var6 ? RailPathSmoother.HitSide.BEFORE_TARGET : RailPathSmoother.HitSide.AFTER_TARGET;
         class="kw">return var8 + 1;
      } else {
         class="kw">return var8;
      }
   }

   class="kw">private class="kw">static boolean computeTargetRunBounds(@Nonnull ProbeMoveData var0, double var1, @Nonnull TargetContactSamplePlanner.Scratch var3) {
      if (!Double.isFinite(var1) || var0.segments == null || var0.segmentCount <= 0) {
         class="kw">return false;
      }

      if (!var0.locateSegmentAtDistance(var1, var3.segmentLocation)) {
         class="kw">return false;
      }

      int var4 = var3.segmentLocation.segmentIndex;
      if (var4 >= 0 && var4 < var0.segmentCount) {
         ProbeMoveData.Segment[] var5 = var0.segments;
         ProbeMoveData.Segment var6 = var5[var4];
         if (var6 == null) {
            class="kw">return false;
         }

         double var7 = var6.position.y;
         double var9 = segmentStartDistance(var0, var4);
         double var11 = var5[var4].distance;
         int var13 = var4;

         while (var13 > 0 && isSameRunY(var5[var13 - 1], var7)) {
            var9 = segmentStartDistance(var0, --var13);
         }

         int var14 = var4;

         while (var14 + 1 < var0.segmentCount && isSameRunY(var5[var14 + 1], var7)) {
            var11 = var5[++var14].distance;
         }

         var3.runBounds.start = var9;
         var3.runBounds.end = var11;
         class="kw">return true;
      } else {
         class="kw">return false;
      }
   }

   class="kw">private class="kw">static double segmentStartDistance(@Nonnull ProbeMoveData var0, int var1) {
      class="kw">return var1 > 0 && var0.segments != null ? var0.segments[var1 - 1].distance : 0.0;
   }

   class="kw">private class="kw">static boolean isSameRunY(@Nullable ProbeMoveData.Segment var0, double var1) {
      class="kw">return var0 != null && Math.abs(var0.position.y - var1) <= 1.0E-6;
   }

   class="kw">public class="kw">static class="kw">final class RunBounds {
      class="kw">public double start;
      class="kw">public double end;

      class="kw">public RunBounds() {
      }
   }

   class="kw">public class="kw">static class="kw">final class Scratch {
      class="kw">public class="kw">final ProbeMoveData.SegmentLocation segmentLocation = new ProbeMoveData.SegmentLocation();
      class="kw">public class="kw">final TargetContactSamplePlanner.RunBounds runBounds = new TargetContactSamplePlanner.RunBounds();

      class="kw">public Scratch() {
      }
   }
}