SensorEntityBase class
Пакет: com.hypixel.hytale.server.npc.corecomponents.entity
Файл: com/hypixel/hytale/server/npc/corecomponents/entity/SensorEntityBase.java
extends: SensorWithEntityFilters
Поля (24)
| Модификаторы | Тип | Имя |
|---|---|---|
final |
HytaleLogger |
LOGGER |
|
Ref |
var10 |
|
Ref |
var11 |
|
Ref |
var5 |
|
NPCEntity |
var5 |
|
Ref |
var5 |
|
|
var5 |
|
TransformComponent |
var6 |
|
Player |
var6 |
|
boolean |
var6 |
|
Ref |
var6 |
|
|
var6 |
|
Vector3d |
var7 |
|
TransformComponent |
var7 |
|
boolean |
var7 |
|
Ref |
var7 |
|
DebugSupport |
var8 |
|
Vector3d |
var8 |
|
Ref |
var8 |
|
|
var8 |
|
|
var8 |
|
|
var8 |
|
Ref |
var9 |
|
double |
var9 |
Методы (26)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
protected |
boolean |
filterEntityboolean filterEntity(@Nonnull Ref<EntityStore> var1, @Nonnull Ref<EntityStore> var2, @Nonnull ExecutionSupport var3, @Nonnull Store<EntityStore> var4) |
protected |
boolean |
filterEntityWithRangeboolean filterEntityWithRange(@Nonnull Ref<EntityStore> var1, @Nonnull Ref<EntityStore> var2, @Nonnull Vector3d var3, @Nonnull ExecutionSupport var4, @Nonnull Store<EntityStore> var5) |
protected |
boolean |
filterPrioritisedEntityboolean filterPrioritisedEntity(@Nonnull Ref<EntityStore> var1,
@Nonnull Ref<EntityStore> var2,
@Nonnull ExecutionSupport var3,
@Nonnull Store<EntityStore> var4,
@Nonnull IEntityByPriorityFilter var5) |
protected |
boolean |
filterPrioritisedNPCboolean filterPrioritisedNPC(@Nonnull Ref<EntityStore> var1, @Nonnull Ref<EntityStore> var2, @Nonnull ExecutionSupport var3, @Nonnull Store<EntityStore> var4) |
protected |
boolean |
filterPrioritisedPlayerboolean filterPrioritisedPlayer(@Nonnull Ref<EntityStore> var1, @Nonnull Ref<EntityStore> var2, @Nonnull ExecutionSupport var3, @Nonnull Store<EntityStore> var4) |
|
|
if if(this.multiTarget) |
|
|
if if(this.ignoredTargetSlot == Integer.MIN_VALUE || this.ignoredTargetSlot != this.lockedTargetSlot) |
|
|
if if(var9 != null) |
|
|
if if(this.multiTarget && var10 != null) |
|
|
if if(this.onlyLockedTarget) |
|
|
if if(var11 == null) |
|
|
if if(this.multiTarget) |
|
|
if if(this.lockOnTarget) |
|
|
if if(var5 == null) |
|
|
if if(this.autoUnlockTarget) |
|
|
if if(var6 != null) |
|
|
if if(!var6) |
|
|
if if(var7) |
|
|
if if(this.multiTarget) |
|
|
if if(this.currentVisSensorColorIndex >= 0) |
|
|
if if(var6 == null) |
protected |
void |
initialisePrioritiservoid initialisePrioritiser() |
protected |
boolean |
isExcludingOwnTypeboolean isExcludingOwnType() |
abstract abstract |
boolean |
isGetNPCsboolean isGetNPCs() |
abstract abstract |
boolean |
isGetPlayersboolean isGetPlayers() |
private |
void |
recordEntityVisDatavoid recordEntityVisData(@Nonnull Ref<EntityStore> var1, @Nonnull ExecutionSupport var2, boolean var3) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.server.npc.corecomponents.entity;
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.logger.HytaleLogger;
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.damage.DeathComponent;
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.asset.builder.BuilderSupport;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.ComponentContext;
class="kw">import com.hypixel.hytale.server.npc.corecomponents.ISensorEntityCollector;
class="kw">import com.hypixel.hytale.server.npc.corecomponents.ISensorEntityPrioritiser;
class="kw">import com.hypixel.hytale.server.npc.corecomponents.SensorWithEntityFilters;
class="kw">import com.hypixel.hytale.server.npc.corecomponents.entity.builders.BuilderSensorEntityBase;
class="kw">import com.hypixel.hytale.server.npc.entities.NPCEntity;
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.DebugSupport;
class="kw">import com.hypixel.hytale.server.npc.sensorinfo.EntityPositionProvider;
class="kw">import com.hypixel.hytale.server.npc.sensorinfo.InfoProvider;
class="kw">import com.hypixel.hytale.server.npc.util.EntityDetectionUtil;
class="kw">import com.hypixel.hytale.server.npc.util.IEntityByPriorityFilter;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3d;
class="kw">public class="kw">abstract class SensorEntityBase class="kw">extends SensorWithEntityFilters {
class="kw">private class="kw">static class="kw">final HytaleLogger LOGGER = HytaleLogger.forEnclosingClass();
class="kw">protected class="kw">static class="kw">final ComponentType<EntityStore, TransformComponent> TRANSFORM_COMPONENT_TYPE = TransformComponent.getComponentType();
@Nullable
class="kw">protected class="kw">static class="kw">final ComponentType<EntityStore, NPCEntity> NPC_COMPONENT_TYPE = NPCEntity.getComponentType();
class="kw">protected class="kw">static class="kw">final ComponentType<EntityStore, Player> PLAYER_COMPONENT_TYPE = Player.getComponentType();
class="kw">protected class="kw">static class="kw">final ComponentType<EntityStore, DeathComponent> DEATH_COMPONENT_TYPE = DeathComponent.getComponentType();
class="kw">protected class="kw">final double range;
class="kw">protected class="kw">final double minRange;
class="kw">protected class="kw">final boolean useProjectedDistance;
class="kw">protected class="kw">final boolean lockOnTarget;
class="kw">protected class="kw">final boolean lockRebind;
class="kw">protected class="kw">final boolean multiTarget;
class="kw">protected class="kw">final boolean autoUnlockTarget;
class="kw">protected class="kw">final boolean onlyLockedTarget;
class="kw">protected class="kw">final int lockedTargetSlot;
class="kw">protected class="kw">final int ignoredTargetSlot;
class="kw">protected class="kw">final ISensorEntityPrioritiser prioritiser;
class="kw">protected IEntityByPriorityFilter npcPrioritiser;
class="kw">protected IEntityByPriorityFilter playerPrioritiser;
@Nullable
class="kw">protected class="kw">final ISensorEntityCollector collector;
class="kw">protected int ownRole;
class="kw">protected class="kw">final EntityPositionProvider positionProvider = new EntityPositionProvider();
class="kw">protected int currentVisSensorColorIndex = -1;
class="kw">protected class="kw">final float visViewAngle;
class="kw">protected class="kw">final boolean includeDead;
class="kw">public SensorEntityBase(@Nonnull BuilderSensorEntityBase var1, ISensorEntityPrioritiser var2, @Nonnull BuilderSupport var3) {
super(var1, var1.getFilters(var3, var2, ComponentContext.SensorEntity));
this.range = var1.getRange(var3);
this.minRange = var1.getMinRange(var3);
this.lockOnTarget = var1.isLockOnTarget(var3);
this.lockRebind = var1.isLockRebind(var3);
this.multiTarget = var1.isMultiTarget(var3);
this.autoUnlockTarget = var1.isAutoUnlockTarget(var3);
this.onlyLockedTarget = var1.isOnlyLockedTarget(var3);
this.useProjectedDistance = var1.isUseProjectedDistance(var3);
this.lockedTargetSlot = var1.getLockedTargetSlot(var3);
this.ignoredTargetSlot = var1.getIgnoredTargetSlot(var3);
this.prioritiser = var2;
this.collector = var1.getCollector(var3);
this.visViewAngle = this.findViewAngleFromFilters();
this.includeDead = this.hasDeathFilter();
this.positionProvider.setIncludeDead(this.includeDead);
}
@Override
class="kw">public boolean matches(@Nonnull Ref<EntityStore> var1, @Nonnull ExecutionSupport var2, double var3, @Nonnull Store<EntityStore> var5) {
if (!super.matches(var1, var2, var3, var5)) {
this.positionProvider.clear();
this.currentVisSensorColorIndex = -1;
class="kw">return false;
}
TransformComponent var6 = var5.getComponent(var1, TRANSFORM_COMPONENT_TYPE);
assert var6 != null;
Vector3d var7 = var6.getPosition();
this.ownRole = var2.getRoleIndex();
if (this.multiTarget) {
this.positionProvider.clearTargets();
}
DebugSupport var8 = var2.getDebugSupport();
if (var8.isVisSensorRanges()) {
this.currentVisSensorColorIndex = var8.recordSensorRange(this.range, this.minRange, this.visViewAngle);
} else {
this.currentVisSensorColorIndex = -1;
}
if (this.ignoredTargetSlot == Integer.MIN_VALUE || this.ignoredTargetSlot != this.lockedTargetSlot) {
Ref var9 = this.filterLockedEntity(var1, var7, var2, var5);
if (var9 != null) {
this.collector.init(var1, var2, var5);
if (!this.collector.terminateOnFirstMatch() || this.multiTarget) {
this.findPlayerOrEntity(var1, var7, var2, var5);
}
this.collector.cleanup();
Ref var10 = this.positionProvider.setTarget(var9, var5);
if (this.multiTarget && var10 != null) {
this.positionProvider.promotePrimary(var10);
}
class="kw">return var10 != null;
}
}
if (this.onlyLockedTarget) {
this.positionProvider.clear();
class="kw">return false;
}
this.collector.init(var1, var2, var5);
Ref var11 = this.findPlayerOrEntity(var1, var7, var2, var5);
this.collector.cleanup();
if (var11 == null) {
this.positionProvider.clear();
class="kw">return false;
}
this.positionProvider.setTarget(var11, var5);
if (this.multiTarget) {
this.positionProvider.promotePrimary(var11);
}
if (this.lockOnTarget) {
var2.getMarkedEntitySupport().setMarkedEntity(this.lockedTargetSlot, var11, this.lockRebind, var5);
}
class="kw">return true;
}
@Override
class="kw">public void done() {
this.positionProvider.clear();
}
@Override
class="kw">public InfoProvider getSensorInfo() {
class="kw">return this.positionProvider;
}
@Override
class="kw">public void registerWithSupport(@Nonnull ExecutionSupport var1) {
super.registerWithSupport(var1);
if (this.isGetPlayers()) {
var1.getPositionCache().requirePlayerDistanceSorted(this.range);
}
if (this.isGetNPCs()) {
var1.getPositionCache().requireEntityDistanceSorted(this.range);
}
this.prioritiser.registerWithSupport(var1);
this.collector.registerWithSupport(var1);
}
@Override
class="kw">public void motionControllerChanged(
@Nullable Ref<EntityStore> var1, @Nonnull NPCEntity var2, MotionController var3, @Nullable ComponentAccessor<EntityStore> var4
) {
super.motionControllerChanged(var1, var2, var3, var4);
this.prioritiser.motionControllerChanged(var1, var2, var3, var4);
this.collector.motionControllerChanged(var1, var2, var3, var4);
}
@Override
class="kw">public void loaded(ExecutionSupport var1) {
super.loaded(var1);
this.prioritiser.loaded(var1);
this.collector.loaded(var1);
}
@Override
class="kw">public void spawned(ExecutionSupport var1) {
super.spawned(var1);
this.prioritiser.spawned(var1);
this.collector.spawned(var1);
}
@Override
class="kw">public void unloaded(ExecutionSupport var1) {
super.unloaded(var1);
this.prioritiser.unloaded(var1);
this.collector.unloaded(var1);
}
@Override
class="kw">public void removed(ExecutionSupport var1) {
super.removed(var1);
this.prioritiser.removed(var1);
this.collector.removed(var1);
}
@Override
class="kw">public void teleported(ExecutionSupport var1, World var2, World var3) {
super.teleported(var1, var2, var3);
this.prioritiser.teleported(var1, var2, var3);
this.collector.teleported(var1, var2, var3);
}
class="kw">protected void initialisePrioritiser() {
this.npcPrioritiser = this.isGetNPCs() ? this.prioritiser.getNPCPrioritiser() : null;
this.playerPrioritiser = this.isGetPlayers() ? this.prioritiser.getPlayerPrioritiser() : null;
}
class="kw">protected class="kw">abstract boolean isGetPlayers();
class="kw">protected class="kw">abstract boolean isGetNPCs();
class="kw">protected boolean isExcludingOwnType() {
class="kw">return false;
}
@Nullable
class="kw">protected Ref<EntityStore> filterLockedEntity(
@Nonnull Ref<EntityStore> var1, @Nonnull Vector3d var2, @Nonnull ExecutionSupport var3, @Nonnull Store<EntityStore> var4
) {
Ref var5 = this.lockedTargetSlot >= 0 ? var3.getMarkedEntitySupport().getMarkedEntityRef(this.lockedTargetSlot) : null;
if (var5 == null) {
class="kw">return null;
}
if (this.filterEntityWithRange(var1, var5, var2, var3, var4)) {
class="kw">return var5;
}
if (this.autoUnlockTarget) {
var3.getMarkedEntitySupport().clearMarkedEntity(this.lockedTargetSlot);
}
class="kw">return null;
}
class="kw">protected boolean filterEntityWithRange(
@Nonnull Ref<EntityStore> var1, @Nonnull Ref<EntityStore> var2, @Nonnull Vector3d var3, @Nonnull ExecutionSupport var4, @Nonnull Store<EntityStore> var5
) {
Player var6 = var5.getComponent(var2, Player.getComponentType());
if (var6 != null) {
if (!this.isGetPlayers()) {
class="kw">return false;
}
if (!EntityDetectionUtil.isDetectableByNPCs(var2, var5, var6)) {
class="kw">return false;
}
} else {
if (!var5.getArchetype(var2).contains(NPC_COMPONENT_TYPE)) {
class="kw">return false;
}
if (!this.isGetNPCs()) {
class="kw">return false;
}
}
TransformComponent var7 = var5.getComponent(var2, TRANSFORM_COMPONENT_TYPE);
assert var7 != null;
Vector3d var8 = var7.getPosition();
double var9 = this.useProjectedDistance
? var4.getMotionContextSupport().getActiveMotionController().getSquaredDistance(var3, var8, true)
: var3.distanceSquared(var8);
class="kw">return !(var9 < this.minRange * this.minRange) && !(var9 > this.range * this.range) ? this.filterEntity(var1, var2, var4, var5) : false;
}
class="kw">protected boolean filterEntity(
@Nonnull Ref<EntityStore> var1, @Nonnull Ref<EntityStore> var2, @Nonnull ExecutionSupport var3, @Nonnull Store<EntityStore> var4
) {
if (!this.includeDead && var4.getArchetype(var2).contains(DEATH_COMPONENT_TYPE)) {
class="kw">return false;
}
NPCEntity var5 = var4.getComponent(var2, NPC_COMPONENT_TYPE);
class="kw">return this.isExcludingOwnType() && var5 != null && this.ownRole == var5.getRoleIndex() ? false : this.matchesFilters(var1, var2, var3, var4);
}
class="kw">protected boolean filterPrioritisedPlayer(
@Nonnull Ref<EntityStore> var1, @Nonnull Ref<EntityStore> var2, @Nonnull ExecutionSupport var3, @Nonnull Store<EntityStore> var4
) {
class="kw">return this.filterPrioritisedEntity(var1, var2, var3, var4, this.playerPrioritiser);
}
class="kw">protected boolean filterPrioritisedNPC(
@Nonnull Ref<EntityStore> var1, @Nonnull Ref<EntityStore> var2, @Nonnull ExecutionSupport var3, @Nonnull Store<EntityStore> var4
) {
class="kw">return this.filterPrioritisedEntity(var1, var2, var3, var4, this.npcPrioritiser);
}
class="kw">protected boolean filterPrioritisedEntity(
@Nonnull Ref<EntityStore> var1,
@Nonnull Ref<EntityStore> var2,
@Nonnull ExecutionSupport var3,
@Nonnull Store<EntityStore> var4,
@Nonnull IEntityByPriorityFilter var5
) {
boolean var6 = this.filterEntity(var1, var2, var3, var4);
if (!var6) {
this.collector.collectNonMatching(var2, var4);
this.recordEntityVisData(var2, var3, false);
class="kw">return false;
}
boolean var7 = var5.test(var1, var2, var4);
if (var7) {
this.collector.collectMatching(var1, var2, var4);
if (this.multiTarget) {
this.positionProvider.addTarget(var2, var4);
}
} else {
this.collector.collectNonMatching(var2, var4);
}
this.recordEntityVisData(var2, var3, var7);
class="kw">return this.collector.terminateOnFirstMatch() && !this.multiTarget && var7;
}
class="kw">private void recordEntityVisData(@Nonnull Ref<EntityStore> var1, @Nonnull ExecutionSupport var2, boolean var3) {
if (this.currentVisSensorColorIndex >= 0) {
var2.getDebugSupport().recordEntityCheck(var1, this.currentVisSensorColorIndex, var3);
}
}
@Nullable
class="kw">protected Ref<EntityStore> findPlayerOrEntity(
@Nonnull Ref<EntityStore> var1, @Nonnull Vector3d var2, @Nonnull ExecutionSupport var3, @Nonnull Store<EntityStore> var4
) {
Ref var5 = null;
Ref var6 = null;
Ref var7 = this.ignoredTargetSlot >= 0 ? var3.getMarkedEntitySupport().getMarkedEntityRef(this.ignoredTargetSlot) : null;
if (this.isGetPlayers()) {
this.playerPrioritiser.init(var3);
var3.getPositionCache()
.processPlayersInRange(
var1,
this.minRange,
this.range,
this.useProjectedDistance,
var7,
var3,
(var0, var1x, var2x, var3x) -> var0.filterPrioritisedPlayer(var3x, var1x, var2x, var3x.getStore()),
this,
var1,
var4
);
var5 = this.playerPrioritiser.getHighestPriorityTarget();
this.playerPrioritiser.cleanup();
}
if (this.isGetNPCs()) {
this.npcPrioritiser.init(var3);
var3.getPositionCache()
.processNPCsInRange(
var1,
this.minRange,
this.range,
this.useProjectedDistance,
var7,
var3,
(var0, var1x, var2x, var3x) -> var0.filterPrioritisedNPC(var3x, var1x, var2x, var3x.getStore()),
this,
var1,
var4
);
var6 = this.npcPrioritiser.getHighestPriorityTarget();
this.npcPrioritiser.cleanup();
}
Ref var8;
if (var6 == null) {
var8 = var5;
} else if (var5 == null) {
var8 = var6;
} else {
var8 = this.prioritiser.pickTarget(var1, var3, var2, var5, var6, this.useProjectedDistance, var4);
}
class="kw">return var8;
}
}