RepulsionTicker class

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

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

extends: EntityTickingSystem<EntityStore>

implements: IVelocityModifyingSystem

Поля (28)

МодификаторыТипИмя
private final Set<Dependency<EntityStore>> dependencies
private final Query<EntityStore> query
private final ComponentType<EntityStore, Repulsion> repulsionComponentType
private final ResourceType<EntityStore, SpatialResource<Ref<EntityStore>, EntityStore>> spatialComponent
private final ComponentType<EntityStore, TransformComponent> transformComponentComponentType
TransformComponent var10
Vector3d var11
double var12
double var14
SpatialResource var16
List var17
TransformComponent var20
Vector3d var21
double var22
double var24
double var26
double var28
double var30
float var32
int var33
var33
double var34
Velocity var36
Vector3d var37
Repulsion var6
int var7
RepulsionConfig var8
float var9

Методы (10)

МодификаторыВозвратСигнатура
for for(Ref var19 : var17)
public Set<Dependency<EntityStore>> getDependenciespublic Set<Dependency<EntityStore>> getDependencies()
public SystemGroup<EntityStore> getGrouppublic SystemGroup<EntityStore> getGroup()
public Query<EntityStore> getQuerypublic Query<EntityStore> getQuery()
if if(var7 != -1)
if if(var8 != null)
if if(var20 != null)
if if(var32 < 0.0F)
if if(var36 != null)
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);
                        }
                     }
                  }
               }
            }
         }
      }
   }
}