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;
}
}
}