Range class

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

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

Поля (5)

МодификаторыТипИмя
public static final ClimateSearch.Range DEFAULT
public final double radius
public final double value
double var3
public final double weight

Методы (2)

МодификаторыВозвратСигнатура
public double scorepublic double score(double var1)
public boolean testpublic boolean test(double var1)

Исходный код

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

class="kw">import com.hypixel.hytale.math.util.FastRandom;
class="kw">import com.hypixel.hytale.math.util.HashUtil;
class="kw">import java.util.concurrent.CompletableFuture;
class="kw">import javax.annotation.Nonnull;
class="kw">import org.joml.Vector2i;

class="kw">public class ClimateSearch {
   class="kw">public class="kw">static class="kw">final int STEP_SIZE = 100;
   class="kw">public class="kw">static class="kw">final int DEFAULT_RADIUS = 5000;
   class="kw">public class="kw">static class="kw">final int MAX_RADIUS = 10000;
   class="kw">public class="kw">static class="kw">final double PI2 = Math.PI * 2;
   class="kw">public class="kw">static class="kw">final long SEED_OFFSET = 1659788403585L;
   class="kw">public class="kw">static class="kw">final double TARGET_SCORE = 0.75;

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

   class="kw">public class="kw">static CompletableFuture<ClimateSearch.Result> search(
      int var0, int var1, int var2, int var3, int var4, @Nonnull ClimateSearch.Rule var5, @Nonnull ClimateNoise var6, @Nonnull ClimateGraph var7
   ) {
      class="kw">return CompletableFuture.supplyAsync(() -> {
         double var8 = 0.0;
         Vector2i var10 = new Vector2i(var1, var2);
         int var11 = Math.min(var4, 10000);
         FastRandom var12 = new FastRandom(HashUtil.hash(var0, 1659788403585L));
         long var13 = System.currentTimeMillis();

         for (int var15 = var3; var15 <= var11; var15 += 100) {
            int var16 = (int)Math.floor((Math.PI * 2) * var15 / 100.0);
            double var17 = (Math.PI * 2) / var16;
            double var19 = (Math.PI * 2) * var12.nextDouble();

            for (int var21 = 0; var21 < var16; var21++) {
               double var22 = var21 * var17 + var19;
               int var24 = var1 + (int)(Math.cos(var22) * var15);
               int var25 = var2 + (int)(Math.sin(var22) * var15);
               double var26 = collect(var0, var24, var25, var6, var7, var5);
               if (var26 > var8) {
                  var10.set(var24, var25);
                  var8 = var26;
               }
            }

            if (var8 >= 0.75) {
               break;
            }
         }

         long var28 = System.currentTimeMillis() - var13;
         class="kw">return new ClimateSearch.Result(var10, var8, var28);
      });
   }

   class="kw">private class="kw">static double collect(int var0, int var1, int var2, ClimateNoise var3, ClimateGraph var4, ClimateSearch.Rule var5) {
      double var6 = var3.continent.get(var0, var1, var2);
      if (!var5.continent.test(var6)) {
         class="kw">return 0.0;
      }

      double var8 = var3.temperature.get(var0, var1, var2);
      if (!var5.temperature.test(var8)) {
         class="kw">return 0.0;
      }

      double var10 = var3.intensity.get(var0, var1, var2);
      if (!var5.intensity.test(var10)) {
         class="kw">return 0.0;
      }

      double var12 = var4.getFadeRaw(var8, var10);
      class="kw">return !var5.fade.test(var12) ? 0.0 : var5.score(var6, var8, var10, var12);
   }

   class="kw">public class="kw">static class Range {
      class="kw">public class="kw">static class="kw">final ClimateSearch.Range DEFAULT = new ClimateSearch.Range(0.0, 1.0, 0.0);
      class="kw">public class="kw">final double value;
      class="kw">public class="kw">final double radius;
      class="kw">public class="kw">final double weight;

      class="kw">public Range(double var1, double var3, double var5) {
         this.value = var1;
         this.radius = var3;
         this.weight = var5;
      }

      class="kw">public double score(double var1) {
         double var3 = Math.min(this.radius, Math.abs(var1 - this.value));
         class="kw">return 1.0 - var3 / this.radius;
      }

      class="kw">public boolean test(double var1) {
         class="kw">return Math.abs(var1 - this.value) <= this.radius;
      }
   }

   class="kw">public record Result(Vector2i position, double score, long time_ms) {
      class="kw">public Result {
      }

      class="kw">public String pretty() {
         double var1 = this.score * 100.0;
         class="kw">return String.format("Position: {%d, %d}, Score: %.2f%%, Time: %dms", this.position.x, this.position.y, var1, this.time_ms);
      }
   }

   class="kw">public class="kw">static class Rule {
      class="kw">public class="kw">final ClimateSearch.Range continent;
      class="kw">public class="kw">final ClimateSearch.Range temperature;
      class="kw">public class="kw">final ClimateSearch.Range intensity;
      class="kw">public class="kw">final ClimateSearch.Range fade;
      class="kw">public class="kw">final class="kw">transient double sumWeight;

      class="kw">public Rule(ClimateSearch.Range var1, ClimateSearch.Range var2, ClimateSearch.Range var3, ClimateSearch.Range var4) {
         this.continent = var1;
         this.temperature = var2;
         this.intensity = var3;
         this.fade = var4;
         this.sumWeight = var1.weight + var2.weight + var3.weight + var4.weight;
      }

      class="kw">public double score(double var1, double var3, double var5, double var7) {
         double var9 = 0.0;
         var9 += this.continent.score(var1) * this.continent.weight;
         var9 += this.temperature.score(var3) * this.temperature.weight;
         var9 += this.intensity.score(var5) * this.intensity.weight;
         var9 += this.fade.score(var7) * this.fade.weight;
         class="kw">return var9 / this.sumWeight;
      }
   }
}