Scratch class

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

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

Поля (2)

МодификаторыТипИмя
public final TargetContactSamplePlanner.RunBounds runBounds
public final ProbeMoveData.SegmentLocation segmentLocation

Исходный код

Показать/скрыть
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() {
      }
   }
}