HeightNoiseFunction interface
Пакет: com.hypixel.hytale.server.worldgen.cache
Файл: com/hypixel/hytale/server/worldgen/cache/ChunkGeneratorCache.java
Методы (1)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
abstract |
double |
computedouble compute(InterpolatedBiomeCountList var1) |
Исходный код
Показать/скрыть
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);
}
}