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;
}
}
}