ClimateGraph class

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

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

Поля (30)

МодификаторыТипИмя
PARENTS, CHILDREN
final int RESOLUTION
break
break
AtomicInteger var10
double var10
var10
var10
double var20
double var22
double var24
int var5
int var5
int var5
int var5
ClimateType var5
var5
int var6
int var6
int var6
int var6
ClimateType[] var6
var6
int var7
ClimateType var7
var7
AtomicInteger var8
double var8
var8
AtomicInteger var9

Методы (35)

МодификаторыВозвратСигнатура
FadeMode FadeMode()
public double fadeDistancedouble fadeDistance()
public ClimateGraph.FadeMode fadeModeClimateGraph.FadeMode fadeMode()
public double fadeRadiusdouble fadeRadius()
for for(ClimateType var14 : var2)
for for(int var3 = 0; var3 < var1.width; var3++)
for for(int var4 = 0; var4 < var1.height; var4++)
for for(int var5 = 0; var5 < var1.width; var5++)
for for(int var6 = 0; var6 < var1.height; var6++)
for for(ClimateType var15 : var6)
for for(ClimatePoint var19 : var15.points)
public ClimateType[] getChildrenClimateType[] getChildren()
public DoubleMap getFadeDoubleMap getFade()
public double getFadedouble getFade(int var1)
public double getFadedouble getFade(double var1, double var3)
public double getFadeRawdouble getFadeRaw(int var1)
public double getFadeRawdouble getFadeRaw(double var1, double var3)
public int getIdint getId(int var1)
public int getIdint getId(double var1, double var3)
public ClimateType[] getParentsClimateType[] getParents()
public IntMap getTableIntMap getTable()
public ClimateType getTypeClimateType getType(double var1, double var3)
public ClimateType getTypeClimateType getType(int var1)
if if(this.fadeMode == ClimateGraph.FadeMode.PARENTS)
if if(this.fadeMode == ClimateGraph.FadeMode.CHILDREN)
if if(var24 < var8)
if if(var7 == null)
if if(!var4)
if if(var5 == null)
public int indexOfint indexOf(double var1, double var3)
private void populatePixelvoid populatePixel(int var1, int var2, IntMap var3, boolean var4)
private void populateTablevoid populateTable(IntMap var1, DoubleMap var2)
public void refreshvoid refresh()
public boolean validateboolean validate(int var1)
while while(var6.length > 0)

Исходный код

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