UniqueClimateGenerator class

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

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

Поля (23)

МодификаторыТипИмя
public static final String DEFAULT_PARENT
final UniqueClimateGenerator EMPTY
public static final UniqueClimateGenerator.Entry[] EMPTY_ARRAY
public static final UniqueClimateGenerator.Unique[] EMPTY_ARRAY
UniqueClimateGenerator.Entry var10
CompletableFuture var10
UniqueClimateGenerator.Unique var11
UniqueClimateGenerator.Entry[] var11
CompletableFuture var12
UniqueClimateGenerator.Unique[] var12
int var13
Zone.UniqueCandidate[] var2
Vector2i var3
UniqueClimateGenerator.Entry var4
UniqueClimateGenerator.Unique[] var4
int var4
Zone var5
Object2ObjectOpenHashMap var5
int var5
UniqueClimateGenerator.Unique[] var6
Object2ObjectOpenHashMap var7
UniqueClimateGenerator.Entry var8
UniqueClimateGenerator.Unique var9

Методы (25)

МодификаторыВозвратСигнатура
public record Entryrecord Entry(@Nonnull String zone, @Nonnull String parent, int color, int radius, @Nonnull Vector2i origin, int minDistance, int maxDistance, @Nonnull ClimateSearch.Rule rule)
abstract throw new Errorthrow new Error("Could not find zone: " + var4.zone)
public record Uniquerecord Unique(int color, int radius, int radius2, @Nonnull CompletableFuture<Vector2i> position)
public Uniquepublic Unique(int var1, int var2, @Nonnull CompletableFuture<Vector2i> var3)
public UniqueClimateGenerator applyUniqueClimateGenerator apply(int var1, @Nonnull Zone.UniqueCandidate[] var2, @Nonnull ClimateNoise var3, @Nonnull ClimateGraph var4, @Nonnull List<Zone.Unique> var5)
public UniqueClimateGenerator applyUniqueClimateGenerator apply(int var1, @Nonnull ClimateNoise var2, @Nonnull ClimateGraph var3)
public boolean containspublic boolean contains(int var1, int var2)
public UniqueClimateGenerator.Entry[] entriesUniqueClimateGenerator.Entry[] entries()
static CompletableFuture<Vector2i> findZonePositionCompletableFuture<Vector2i> findZonePosition(int var0, Vector2i var1, @Nonnull UniqueClimateGenerator.Entry var2, @Nullable UniqueClimateGenerator.Unique var3, @Nonnull ClimateNoise var4, @Nonnull ClimateGraph var5)
for for(int var3 = 0; var3 < this.zones.length; var3++)
for for(int var3 = 0; var3 < this.entries.length; var3++)
for for(int var9 = 0; var9 < this.entries.length; var9++)
for for(int var7 = 0; var7 < this.entries.length; var7++)
for for(int var14 = 0; var14 < var4.length; var14++)
public int generateint generate(int var1, int var2)
public Zone.UniqueCandidate[] getCandidatesZone.UniqueCandidate[] getCandidates(Map<String, Zone> var1)
if if(this.entries.length == 0)
if if(var5 == null)
if if(var2.length != this.entries.length)
if if(var6[var9] == null)
if if(var4[var7] == null)
if if(var4[var14] != null)
abstract this this(var1, UniqueClimateGenerator.Unique.EMPTY_ARRAY)
abstract this this(var1, var2, var2 * var2, var3)
public UniqueClimateGenerator.Unique[] zonesUniqueClimateGenerator.Unique[] zones()

Исходный код

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

class="kw">import com.hypixel.hytale.server.worldgen.util.LogUtil;
class="kw">import com.hypixel.hytale.server.worldgen.zone.Zone;
class="kw">import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap;
class="kw">import java.util.List;
class="kw">import java.util.Map;
class="kw">import java.util.concurrent.CompletableFuture;
class="kw">import java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector2i;

class="kw">public class UniqueClimateGenerator {
   class="kw">public class="kw">static class="kw">final UniqueClimateGenerator EMPTY = new UniqueClimateGenerator(
      UniqueClimateGenerator.Entry.EMPTY_ARRAY, UniqueClimateGenerator.Unique.EMPTY_ARRAY
   );
   class="kw">private class="kw">static class="kw">final int[] EMPTY_PARENTS = new int[0];
   class="kw">private class="kw">static class="kw">final int MAX_PARENT_DEPTH = 10;
   class="kw">private class="kw">static class="kw">final Vector2i DEFAULT_ORIGIN = new Vector2i(0, 0);
   class="kw">private class="kw">static class="kw">final Vector2i[] EMPTY_POSITIONS = new Vector2i[0];
   class="kw">protected class="kw">final UniqueClimateGenerator.Entry[] entries;
   class="kw">protected class="kw">final UniqueClimateGenerator.Unique[] zones;

   class="kw">public UniqueClimateGenerator(@Nonnull UniqueClimateGenerator.Entry[] var1) {
      this(var1, UniqueClimateGenerator.Unique.EMPTY_ARRAY);
   }

   class="kw">public UniqueClimateGenerator(@Nonnull UniqueClimateGenerator.Entry[] var1, @Nonnull UniqueClimateGenerator.Unique[] var2) {
      this.entries = var1;
      this.zones = var2;
   }

   class="kw">public UniqueClimateGenerator.Entry[] entries() {
      class="kw">return this.entries;
   }

   class="kw">public UniqueClimateGenerator.Unique[] zones() {
      class="kw">return this.zones;
   }

   class="kw">public int generate(int var1, int var2) {
      for (int var3 = 0; var3 < this.zones.length; var3++) {
         if (this.zones[var3].contains(var1, var2)) {
            class="kw">return this.zones[var3].color;
         }
      }

      class="kw">return -1;
   }

   class="kw">public Zone.UniqueCandidate[] getCandidates(Map<String, Zone> var1) {
      if (this.entries.length == 0) {
         class="kw">return Zone.UniqueCandidate.EMPTY_ARRAY;
      }

      Zone.UniqueCandidate[] var2 = new Zone.UniqueCandidate[this.entries.length];

      for (int var3 = 0; var3 < this.entries.length; var3++) {
         UniqueClimateGenerator.Entry var4 = this.entries[var3];
         Zone var5 = var1.get(var4.zone);
         if (var5 == null) {
            throw new Error("Could not find zone: " + var4.zone);
         }

         var2[var3] = new Zone.UniqueCandidate(new Zone.UniqueEntry(var5, var4.color, EMPTY_PARENTS, var4.radius, 0), EMPTY_POSITIONS);
      }

      class="kw">return var2;
   }

   class="kw">public UniqueClimateGenerator apply(
      int var1, @Nonnull Zone.UniqueCandidate[] var2, @Nonnull ClimateNoise var3, @Nonnull ClimateGraph var4, @Nonnull List<Zone.Unique> var5
   ) {
      if (var2.length != this.entries.length) {
         LogUtil.getLogger().at(Level.WARNING).log("Mismatched unique climate generator candidates: expected %d, got %d", this.entries.length, var2.length);
         class="kw">return this;
      }

      UniqueClimateGenerator.Unique[] var6 = new UniqueClimateGenerator.Unique[var2.length];
      Object2ObjectOpenHashMap var7 = new Object2ObjectOpenHashMap();

      for (int var8 = 0; var8 < 10 && var7.size() < var6.length; var8++) {
         for (int var9 = 0; var9 < this.entries.length; var9++) {
            if (var6[var9] == null) {
               UniqueClimateGenerator.Entry var10 = this.entries[var9];
               UniqueClimateGenerator.Unique var11 = (UniqueClimateGenerator.Unique)var7.get(var10.parent);
               if (var10.parent.isEmpty() || var11 != null) {
                  CompletableFuture var12 = findZonePosition(var1, DEFAULT_ORIGIN, var10, var11, var3, var4);
                  var6[var9] = new UniqueClimateGenerator.Unique(var10.color, var10.radius, var12);
                  var5.add(new Zone.Unique(var2[var9].zone().zone(), var12));
                  var7.put(var10.zone, var6[var9]);
               }
            }
         }
      }

      class="kw">return new UniqueClimateGenerator(this.entries, var6);
   }

   class="kw">public UniqueClimateGenerator apply(int var1, @Nonnull ClimateNoise var2, @Nonnull ClimateGraph var3) {
      UniqueClimateGenerator.Unique[] var4 = new UniqueClimateGenerator.Unique[this.entries.length];
      Object2ObjectOpenHashMap var5 = new Object2ObjectOpenHashMap();

      for (int var6 = 0; var6 < 10 && var5.size() < var4.length; var6++) {
         for (int var7 = 0; var7 < this.entries.length; var7++) {
            if (var4[var7] == null) {
               UniqueClimateGenerator.Entry var8 = this.entries[var7];
               UniqueClimateGenerator.Unique var9 = (UniqueClimateGenerator.Unique)var5.get(var8.parent);
               if (var8.parent.isEmpty() || var9 != null) {
                  CompletableFuture var10 = findZonePosition(var1, DEFAULT_ORIGIN, var8, var9, var2, var3);
                  var4[var7] = new UniqueClimateGenerator.Unique(var8.color, var8.radius, var10);
                  var5.put(var8.zone, var4[var7]);
               }
            }
         }
      }

      if (var5.size() < var4.length) {
         LogUtil.getLogger().at(Level.WARNING).log("Could not resolve all unique climate zones, resolved %d out of %d", var5.size(), var4.length);
         UniqueClimateGenerator.Entry[] var11 = new UniqueClimateGenerator.Entry[var5.size()];
         UniqueClimateGenerator.Unique[] var12 = new UniqueClimateGenerator.Unique[var5.size()];
         int var13 = 0;

         for (int var14 = 0; var14 < var4.length; var14++) {
            if (var4[var14] != null) {
               var11[var13] = this.entries[var14];
               var12[var13] = var4[var14];
               var13++;
            }
         }

         class="kw">return new UniqueClimateGenerator(var11, var12);
      } else {
         class="kw">return new UniqueClimateGenerator(this.entries, var4);
      }
   }

   class="kw">protected class="kw">static CompletableFuture<Vector2i> findZonePosition(
      int var0,
      Vector2i var1,
      @Nonnull UniqueClimateGenerator.Entry var2,
      @Nullable UniqueClimateGenerator.Unique var3,
      @Nonnull ClimateNoise var4,
      @Nonnull ClimateGraph var5
   ) {
      class="kw">return var3 != null
         ? var3.position.thenCompose(var4x -> findZonePosition(var0, var4x, var2, null, var4, var5))
         : ClimateSearch.search(var0, var1.x + var2.origin.x, var1.y + var2.origin.y, var2.minDistance, var2.maxDistance, var2.rule, var4, var5)
            .thenApply(var1x -> {
               LogUtil.getLogger().at(Level.INFO).log("Found location for unique zone '%s' -> %s", var2.zone, var1x.pretty());
               class="kw">return var1x.position();
            });
   }

   class="kw">public record Entry(
      @Nonnull String zone,
      @Nonnull String parent,
      int color,
      int radius,
      @Nonnull Vector2i origin,
      int minDistance,
      int maxDistance,
      @Nonnull ClimateSearch.Rule rule
   ) {
      class="kw">public class="kw">static class="kw">final UniqueClimateGenerator.Entry[] EMPTY_ARRAY = new UniqueClimateGenerator.Entry[0];
      class="kw">public class="kw">static class="kw">final String DEFAULT_PARENT = "";

      class="kw">public Entry {
      }
   }

   class="kw">public record Unique(int color, int radius, int radius2, @Nonnull CompletableFuture<Vector2i> position) {
      class="kw">public class="kw">static class="kw">final UniqueClimateGenerator.Unique[] EMPTY_ARRAY = new UniqueClimateGenerator.Unique[0];

      class="kw">public Unique(int var1, int var2, @Nonnull CompletableFuture<Vector2i> var3) {
         this(var1, var2, var2 * var2, var3);
      }

      class="kw">public Unique {
      }

      class="kw">public boolean contains(int var1, int var2) {
         Vector2i var3 = this.position.join();
         int var4 = var1 - var3.x;
         int var5 = var2 - var3.y;
         class="kw">return var4 >= -this.radius && var5 >= -this.radius && var4 <= this.radius && var5 <= this.radius && var4 * var4 + var5 * var5 <= this.radius2;
      }
   }
}