EntityTrackerUpdate class

Пакет: com.hypixel.hytale.server.core.modules.entity.repulsion

Файл: com/hypixel/hytale/server/core/modules/entity/repulsion/RepulsionSystems.java

extends: EntityTickingSystem<EntityStore>

Поля (6)

МодификаторыТипИмя
private final ComponentType<EntityStore, Repulsion> componentType
private final Query<EntityStore> query
RepulsionUpdate var3
EntityTrackerSystems.Visible var6
Repulsion var7
private final ComponentType<EntityStore, EntityTrackerSystems.Visible> visibleComponentType

Методы (5)

МодификаторыВозвратСигнатура
public SystemGroup<EntityStore> getGrouppublic SystemGroup<EntityStore> getGroup()
public Query<EntityStore> getQuerypublic Query<EntityStore> getQuery()
public boolean isParallelpublic boolean isParallel(int var1, int var2)
private static void queueUpdatesForprivate static void queueUpdatesFor(Ref<EntityStore> var0, @Nonnull Repulsion var1, @Nonnull Map<Ref<EntityStore>, EntityTrackerSystems.EntityViewer> var2)
public void tickpublic void tick(float var1, int var2, @Nonnull ArchetypeChunk<EntityStore> var3, @Nonnull Store<EntityStore> var4, @Nonnull CommandBuffer<EntityStore> var5)

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.server.core.modules.entity.repulsion;

class="kw">import com.hypixel.hytale.component.AddReason;
class="kw">import com.hypixel.hytale.component.ArchetypeChunk;
class="kw">import com.hypixel.hytale.component.CommandBuffer;
class="kw">import com.hypixel.hytale.component.ComponentType;
class="kw">import com.hypixel.hytale.component.Holder;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.component.RemoveReason;
class="kw">import com.hypixel.hytale.component.ResourceType;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.component.SystemGroup;
class="kw">import com.hypixel.hytale.component.dependency.Dependency;
class="kw">import com.hypixel.hytale.component.dependency.Order;
class="kw">import com.hypixel.hytale.component.dependency.OrderPriority;
class="kw">import com.hypixel.hytale.component.dependency.SystemDependency;
class="kw">import com.hypixel.hytale.component.query.Query;
class="kw">import com.hypixel.hytale.component.spatial.SpatialResource;
class="kw">import com.hypixel.hytale.component.system.HolderSystem;
class="kw">import com.hypixel.hytale.component.system.RefChangeSystem;
class="kw">import com.hypixel.hytale.component.system.tick.EntityTickingSystem;
class="kw">import com.hypixel.hytale.protocol.ChangeVelocityType;
class="kw">import com.hypixel.hytale.protocol.ComponentUpdateType;
class="kw">import com.hypixel.hytale.protocol.RepulsionUpdate;
class="kw">import com.hypixel.hytale.server.core.entity.entities.Player;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.TransformComponent;
class="kw">import com.hypixel.hytale.server.core.modules.entity.system.PlayerSpatialSystem;
class="kw">import com.hypixel.hytale.server.core.modules.entity.tracker.EntityTrackerSystems;
class="kw">import com.hypixel.hytale.server.core.modules.physics.component.Velocity;
class="kw">import com.hypixel.hytale.server.core.modules.physics.systems.IVelocityModifyingSystem;
class="kw">import com.hypixel.hytale.server.core.universe.world.World;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import it.unimi.dsi.fastutil.objects.ReferenceArrayList;
class="kw">import java.util.List;
class="kw">import java.util.Map;
class="kw">import java.util.Set;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3d;

class="kw">public class RepulsionSystems {
   class="kw">public RepulsionSystems() {
   }

   class="kw">public class="kw">static class EntityTrackerRemove class="kw">extends RefChangeSystem<EntityStore, Repulsion> {
      class="kw">private class="kw">final ComponentType<EntityStore, Repulsion> componentType;
      class="kw">private class="kw">final ComponentType<EntityStore, EntityTrackerSystems.Visible> visibleComponentType;
      @Nonnull
      class="kw">private class="kw">final Query<EntityStore> query;

      class="kw">public EntityTrackerRemove(ComponentType<EntityStore, EntityTrackerSystems.Visible> var1, ComponentType<EntityStore, Repulsion> var2) {
         this.visibleComponentType = var1;
         this.componentType = var2;
         this.query = Query.and(var1, var2);
      }

      @Nonnull
      @Override
      class="kw">public Query<EntityStore> getQuery() {
         class="kw">return this.query;
      }

      @Nonnull
      @Override
      class="kw">public ComponentType<EntityStore, Repulsion> componentType() {
         class="kw">return this.componentType;
      }

      class="kw">public void onComponentAdded(
         @Nonnull Ref<EntityStore> var1, @Nonnull Repulsion var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4
      ) {
      }

      class="kw">public void onComponentSet(
         @Nonnull Ref<EntityStore> var1, Repulsion var2, @Nonnull Repulsion var3, @Nonnull Store<EntityStore> var4, @Nonnull CommandBuffer<EntityStore> var5
      ) {
      }

      class="kw">public void onComponentRemoved(
         @Nonnull Ref<EntityStore> var1, @Nonnull Repulsion var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4
      ) {
         for (EntityTrackerSystems.EntityViewer var6 : var3.getComponent(var1, this.visibleComponentType).visibleTo.values()) {
            var6.queueRemove(var1, ComponentUpdateType.Repulsion);
         }
      }
   }

   class="kw">public class="kw">static class EntityTrackerUpdate class="kw">extends EntityTickingSystem<EntityStore> {
      class="kw">private class="kw">final ComponentType<EntityStore, EntityTrackerSystems.Visible> visibleComponentType;
      class="kw">private class="kw">final ComponentType<EntityStore, Repulsion> componentType;
      @Nonnull
      class="kw">private class="kw">final Query<EntityStore> query;

      class="kw">public EntityTrackerUpdate(ComponentType<EntityStore, EntityTrackerSystems.Visible> var1, ComponentType<EntityStore, Repulsion> var2) {
         this.visibleComponentType = var1;
         this.componentType = var2;
         this.query = Query.and(var1, var2);
      }

      @Nullable
      @Override
      class="kw">public SystemGroup<EntityStore> getGroup() {
         class="kw">return EntityTrackerSystems.QUEUE_UPDATE_GROUP;
      }

      @Nonnull
      @Override
      class="kw">public Query<EntityStore> getQuery() {
         class="kw">return this.query;
      }

      @Override
      class="kw">public boolean isParallel(int var1, int var2) {
         class="kw">return EntityTickingSystem.maybeUseParallel(var1, var2);
      }

      @Override
      class="kw">public void tick(
         float var1, int var2, @Nonnull ArchetypeChunk<EntityStore> var3, @Nonnull Store<EntityStore> var4, @Nonnull CommandBuffer<EntityStore> var5
      ) {
         EntityTrackerSystems.Visible var6 = var3.getComponent(var2, this.visibleComponentType);
         Repulsion var7 = var3.getComponent(var2, this.componentType);
         if (var7.consumeNetworkOutdated()) {
            queueUpdatesFor(var3.getReferenceTo(var2), var7, var6.visibleTo);
         } else if (!var6.newlyVisibleTo.isEmpty()) {
            queueUpdatesFor(var3.getReferenceTo(var2), var7, var6.newlyVisibleTo);
         }
      }

      class="kw">private class="kw">static void queueUpdatesFor(
         Ref<EntityStore> var0, @Nonnull Repulsion var1, @Nonnull Map<Ref<EntityStore>, EntityTrackerSystems.EntityViewer> var2
      ) {
         RepulsionUpdate var3 = new RepulsionUpdate(var1.getRepulsionConfigIndex());

         for (EntityTrackerSystems.EntityViewer var5 : var2.values()) {
            var5.queueUpdate(var0, var3);
         }
      }
   }

   class="kw">public class="kw">static class PlayerSetup class="kw">extends HolderSystem<EntityStore> {
      class="kw">private class="kw">final ComponentType<EntityStore, Repulsion> componentType;
      @Nonnull
      class="kw">private class="kw">final Query<EntityStore> query;

      class="kw">public PlayerSetup(ComponentType<EntityStore, Repulsion> var1, ComponentType<EntityStore, Player> var2) {
         this.componentType = var1;
         this.query = Query.and(var2);
      }

      @Nonnull
      @Override
      class="kw">public Query<EntityStore> getQuery() {
         class="kw">return this.query;
      }

      @Override
      class="kw">public void onEntityAdd(@Nonnull Holder<EntityStore> var1, @Nonnull AddReason var2, @Nonnull Store<EntityStore> var3) {
         World var4 = var3.getExternalData().getWorld();
         Repulsion var5 = var1.getComponent(this.componentType);
         int var6 = var4.getGameplayConfig().getPlayerConfig().getRepulsionConfigIndex();
         if (var6 == -1) {
            if (var5 != null && var5.isMigrated()) {
               var1.removeComponent(this.componentType);
            }
         } else {
            RepulsionConfig var7 = RepulsionConfig.getAssetMap().getAsset(var6);
            if (var7 != null) {
               if (var5 != null) {
                  if (var5.isMigrated()) {
                     var5.setRepulsionConfig(var7);
                  }
               } else {
                  var1.addComponent(this.componentType, new Repulsion(var7));
               }
            }
         }
      }

      @Override
      class="kw">public void onEntityRemoved(@Nonnull Holder<EntityStore> var1, @Nonnull RemoveReason var2, @Nonnull Store<EntityStore> var3) {
      }
   }

   class="kw">public class="kw">static class RepulsionTicker class="kw">extends EntityTickingSystem<EntityStore> class="kw">implements IVelocityModifyingSystem {
      class="kw">private class="kw">final ComponentType<EntityStore, Repulsion> repulsionComponentType;
      class="kw">private class="kw">final ComponentType<EntityStore, TransformComponent> transformComponentComponentType;
      @Nonnull
      class="kw">private class="kw">final Query<EntityStore> query;
      @Nonnull
      class="kw">private class="kw">final Set<Dependency<EntityStore>> dependencies;
      class="kw">private class="kw">final ResourceType<EntityStore, SpatialResource<Ref<EntityStore>, EntityStore>> spatialComponent;

      class="kw">public RepulsionTicker(
         ComponentType<EntityStore, Repulsion> var1,
         ComponentType<EntityStore, TransformComponent> var2,
         ResourceType<EntityStore, SpatialResource<Ref<EntityStore>, EntityStore>> var3
      ) {
         this.repulsionComponentType = var1;
         this.transformComponentComponentType = var2;
         this.query = Query.and(var1, var2);
         this.spatialComponent = var3;
         this.dependencies = Set.of(new SystemDependency<>(Order.AFTER, PlayerSpatialSystem.class, OrderPriority.CLOSEST));
      }

      @Nonnull
      @Override
      class="kw">public Set<Dependency<EntityStore>> getDependencies() {
         class="kw">return this.dependencies;
      }

      @Nullable
      @Override
      class="kw">public SystemGroup<EntityStore> getGroup() {
         class="kw">return EntityTrackerSystems.QUEUE_UPDATE_GROUP;
      }

      @Nonnull
      @Override
      class="kw">public Query<EntityStore> getQuery() {
         class="kw">return this.query;
      }

      @Override
      class="kw">public void tick(
         float var1, int var2, @Nonnull ArchetypeChunk<EntityStore> var3, @Nonnull Store<EntityStore> var4, @Nonnull CommandBuffer<EntityStore> var5
      ) {
         Repulsion var6 = var3.getComponent(var2, this.repulsionComponentType);
         assert var6 != null;
         int var7 = var6.getRepulsionConfigIndex();
         if (var7 != -1) {
            RepulsionConfig var8 = RepulsionConfig.getAssetMap().getAsset(var7);
            if (var8 != null) {
               float var9 = var8.radius;
               TransformComponent var10 = var3.getComponent(var2, this.transformComponentComponentType);
               assert var10 != null;
               Vector3d var11 = var10.getPosition();
               double var12 = var11.x;
               double var14 = var11.z;
               SpatialResource var16 = var4.getResource(this.spatialComponent);
               List var17 = new ReferenceArrayList();
               var16.getSpatialStructure().ordered(var11, var9, var17);

               for (Ref var19 : var17) {
                  TransformComponent var20 = var5.getComponent(var19, this.transformComponentComponentType);
                  if (var20 != null) {
                     Vector3d var21 = var20.getPosition();
                     double var22 = var21.x - var12;
                     double var24 = var21.z - var14;
                     double var26 = var22 * var22 + var24 * var24;
                     if (!(var26 < 0.01)) {
                        double var28 = Math.sqrt(var26);
                        double var30 = (var9 - var28) / var9;
                        float var32 = var8.maxForce;
                        int var33 = 1;
                        if (var32 < 0.0F) {
                           var33 = -1;
                           var32 *= var33;
                        }

                        double var34 = Math.max(var8.minForce, var32 * var30);
                        var34 *= var33;
                        Velocity var36 = var5.getComponent(var19, Velocity.getComponentType());
                        if (var36 != null) {
                           Vector3d var37 = new Vector3d((float)(var22 / var28 * var34), 0.0, (float)(var24 / var28 * var34));
                           var36.addInstruction(var37, null, ChangeVelocityType.Add);
                        }
                     }
                  }
               }
            }
         }
      }
   }
}