FadeMode enum

Пакет: com.hypixel.hytale.server.worldgen.climate

Файл: com/hypixel/hytale/server/worldgen/climate/ClimateGraph.java

Поля (1)

МодификаторыТипИмя
PARENTS, CHILDREN

Исходный код

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

class="kw">import com.hypixel.hytale.math.util.MathUtil;
class="kw">import com.hypixel.hytale.server.worldgen.climate.util.DistanceTransform;
class="kw">import com.hypixel.hytale.server.worldgen.climate.util.DoubleMap;
class="kw">import com.hypixel.hytale.server.worldgen.climate.util.IntMap;
class="kw">import it.unimi.dsi.fastutil.objects.Object2IntMap;
class="kw">import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap;
class="kw">import java.util.concurrent.atomic.AtomicInteger;
class="kw">import javax.annotation.Nonnull;

class="kw">public class ClimateGraph {
   class="kw">public class="kw">static class="kw">final int RESOLUTION = 512;
   class="kw">private class="kw">static class="kw">final double ONE_MINUS_EPS = 1.0 - MathUtil.EPSILON_DOUBLE;
   class="kw">private class="kw">final double width;
   class="kw">private class="kw">final double height;
   class="kw">private class="kw">final double fadeRadius;
   class="kw">private class="kw">final double fadeDistance;
   class="kw">private class="kw">final ClimateGraph.FadeMode fadeMode;
   @Nonnull
   class="kw">private class="kw">final ClimateType[] parents;
   @Nonnull
   class="kw">private class="kw">final ClimateType[] children;
   @Nonnull
   class="kw">private class="kw">final ClimateType[] id2TypeLookup;
   @Nonnull
   class="kw">private class="kw">final IntMap table;
   @Nonnull
   class="kw">private class="kw">final DoubleMap fade;
   @Nonnull
   class="kw">private class="kw">final Object2IntMap<ClimateType> type2IdLookup;

   class="kw">public ClimateGraph(int var1, @Nonnull ClimateType[] var2, @Nonnull ClimateGraph.FadeMode var3, double var4, double var6) {
      this.table = new IntMap(var1, var1);
      this.fade = new DoubleMap(var1, var1);
      this.width = var1 * ONE_MINUS_EPS;
      this.height = var1 * ONE_MINUS_EPS;
      AtomicInteger var8 = new AtomicInteger();
      ClimateType.walk(var2, var1x -> var8.getAndIncrement());
      this.fadeMode = var3;
      this.fadeRadius = var4;
      this.fadeDistance = var6;
      this.parents = var2;
      this.children = new ClimateType[var8.intValue() - var2.length];
      this.id2TypeLookup = new ClimateType[var8.intValue()];
      this.type2IdLookup = new Object2IntOpenHashMap();
      AtomicInteger var9 = new AtomicInteger();
      AtomicInteger var10 = new AtomicInteger();

      for (ClimateType var14 : var2) {
         this.id2TypeLookup[var9.get()] = var14;
         this.type2IdLookup.put(var14, var9.get());
         var9.getAndIncrement();
         ClimateType.walk(var14.children, var3x -> {
            this.children[var10.get()] = var3x;
            this.id2TypeLookup[var9.get()] = var3x;
            this.type2IdLookup.put(var3x, var9.get());
            var9.getAndIncrement();
            var10.getAndIncrement();
         });
      }

      this.populateTable(this.table, this.fade);
   }

   class="kw">public double fadeRadius() {
      class="kw">return this.fadeRadius;
   }

   class="kw">public double fadeDistance() {
      class="kw">return this.fadeDistance;
   }

   class="kw">public ClimateGraph.FadeMode fadeMode() {
      class="kw">return this.fadeMode;
   }

   class="kw">public void refresh() {
      this.populateTable(this.table, this.fade);
   }

   class="kw">public ClimateType[] getParents() {
      class="kw">return this.parents;
   }

   class="kw">public ClimateType[] getChildren() {
      class="kw">return this.children;
   }

   class="kw">public IntMap getTable() {
      class="kw">return this.table;
   }

   class="kw">public DoubleMap getFade() {
      class="kw">return this.fade;
   }

   class="kw">public int indexOf(double var1, double var3) {
      int var5 = MathUtil.floor(var1 * this.width);
      int var6 = MathUtil.floor(var3 * this.height);
      class="kw">return this.table.index(var5, var6);
   }

   class="kw">public int getId(int var1) {
      class="kw">return this.table.at(var1);
   }

   class="kw">public double getFade(int var1) {
      class="kw">return this.fade.at(var1) * this.fadeDistance;
   }

   class="kw">public double getFadeRaw(int var1) {
      class="kw">return this.fade.at(var1);
   }

   class="kw">public int getId(double var1, double var3) {
      int var5 = MathUtil.floor(var1 * this.width);
      int var6 = MathUtil.floor(var3 * this.height);
      class="kw">return this.table.at(var5, var6);
   }

   class="kw">public double getFade(double var1, double var3) {
      class="kw">return this.getFadeRaw(var1, var3) * this.fadeDistance;
   }

   class="kw">public double getFadeRaw(double var1, double var3) {
      int var5 = MathUtil.floor(var1 * this.width);
      int var6 = MathUtil.floor(var3 * this.height);
      class="kw">return this.fade.at(var5, var6);
   }

   class="kw">public ClimateType getType(double var1, double var3) {
      int var5 = MathUtil.floor(var1 * this.width);
      int var6 = MathUtil.floor(var3 * this.height);
      int var7 = this.table.at(var5, var6);
      class="kw">return this.id2TypeLookup[var7];
   }

   class="kw">public boolean validate(int var1) {
      class="kw">return (var1 & 536870911) < this.id2TypeLookup.length;
   }

   class="kw">public ClimateType getType(int var1) {
      class="kw">return this.id2TypeLookup[var1 & 536870911];
   }

   class="kw">private void populateTable(IntMap var1, DoubleMap var2) {
      if (this.fadeMode == ClimateGraph.FadeMode.PARENTS) {
         for (int var3 = 0; var3 < var1.width; var3++) {
            for (int var4 = 0; var4 < var1.height; var4++) {
               this.populatePixel(var3, var4, var1, false);
            }
         }

         DistanceTransform.apply(var1, var2, this.fadeRadius);
      }

      for (int var5 = 0; var5 < var1.width; var5++) {
         for (int var6 = 0; var6 < var1.height; var6++) {
            this.populatePixel(var5, var6, var1, true);
         }
      }

      if (this.fadeMode == ClimateGraph.FadeMode.CHILDREN) {
         DistanceTransform.apply(var1, var2, this.fadeRadius);
      }
   }

   class="kw">private void populatePixel(int var1, int var2, IntMap var3, boolean var4) {
      ClimateType var5 = null;
      ClimateType[] var6 = this.parents;

      while (var6.length > 0) {
         ClimateType var7 = null;
         double var8 = Double.MAX_VALUE;
         double var10 = Double.MAX_VALUE;

         for (ClimateType var15 : var6) {
            for (ClimatePoint var19 : var15.points) {
               double var20 = var1 - var19.temperature * this.width;
               double var22 = var2 - var19.intensity * this.height;
               double var24 = MathUtil.lengthSquared(var20, var22) / var19.modifier;
               if (var24 < var8) {
                  var10 = var8;
                  var8 = var24;
                  var7 = var15;
               } else if (var24 < var10) {
                  var10 = var24;
               }
            }
         }

         if (var7 == null) {
            break;
         }

         var5 = var7;
         var6 = var7.children;
         if (!var4) {
            break;
         }
      }

      if (var5 == null) {
         var3.set(var1, var2, -1);
      } else {
         var3.set(var1, var2, this.type2IdLookup.getOrDefault(var5, -1));
      }
   }

   class="kw">public enum FadeMode {
      PARENTS,
      CHILDREN;

      FadeMode() {
      }
   }
}