BiomeCountFunction interface

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

Файл: com/hypixel/hytale/server/worldgen/cache/ChunkGeneratorCache.java

Методы (1)

МодификаторыВозвратСигнатура
abstract void computevoid compute(int var1, int var2, int var3, InterpolatedBiomeCountList var4)

Исходный код

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

class="kw">import com.hypixel.hytale.math.util.ChunkUtil;
class="kw">import com.hypixel.hytale.server.worldgen.chunk.ChunkGenerator;
class="kw">import com.hypixel.hytale.server.worldgen.chunk.ZoneBiomeResult;
class="kw">import com.hypixel.hytale.server.worldgen.util.ObjectPool;
class="kw">import com.hypixel.hytale.server.worldgen.util.cache.ConcurrentSizedTimeoutCache;
class="kw">import java.util.concurrent.TimeUnit;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;

class="kw">public class ChunkGeneratorCache {
   class="kw">private class="kw">static class="kw">final int CONCURRENCY_LEVEL = Math.max(1, ChunkGenerator.POOL_SIZE / 2);
   class="kw">private class="kw">final ChunkGeneratorCache.ZoneBiomeResultFunction zoneBiomeResultFunction;
   class="kw">private class="kw">final ChunkGeneratorCache.BiomeCountFunction biomeCountFunction;
   class="kw">private class="kw">final ChunkGeneratorCache.HeightFunction heightFunction;
   class="kw">private class="kw">final ChunkGeneratorCache.HeightNoiseFunction heightNoiseFunction;
   class="kw">private class="kw">final ObjectPool<CoordinateCache.CoordinateKey> keyPool;
   class="kw">private class="kw">final ConcurrentSizedTimeoutCache<CoordinateCache.CoordinateKey, CoreDataCacheEntry> cache;

   class="kw">public ChunkGeneratorCache(
      ChunkGeneratorCache.ZoneBiomeResultFunction var1,
      ChunkGeneratorCache.BiomeCountFunction var2,
      ChunkGeneratorCache.HeightFunction var3,
      ChunkGeneratorCache.HeightNoiseFunction var4,
      int var5,
      long var6
   ) {
      this.zoneBiomeResultFunction = var1;
      this.biomeCountFunction = var2;
      this.heightFunction = var3;
      this.heightNoiseFunction = var4;
      this.keyPool = new ObjectPool<>(var5, CoordinateCache.CoordinateKey::new);
      this.cache = new ConcurrentSizedTimeoutCache<>(var5, CONCURRENCY_LEVEL, var6, TimeUnit.SECONDS, this::computeKey, this::computeValue, this::destroyEntry);
   }

   @Nonnull
   class="kw">public CoreDataCacheEntry get(int var1, int var2, int var3) {
      class="kw">return this.cache.get(localKey().setLocation(var1, var2, var3));
   }

   class="kw">public ZoneBiomeResult getZoneBiomeResult(int var1, int var2, int var3) {
      class="kw">return this.get(var1, var2, var3).zoneBiomeResult;
   }

   @Nullable
   class="kw">public InterpolatedBiomeCountList getBiomeCountResult(int var1, int var2, int var3) {
      CoreDataCacheEntry var4 = this.get(var1, var2, var3);
      this.ensureBiomeCountList(var1, var2, var3, var4);
      class="kw">return var4.biomeCountList;
   }

   class="kw">public void putHeight(int var1, int var2, int var3, int var4) {
      this.get(var1, var2, var3).height = var4;
   }

   class="kw">public int getHeight(int var1, int var2, int var3) {
      CoreDataCacheEntry var4 = this.get(var1, var2, var3);
      this.ensureHeight(var1, var2, var3, var4);
      class="kw">return var4.height;
   }

   class="kw">public void ensureBiomeCountList(int var1, int var2, int var3, @Nonnull CoreDataCacheEntry var4) {
      if (var4.biomeCountList == null) {
         InterpolatedBiomeCountList var5 = new InterpolatedBiomeCountList();
         this.biomeCountFunction.compute(var1, var2, var3, var5);
         var4.biomeCountList = var5;
      }
   }

   class="kw">public void ensureHeight(int var1, int var2, int var3, @Nonnull CoreDataCacheEntry var4) {
      if (var4.height == -1) {
         var4.height = this.heightFunction.compute(var1, var2, var3);
      }
   }

   class="kw">public void ensureHeightNoise(int var1, int var2, int var3, @Nonnull CoreDataCacheEntry var4) {
      if (var4.heightNoise == Double.NEGATIVE_INFINITY) {
         this.ensureBiomeCountList(var1, var2, var3, var4);
         var4.heightNoise = this.heightNoiseFunction.compute(var4.biomeCountList);
      }
   }

   @Nonnull
   class="kw">protected class="kw">final CoordinateCache.CoordinateKey computeKey(CoordinateCache.CoordinateKey var1) {
      class="kw">return this.keyPool.apply(var1);
   }

   @Nonnull
   class="kw">protected class="kw">final CoreDataCacheEntry computeValue(@Nonnull CoordinateCache.CoordinateKey var1) {
      int var2 = var1.seed();
      long var3 = var1.coord();
      int var5 = ChunkUtil.xOfChunkIndex(var3);
      int var6 = ChunkUtil.zOfChunkIndex(var3);
      class="kw">return new CoreDataCacheEntry(this.zoneBiomeResultFunction.compute(var2, var5, var6));
   }

   class="kw">protected class="kw">final void destroyEntry(CoordinateCache.CoordinateKey var1, CoreDataCacheEntry var2) {
      this.keyPool.recycle(var1);
   }

   @Nonnull
   class="kw">protected class="kw">static CoordinateCache.CoordinateKey localKey() {
      class="kw">return ChunkGenerator.getResource().cacheCoordinateKey;
   }

   @FunctionalInterface
   class="kw">public class="kw">interface BiomeCountFunction {
      void compute(int var1, int var2, int var3, InterpolatedBiomeCountList var4);
   }

   @FunctionalInterface
   class="kw">public class="kw">interface HeightFunction {
      int compute(int var1, int var2, int var3);
   }

   @FunctionalInterface
   class="kw">public class="kw">interface HeightNoiseFunction {
      double compute(InterpolatedBiomeCountList var1);
   }

   @FunctionalInterface
   class="kw">public class="kw">interface ZoneBiomeResultFunction {
      ZoneBiomeResult compute(int var1, int var2, int var3);
   }
}