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