AvoidanceSystem class

Пакет: com.hypixel.hytale.server.npc.systems

Файл: com/hypixel/hytale/server/npc/systems/AvoidanceSystem.java

extends: SteppableTickingSystem

Поля (16)

МодификаторыТипИмя
Ref var10
Vector3d var11
TransformComponent var12
Vector3d var13
World var14
Rotation3f var15
boolean var16
boolean var17
boolean var18
Vector3d var19
DebugSupport var20
boolean var21
Ref var6
NPCEntity var7
Role var8
MarkedEntitySupport var9

Методы (4)

МодификаторыВозвратСигнатура
if if(var8 != null)
if if(var16)
if if(var17)
if if(var21)

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.server.npc.systems;

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.Ref;
class="kw">import com.hypixel.hytale.component.Store;
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.SystemDependency;
class="kw">import com.hypixel.hytale.component.query.Query;
class="kw">import com.hypixel.hytale.component.system.tick.EntityTickingSystem;
class="kw">import com.hypixel.hytale.math.vector.Rotation3f;
class="kw">import com.hypixel.hytale.server.core.modules.debug.DebugUtils;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.TransformComponent;
class="kw">import com.hypixel.hytale.server.core.modules.physics.util.PhysicsMath;
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 com.hypixel.hytale.server.npc.entities.NPCEntity;
class="kw">import com.hypixel.hytale.server.npc.role.Role;
class="kw">import com.hypixel.hytale.server.npc.role.RoleDebugFlags;
class="kw">import com.hypixel.hytale.server.npc.role.support.DebugSupport;
class="kw">import com.hypixel.hytale.server.npc.role.support.MarkedEntitySupport;
class="kw">import com.hypixel.hytale.server.npc.util.VisHelper;
class="kw">import java.util.Set;
class="kw">import javax.annotation.Nonnull;
class="kw">import org.joml.Vector3d;

class="kw">public class AvoidanceSystem class="kw">extends SteppableTickingSystem {
   @Nonnull
   class="kw">private class="kw">final ComponentType<EntityStore, NPCEntity> componentType;
   @Nonnull
   class="kw">private class="kw">final ComponentType<EntityStore, TransformComponent> transformComponentType;
   @Nonnull
   class="kw">private class="kw">final Query<EntityStore> query;
   @Nonnull
   class="kw">private class="kw">final Set<Dependency<EntityStore>> dependencies = Set.of(new SystemDependency<>(Order.AFTER, RoleSystems.BehaviourTickSystem.class));

   class="kw">public AvoidanceSystem(@Nonnull ComponentType<EntityStore, NPCEntity> var1) {
      this.componentType = var1;
      this.transformComponentType = TransformComponent.getComponentType();
      this.query = Query.and(var1, this.transformComponentType);
   }

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

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

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

   @Override
   class="kw">public void steppedTick(
      float var1, int var2, @Nonnull ArchetypeChunk<EntityStore> var3, @Nonnull Store<EntityStore> var4, @Nonnull CommandBuffer<EntityStore> var5
   ) {
      Ref var6 = var3.getReferenceTo(var2);
      NPCEntity var7 = var3.getComponent(var2, this.componentType);
      assert var7 != null;
      Role var8 = var7.getRole();
      if (var8 != null) {
         if (var8.isAvoidingEntities() || var8.isApplySeparation()) {
            MarkedEntitySupport var9 = var3.getComponent(var2, MarkedEntitySupport.getComponentType());
            assert var9 != null;
            Ref var10 = var9.getTargetReferenceToIgnoreForAvoidance();
            if (var10 != null && var10.isValid()) {
               var8.getIgnoredEntitiesForAvoidance().add(var10);
            }
         }

         DebugSupport var20 = var3.getComponent(var2, DebugSupport.getComponentType());
         assert var20 != null;
         boolean var21 = var20.isDebugFlagSet(RoleDebugFlags.VisSteeringPre);
         Vector3d var11 = var21 ? new Vector3d(var8.getBodySteering().getTranslation()) : null;
         if (!var8.getActiveMotionController().isObstructed()) {
            TransformComponent var12 = var3.getComponent(var2, this.transformComponentType);
            assert var12 != null;
            Vector3d var13 = var12.getPosition();
            World var14 = var5.getExternalData().getWorld();
            Rotation3f var15 = var12.getRotation();
            boolean var16 = var20.isDebugFlagSet(RoleDebugFlags.VisAvoidance);
            boolean var17 = var20.isDebugFlagSet(RoleDebugFlags.VisSeparation);
            boolean var18 = var20.isDebugFlagSet(RoleDebugFlags.VisOrientation) && (var16 || var17);
            if (var8.isAvoidingEntities()) {
               var8.blendAvoidance(var6, var13, var15, var8.getBodySteering(), var5);
               if (var16) {
                  VisHelper.renderDebugVector(var13, var8.getLastAvoidanceSteering(), VisHelper.DEBUG_COLOR_AVOIDANCE, var14);
               }
            }

            if (var8.isApplySeparation()) {
               var8.blendSeparation(var6, var13, var15, var8.getBodySteering(), this.transformComponentType, var5);
               if (var17) {
                  VisHelper.renderDebugVector(var13, var8.getLastSeparationSteering(), VisHelper.DEBUG_COLOR_SEPARATION, var14);
               }
            }

            if (var18 && var8.getBodySteering().hasDirectionHint()) {
               Vector3d var19 = new Vector3d();
               PhysicsMath.vectorFromAngles(var8.getBodySteering().getDirectionHint().yaw(), var8.getBodySteering().getDirectionHint().pitch(), var19);
               var19.mul(0.25);
               VisHelper.renderDebugVector(var13, var19, DebugUtils.COLOR_CYAN, var14);
            }

            if (var21) {
               VisHelper.renderDebugVectorTo(var13, var11, VisHelper.DEBUG_COLOR_STEERING_PRE, var14);
            }

            if (var20.isDebugFlagSet(RoleDebugFlags.VisSteeringPost)) {
               VisHelper.renderDebugVector(var13, var8.getBodySteering().getTranslation(), VisHelper.DEBUG_COLOR_STEERING_POST, var14);
            }
         }
      }
   }
}