Collector class
Пакет: com.hypixel.hytale.server.core.universe.world.worldmap.markers
Файл: com/hypixel/hytale/server/core/universe/world/worldmap/markers/DiscoverableMapMarkers.java
implements: TriIntObjectConsumer<BlockMapMarkersResource.BlockMapMarkerData>, AutoCloseable
Поля (20)
| Модификаторы | Тип | Имя |
|---|---|---|
|
private static final ThreadLocal<DiscoverableMapMarkers.Collector> |
LOCAL |
|
protected Collection<String> |
collection |
|
protected final ObjectSet<String> |
collectionResource |
|
protected double |
dirX |
|
protected double |
dirY |
|
protected double |
dirZ |
|
protected double |
eyeX |
|
protected double |
eyeY |
|
protected double |
eyeZ |
|
protected boolean |
inUse |
|
protected boolean |
includeRevealed |
|
protected double |
maxDistanceSq |
|
protected double |
minCosine |
|
protected PlayerWorldData |
playerWorldData |
|
double |
var10 |
|
DiscoverableMapMarkers.Collector |
var10 |
|
String |
var5 |
|
double |
var6 |
|
double |
var8 |
|
protected TriIntObjectConsumer<String> |
visitor |
Методы (7)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
abstract |
throw new |
IllegalStateExceptionthrow new IllegalStateException("A marker view cone traversal is already running on this thread and cannot be nested") |
|
public void |
acceptpublic void accept(int var1, int var2, int var3, @Nonnull BlockMapMarkersResource.BlockMapMarkerData var4) |
|
public static DiscoverableMapMarkers.Collector |
acquirepublic static DiscoverableMapMarkers.Collector acquire(boolean var0,
double var1,
double var3,
@Nonnull Vector3dc var5,
@Nonnull Vector3dc var6,
@Nonnull PlayerWorldData var7,
@Nullable Collection<String> var8,
@Nullable TriIntObjectConsumer<String> var9) |
|
public void |
closepublic void close() |
|
|
if if(this.collection != null) |
|
|
if if(this.visitor != null) |
|
|
if if(var10.inUse) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.server.core.universe.world.worldmap.markers;
class="kw">import com.hypixel.hytale.component.ComponentAccessor;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.function.consumer.TriIntObjectConsumer;
class="kw">import com.hypixel.hytale.math.vector.Transform;
class="kw">import com.hypixel.hytale.server.core.entity.entities.Player;
class="kw">import com.hypixel.hytale.server.core.entity.entities.player.data.PlayerWorldData;
class="kw">import com.hypixel.hytale.server.core.universe.world.World;
class="kw">import com.hypixel.hytale.server.core.universe.world.meta.state.BlockMapMarkersResource;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import com.hypixel.hytale.server.core.util.TargetUtil;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectSet;
class="kw">import java.util.Collection;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3d;
class="kw">import org.joml.Vector3dc;
class="kw">public class="kw">final class DiscoverableMapMarkers {
class="kw">private DiscoverableMapMarkers() {
}
class="kw">public class="kw">static boolean isRevealed(@Nonnull Player var0, @Nonnull String var1) {
PlayerWorldData var2 = getPerWorldData(var0);
class="kw">return var2 != null && var2.isMarkerRevealed(var1);
}
class="kw">public class="kw">static boolean reveal(@Nonnull Player var0, @Nonnull String var1) {
PlayerWorldData var2 = getPerWorldData(var0);
class="kw">return var2 != null && var2.revealMarker(var1);
}
class="kw">public class="kw">static boolean hide(@Nonnull Player var0, @Nonnull String var1) {
PlayerWorldData var2 = getPerWorldData(var0);
class="kw">return var2 != null && var2.hideMarker(var1);
}
class="kw">public class="kw">static void collectMarkersInView(
@Nonnull Player var0, @Nonnull ComponentAccessor<EntityStore> var1, float var2, double var3, boolean var5, @Nonnull Collection<String> var6
) {
traverseMarkersInView(var0, var1, var2, var3, var5, var6, null);
}
class="kw">public class="kw">static void forEachMarkerInView(
@Nonnull Player var0, @Nonnull ComponentAccessor<EntityStore> var1, float var2, double var3, boolean var5, @Nonnull TriIntObjectConsumer<String> var6
) {
traverseMarkersInView(var0, var1, var2, var3, var5, null, var6);
}
class="kw">private class="kw">static void traverseMarkersInView(
@Nonnull Player var0,
@Nonnull ComponentAccessor<EntityStore> var1,
float var2,
double var3,
boolean var5,
@Nullable Collection<String> var6,
@Nullable TriIntObjectConsumer<String> var7
) {
checkViewCone(var2, var3);
World var8 = var0.getWorld();
if (var8 != null) {
Ref var9 = var0.getReference();
if (var9 != null && var9.isValid()) {
Transform var10 = TargetUtil.getLook(var9, var1);
Vector3d var11 = var10.getPosition();
Vector3d var12 = var10.getDirection();
double var13 = Math.cos(Math.toRadians(var2 * 0.5));
PlayerWorldData var15 = var0.getPlayerConfigData().getPerWorldData(var8.getName());
try (DiscoverableMapMarkers.Collector var16 = DiscoverableMapMarkers.Collector.acquire(var5, var3, var13, var11, var12, var15, var6, var7)) {
BlockMapMarkersResource.of(var8).getMarkers().forEach(var16);
}
}
}
}
@Nonnull
class="kw">public class="kw">static ObjectSet<String> getThreadLocalMarkerIdSet() {
DiscoverableMapMarkers.Collector var0 = DiscoverableMapMarkers.Collector.LOCAL.get();
if (var0.inUse) {
throw new IllegalStateException("A marker view cone traversal is running on this thread, so its marker ID set cannot be cleared");
}
var0.collectionResource.clear();
class="kw">return var0.collectionResource;
}
class="kw">static void checkViewCone(float var0, double var1) {
if (!Float.isFinite(var0) || var0 <= 0.0F || var0 > 360.0F) {
throw new IllegalArgumentException("Field of view must be >0 and <=360 degrees but was given " + var0);
} else if (!Double.isFinite(var1) || var1 <= 0.0) {
throw new IllegalArgumentException("Max distance must be finite and >0 but was given " + var1);
}
}
class="kw">static boolean isInViewCone(double var0, double var2, double var4, double var6, double var8, double var10, double var12, double var14) {
double var16 = var0 * var0 + var2 * var2 + var4 * var4;
if (var16 > var14) {
class="kw">return false;
}
double var18 = var0 * var6 + var2 * var8 + var4 * var10;
class="kw">return var12 >= 0.0 ? var18 >= 0.0 && var18 * var18 >= var12 * var12 * var16 : var18 >= 0.0 || var18 * var18 <= var12 * var12 * var16;
}
@Nullable
class="kw">private class="kw">static PlayerWorldData getPerWorldData(@Nonnull Player var0) {
World var1 = var0.getWorld();
class="kw">return var1 == null ? null : var0.getPlayerConfigData().getPerWorldData(var1.getName());
}
class="kw">static class Collector class="kw">implements TriIntObjectConsumer<BlockMapMarkersResource.BlockMapMarkerData>, AutoCloseable {
class="kw">private class="kw">static class="kw">final ThreadLocal<DiscoverableMapMarkers.Collector> LOCAL = ThreadLocal.withInitial(DiscoverableMapMarkers.Collector::new);
class="kw">protected boolean inUse;
class="kw">protected double minCosine;
class="kw">protected double maxDistanceSq;
class="kw">protected boolean includeRevealed;
class="kw">protected double eyeX;
class="kw">protected double eyeY;
class="kw">protected double eyeZ;
class="kw">protected double dirX;
class="kw">protected double dirY;
class="kw">protected double dirZ;
@Nullable
class="kw">protected PlayerWorldData playerWorldData;
@Nullable
class="kw">protected Collection<String> collection;
@Nullable
class="kw">protected TriIntObjectConsumer<String> visitor;
@Nonnull
class="kw">protected class="kw">final ObjectSet<String> collectionResource = new ObjectOpenHashSet();
Collector() {
}
class="kw">public void accept(int var1, int var2, int var3, @Nonnull BlockMapMarkersResource.BlockMapMarkerData var4) {
assert this.playerWorldData != null : "Collector not initialized";
String var5 = var4.getMarkerId();
if (var4.isDiscoverable() && var5 != null) {
if (this.includeRevealed || !this.playerWorldData.isMarkerRevealed(var5)) {
double var6 = var1 + 0.5 - this.eyeX;
double var8 = var2 + 0.5 - this.eyeY;
double var10 = var3 + 0.5 - this.eyeZ;
if (DiscoverableMapMarkers.isInViewCone(var6, var8, var10, this.dirX, this.dirY, this.dirZ, this.minCosine, this.maxDistanceSq)) {
if (this.collection != null) {
this.collection.add(var5);
}
if (this.visitor != null) {
this.visitor.accept(var1, var2, var3, var5);
}
}
}
}
}
@Override
class="kw">public void close() {
this.inUse = false;
this.playerWorldData = null;
this.collection = null;
this.visitor = null;
}
class="kw">public class="kw">static DiscoverableMapMarkers.Collector acquire(
boolean var0,
double var1,
double var3,
@Nonnull Vector3dc var5,
@Nonnull Vector3dc var6,
@Nonnull PlayerWorldData var7,
@Nullable Collection<String> var8,
@Nullable TriIntObjectConsumer<String> var9
) {
assert var8 != null || var9 != null : "Collector has no sink to report a marker to";
DiscoverableMapMarkers.Collector var10 = LOCAL.get();
if (var10.inUse) {
throw new IllegalStateException("A marker view cone traversal is already running on this thread and cannot be nested");
}
var10.inUse = true;
var10.includeRevealed = var0;
var10.maxDistanceSq = var1 * var1;
var10.minCosine = var3;
var10.eyeX = var5.x();
var10.eyeY = var5.y();
var10.eyeZ = var5.z();
var10.dirX = var6.x();
var10.dirY = var6.y();
var10.dirZ = var6.z();
var10.playerWorldData = var7;
var10.collection = var8;
var10.visitor = var9;
class="kw">return var10;
}
}
}