MapMarkerTracker class

Пакет: com.hypixel.hytale.server.core.universe.world.worldmap.markers

Файл: com/hypixel/hytale/server/core/universe/world/worldmap/markers/MapMarkerTracker.java

Поля (12)

МодификаторыТипИмя
final HytaleLogger LOGGER
MapMarker[] var13
String[] var15
MapMarker var2
double var3
Position var5
WorldMapManager var6
Position var6
Map var7
double var7
Map var8
MarkersCollectorImpl var9

Методы (13)

МодификаторыВозвратСигнатура
public void copyFromvoid copyFrom(@Nonnull MapMarkerTracker var1)
private boolean doesMarkerNeedNetworkUpdateboolean doesMarkerNeedNetworkUpdate(@Nullable MapMarker var1, MapMarker var2)
for for(String var14 : this.tempToRemove)
public Player getPlayerPlayer getPlayer()
public Predicate<PlayerRef> getPlayerMapFilterPredicate<PlayerRef> getPlayerMapFilter()
public Map<String, MapMarker> getSentMarkersMap<String, MapMarker> getSentMarkers()
if if(var1.transform != null && var1.transform.position != null)
if if(var1 == null)
private boolean isSendingSmallMovementsboolean isSendingSmallMovements()
private void resetSmallMovementTimervoid resetSmallMovementTimer()
public void sendMapMarkervoid sendMapMarker(MapMarker var1)
public void setPlayerMapFiltervoid setPlayerMapFilter(Predicate<PlayerRef> var1)
public void updatePointsOfInterestvoid updatePointsOfInterest(float var1, @Nonnull World var2, int var3, int var4, int var5)

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.server.core.universe.world.worldmap.markers;

class="kw">import com.google.common.flogger.StackSize;
class="kw">import com.hypixel.hytale.logger.HytaleLogger;
class="kw">import com.hypixel.hytale.protocol.Position;
class="kw">import com.hypixel.hytale.protocol.packets.worldmap.MapMarker;
class="kw">import com.hypixel.hytale.protocol.packets.worldmap.UpdateWorldMap;
class="kw">import com.hypixel.hytale.server.core.entity.entities.Player;
class="kw">import com.hypixel.hytale.server.core.universe.PlayerRef;
class="kw">import com.hypixel.hytale.server.core.universe.world.World;
class="kw">import com.hypixel.hytale.server.core.universe.world.WorldMapTracker;
class="kw">import com.hypixel.hytale.server.core.universe.world.worldmap.WorldMapManager;
class="kw">import java.util.HashSet;
class="kw">import java.util.Map;
class="kw">import java.util.Objects;
class="kw">import java.util.Set;
class="kw">import java.util.Map.Entry;
class="kw">import java.util.concurrent.ConcurrentHashMap;
class="kw">import java.util.function.Predicate;
class="kw">import java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3d;

class="kw">public class MapMarkerTracker {
   class="kw">private class="kw">static class="kw">final HytaleLogger LOGGER = HytaleLogger.forEnclosingClass();
   class="kw">private class="kw">final WorldMapTracker worldMapTracker;
   class="kw">private class="kw">final Player player;
   class="kw">private class="kw">final Map<String, MapMarker> sentToClientById = new ConcurrentHashMap<>();
   class="kw">public class="kw">static class="kw">final float SMALL_MOVEMENTS_UPDATE_INTERVAL = 10.0F;
   class="kw">private float smallMovementsTimer;
   class="kw">private Predicate<PlayerRef> playerMapFilter;
   @Nonnull
   class="kw">private class="kw">final Set<String> tempToRemove = new HashSet<>();
   @Nonnull
   class="kw">private class="kw">final Set<MapMarker> tempToAdd = new HashSet<>();
   @Nonnull
   class="kw">private class="kw">final Set<String> tempTestedMarkers = new HashSet<>();

   class="kw">public MapMarkerTracker(WorldMapTracker var1) {
      this.worldMapTracker = var1;
      this.player = var1.getPlayer();
   }

   class="kw">public Player getPlayer() {
      class="kw">return this.player;
   }

   class="kw">public Map<String, MapMarker> getSentMarkers() {
      class="kw">return this.sentToClientById;
   }

   class="kw">public Predicate<PlayerRef> getPlayerMapFilter() {
      class="kw">return this.playerMapFilter;
   }

   class="kw">public void setPlayerMapFilter(Predicate<PlayerRef> var1) {
      this.playerMapFilter = var1;
   }

   class="kw">private boolean isSendingSmallMovements() {
      class="kw">return this.smallMovementsTimer <= 0.0F;
   }

   class="kw">private void resetSmallMovementTimer() {
      this.smallMovementsTimer = 10.0F;
   }

   class="kw">public void updatePointsOfInterest(float var1, @Nonnull World var2, int var3, int var4, int var5) {
      if (this.worldMapTracker.getTransformComponent() != null) {
         this.smallMovementsTimer -= var1;
         WorldMapManager var6 = var2.getWorldMapManager();
         Map var7 = var6.getMarkerProviders();
         this.tempToAdd.clear();
         this.tempTestedMarkers.clear();
         Map var8 = var6.getMarkerOverridesView();
         MarkersCollectorImpl var9 = new MarkersCollectorImpl(this, var3, var4, var5, var8);

         for (WorldMapManager.MarkerProvider var11 : var7.values()) {
            var11.update(var2, this.player, var9);
         }

         if (this.isSendingSmallMovements()) {
            this.resetSmallMovementTimer();
         }

         this.tempToRemove.clear();
         this.tempToRemove.addAll(this.sentToClientById.keySet());
         if (!this.tempTestedMarkers.isEmpty()) {
            this.tempToRemove.removeAll(this.tempTestedMarkers);
         }

         for (String var14 : this.tempToRemove) {
            this.sentToClientById.remove(var14);
         }

         if (!this.tempToAdd.isEmpty() || !this.tempToRemove.isEmpty()) {
            MapMarker[] var13 = !this.tempToAdd.isEmpty() ? this.tempToAdd.toArray(MapMarker[]::new) : null;
            String[] var15 = !this.tempToRemove.isEmpty() ? this.tempToRemove.toArray(String[]::new) : null;
            this.player.getPlayerConnection().writeNoCache(new UpdateWorldMap(null, var13, var15));
         }
      }
   }

   class="kw">public void sendMapMarker(MapMarker var1) {
      if (var1.transform != null && var1.transform.position != null) {
         this.tempTestedMarkers.add(var1.id);
         MapMarker var2 = this.sentToClientById.get(var1.id);
         if (this.doesMarkerNeedNetworkUpdate(var2, var1)) {
            this.sentToClientById.put(var1.id, var1);
            this.tempToAdd.add(var1);
         }
      } else {
         ((HytaleLogger.Api)LOGGER.at(Level.WARNING).withStackTrace(StackSize.SMALL))
            .log("Refusing to send map marker '%s' with no Transform.position", var1.id);
      }
   }

   class="kw">private boolean doesMarkerNeedNetworkUpdate(@Nullable MapMarker var1, MapMarker var2) {
      if (var1 == null) {
         class="kw">return true;
      } else if (!Objects.equals(var1.name, var2.name)) {
         class="kw">return true;
      } else if (!Objects.equals(var1.markerImage, var2.markerImage)) {
         class="kw">return true;
      } else {
         double var3 = Math.abs(var1.transform.orientation.yaw - var2.transform.orientation.yaw);
         if (!(var3 > 0.05) && (!this.isSendingSmallMovements() || !(var3 > 0.001))) {
            Position var5 = var1.transform.position;
            Position var6 = var2.transform.position;
            double var7 = Vector3d.distanceSquared(var5.x, var5.y, var5.z, var6.x, var6.y, var6.z);
            class="kw">return var7 > 25.0 || this.isSendingSmallMovements() && var7 > 0.01;
         } else {
            class="kw">return true;
         }
      }
   }

   class="kw">public void copyFrom(@Nonnull MapMarkerTracker var1) {
      for (Entry var3 : var1.sentToClientById.entrySet()) {
         this.sentToClientById.put(var3.getKey(), new MapMarker(var3.getValue()));
      }
   }
}