FadeMode enum
Пакет: com.hypixel.hytale.server.worldgen.climate
Файл: com/hypixel/hytale/server/worldgen/climate/ClimateGraph.java
Поля (1)
| Модификаторы | Тип | Имя |
|---|---|---|
|
PARENTS, |
CHILDREN |
Исходный код
Показать/скрыть
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() {
}
}
}