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