AttitudePrioritiser class

Пакет: com.hypixel.hytale.server.npc.corecomponents.entity.prioritisers

Файл: com/hypixel/hytale/server/npc/corecomponents/entity/prioritisers/SensorEntityPrioritiserAttitude.java

implements: IEntityByPriorityFilter

Поля (7)

МодификаторыТипИмя
private final int[] attitudeToPriority
private int highestPriorityIndex
private Ref<EntityStore> highestPriorityTarget
private WorldSupport support
Attitude var4
int var5
int var6

Методы (5)

МодификаторыВозвратСигнатура
public void cleanuppublic void cleanup()
public Ref<EntityStore> getHighestPriorityTargetpublic Ref<EntityStore> getHighestPriorityTarget()
if if(var6 != -1 && var6 < this.highestPriorityIndex)
public void initpublic void init(@Nonnull ExecutionSupport var1)
public boolean testpublic boolean test(@Nonnull Ref<EntityStore> var1, @Nonnull Ref<EntityStore> var2, @Nonnull ComponentAccessor<EntityStore> var3)

Исходный код

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

class="kw">import com.hypixel.hytale.component.ComponentAccessor;
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.server.core.asset.type.attitude.Attitude;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.TransformComponent;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.BuilderSupport;
class="kw">import com.hypixel.hytale.server.npc.corecomponents.IEntityFilter;
class="kw">import com.hypixel.hytale.server.npc.corecomponents.ISensorEntityPrioritiser;
class="kw">import com.hypixel.hytale.server.npc.corecomponents.entity.filters.EntityFilterAttitude;
class="kw">import com.hypixel.hytale.server.npc.corecomponents.entity.prioritisers.builders.BuilderSensorEntityPrioritiserAttitude;
class="kw">import com.hypixel.hytale.server.npc.instructions.ExecutionSupport;
class="kw">import com.hypixel.hytale.server.npc.movement.controllers.MotionController;
class="kw">import com.hypixel.hytale.server.npc.role.support.WorldSupport;
class="kw">import com.hypixel.hytale.server.npc.util.IEntityByPriorityFilter;
class="kw">import java.util.Arrays;
class="kw">import java.util.List;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3d;

class="kw">public class SensorEntityPrioritiserAttitude class="kw">implements ISensorEntityPrioritiser {
   class="kw">private class="kw">static class="kw">final ComponentType<EntityStore, TransformComponent> TRANSFORM_COMPONENT_TYPE = TransformComponent.getComponentType();
   class="kw">private class="kw">final Attitude[] attitudeByPriority;
   class="kw">private class="kw">final int[] attitudeToPriority;

   class="kw">public SensorEntityPrioritiserAttitude(@Nonnull BuilderSensorEntityPrioritiserAttitude var1, @Nonnull BuilderSupport var2) {
      this.attitudeByPriority = var1.getPrioritisedAttitudes(var2);
      this.attitudeToPriority = new int[Attitude.VALUES.length];
      Arrays.fill(this.attitudeToPriority, -1);
      int var3 = 0;
      int var4 = this.attitudeByPriority.length;

      while (var3 < var4) {
         this.attitudeToPriority[this.attitudeByPriority[var3].ordinal()] = var3++;
      }
   }

   @Override
   class="kw">public void registerWithSupport(@Nonnull ExecutionSupport var1) {
      var1.getWorldSupport().requireAttitudeCache();
   }

   @Nonnull
   @Override
   class="kw">public IEntityByPriorityFilter getNPCPrioritiser() {
      class="kw">return new SensorEntityPrioritiserAttitude.AttitudePrioritiser(this.attitudeToPriority);
   }

   @Nonnull
   @Override
   class="kw">public IEntityByPriorityFilter getPlayerPrioritiser() {
      class="kw">return new SensorEntityPrioritiserAttitude.AttitudePrioritiser(this.attitudeToPriority);
   }

   @Nonnull
   @Override
   class="kw">public Ref<EntityStore> pickTarget(
      @Nonnull Ref<EntityStore> var1,
      @Nonnull ExecutionSupport var2,
      @Nonnull Vector3d var3,
      @Nonnull Ref<EntityStore> var4,
      @Nonnull Ref<EntityStore> var5,
      boolean var6,
      @Nonnull Store<EntityStore> var7
   ) {
      WorldSupport var8 = var2.getWorldSupport();
      int var9 = this.getPriority(var1, var8, var4, var7);
      int var10 = this.getPriority(var1, var8, var5, var7);
      if (var9 != var10) {
         class="kw">return var9 <= var10 ? var4 : var5;
      }

      MotionController var11 = var2.getMotionContextSupport().getActiveMotionController();
      TransformComponent var12 = var7.getComponent(var4, TRANSFORM_COMPONENT_TYPE);
      assert var12 != null;
      TransformComponent var13 = var7.getComponent(var5, TRANSFORM_COMPONENT_TYPE);
      assert var13 != null;
      double var14 = var11.getSquaredDistance(var3, var12.getPosition(), var6);
      double var16 = var11.getSquaredDistance(var3, var13.getPosition(), var6);
      class="kw">return var14 <= var16 ? var4 : var5;
   }

   @Override
   class="kw">public boolean providesFilters() {
      class="kw">return true;
   }

   @Override
   class="kw">public void buildProvidedFilters(@Nonnull List<IEntityFilter> var1) {
      var1.add(new EntityFilterAttitude(this.attitudeByPriority));
   }

   class="kw">protected int getPriority(@Nonnull Ref<EntityStore> var1, @Nonnull WorldSupport var2, @Nonnull Ref<EntityStore> var3, @Nonnull Store<EntityStore> var4) {
      Attitude var5 = var2.getAttitude(var1, var3, var4);
      int var6 = this.attitudeToPriority[var5.ordinal()];
      if (var6 == -1) {
         throw new IllegalStateException(String.format("Attitude %s was not specified in the priority list but an NPC with that attitude was picked", var5));
      } else {
         class="kw">return var6;
      }
   }

   class="kw">public class="kw">static class AttitudePrioritiser class="kw">implements IEntityByPriorityFilter {
      class="kw">private class="kw">final int[] attitudeToPriority;
      @Nullable
      class="kw">private Ref<EntityStore> highestPriorityTarget;
      class="kw">private int highestPriorityIndex = Integer.MAX_VALUE;
      @Nullable
      class="kw">private WorldSupport support;

      class="kw">public AttitudePrioritiser(int[] var1) {
         this.attitudeToPriority = var1;
      }

      @Override
      class="kw">public void init(@Nonnull ExecutionSupport var1) {
         this.support = var1.getWorldSupport();
      }

      class="kw">public boolean test(@Nonnull Ref<EntityStore> var1, @Nonnull Ref<EntityStore> var2, @Nonnull ComponentAccessor<EntityStore> var3) {
         Attitude var4 = this.support.getAttitude(var1, var2, var3);
         int var5 = var4.ordinal();
         int var6 = this.attitudeToPriority[var5];
         if (var6 != -1 && var6 < this.highestPriorityIndex) {
            this.highestPriorityIndex = var6;
            this.highestPriorityTarget = var2;
         }

         class="kw">return this.highestPriorityIndex == 0;
      }

      @Nullable
      @Override
      class="kw">public Ref<EntityStore> getHighestPriorityTarget() {
         class="kw">return this.highestPriorityTarget;
      }

      @Override
      class="kw">public void cleanup() {
         this.support = null;
         this.highestPriorityTarget = null;
         this.highestPriorityIndex = Integer.MAX_VALUE;
      }
   }
}