SensorEntityPrioritiserAttitude class

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

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

implements: ISensorEntityPrioritiser

Поля (20)

МодификаторыТипИмя
final ComponentType<EntityStore, TransformComponent> TRANSFORM_COMPONENT_TYPE
private final int[] attitudeToPriority
private int highestPriorityIndex
private Ref<EntityStore> highestPriorityTarget
private WorldSupport support
int var10
MotionController var11
TransformComponent var12
TransformComponent var13
double var14
double var16
int var3
int var4
Attitude var4
Attitude var5
int var5
int var6
int var6
WorldSupport var8
int var9

Методы (10)

МодификаторыВозвратСигнатура
public AttitudePrioritiserpublic AttitudePrioritiser(int[] var1)
public void cleanuppublic void cleanup()
public Ref<EntityStore> getHighestPriorityTargetpublic Ref<EntityStore> getHighestPriorityTarget()
protected int getPriorityint getPriority(@Nonnull Ref<EntityStore> var1, @Nonnull WorldSupport var2, @Nonnull Ref<EntityStore> var3, @Nonnull Store<EntityStore> var4)
if if(var9 != var10)
if if(var6 == -1)
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)
while while(var3 < var4)

Исходный код

Показать/скрыть
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;
      }
   }
}