SensorSearchRay class

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

Файл: com/hypixel/hytale/server/npc/corecomponents/world/SensorSearchRay.java

extends: SensorBase

Поля (15)

МодификаторыТипИмя
final int id
Vector3d var10
ChunkStore var11
long var12
Vector3d var13
Ref var14
BlockChunk var15
BlockSection var16
RayBlockHitTest var17
boolean var18
double var3
TransformComponent var6
HeadRotation var7
Vector3d var8
Rotation3f var9

Методы (3)

МодификаторыВозвратСигнатура
if if(var15 != null)
if if(var18)
abstract super super(var1)

Исходный код

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

class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.math.util.ChunkUtil;
class="kw">import com.hypixel.hytale.math.util.MathUtil;
class="kw">import com.hypixel.hytale.math.vector.Rotation3f;
class="kw">import com.hypixel.hytale.math.vector.Vector3dUtil;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.HeadRotation;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.TransformComponent;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.BlockChunk;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.section.BlockSection;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.ChunkStore;
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.SensorBase;
class="kw">import com.hypixel.hytale.server.npc.corecomponents.world.builders.BuilderSensorSearchRay;
class="kw">import com.hypixel.hytale.server.npc.instructions.ExecutionSupport;
class="kw">import com.hypixel.hytale.server.npc.sensorinfo.InfoProvider;
class="kw">import com.hypixel.hytale.server.npc.sensorinfo.PositionProvider;
class="kw">import com.hypixel.hytale.server.npc.util.RayBlockHitTest;
class="kw">import javax.annotation.Nonnull;
class="kw">import org.joml.Vector3d;

class="kw">public class SensorSearchRay class="kw">extends SensorBase {
   class="kw">protected class="kw">final int id;
   class="kw">protected class="kw">final float angle;
   class="kw">protected class="kw">final double range;
   class="kw">protected class="kw">final int blockSet;
   class="kw">protected class="kw">final float minRetestAngle;
   class="kw">protected class="kw">final double minRetestMoveSquared;
   class="kw">protected class="kw">final double throttleTime;
   class="kw">protected class="kw">final PositionProvider positionProvider = new PositionProvider();
   class="kw">protected class="kw">final Vector3d lastCheckedPosition = new Vector3d(Vector3dUtil.MIN);
   class="kw">protected float lastCheckedYaw = Float.MAX_VALUE;
   class="kw">protected short lastBlockRevision;
   class="kw">protected double throttleTimeRemaining;

   class="kw">public SensorSearchRay(@Nonnull BuilderSensorSearchRay var1, @Nonnull BuilderSupport var2) {
      super(var1);
      this.id = var1.getId(var2);
      this.angle = -var1.getAngle(var2);
      this.range = var1.getRange(var2);
      this.blockSet = var1.getBlockSet(var2);
      this.minRetestAngle = var1.getMinRetestAngle(var2);
      double var3 = var1.getMinRetestMove(var2);
      this.minRetestMoveSquared = var3 * var3;
      this.throttleTime = var1.getThrottleTime(var2);
   }

   @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();
         class="kw">return false;
      }

      TransformComponent var6 = var5.getComponent(var1, TransformComponent.getComponentType());
      assert var6 != null;
      HeadRotation var7 = var5.getComponent(var1, HeadRotation.getComponentType());
      assert var7 != null;
      Vector3d var8 = var6.getPosition();
      Rotation3f var9 = var7.getRotation();
      Vector3d var10 = var2.getWorldSupport().getCachedSearchRayPosition(this.id);
      if (!var10.equals(Vector3dUtil.MIN)) {
         ChunkStore var11 = var5.getExternalData().getWorld().getChunkStore();
         long var12 = ChunkUtil.indexChunkFromBlock(var10.x, var10.z);
         Ref var14 = var11.getChunkReference(var12);
         BlockChunk var15 = var14 != null && var14.isValid() ? var11.getStore().getComponent(var14, BlockChunk.getComponentType()) : null;
         if (var15 != null) {
            BlockSection var16 = var15.getSectionAtBlockY(MathUtil.floor(var10.y));
            if (var16.getLocalChangeCounter() == this.lastBlockRevision) {
               this.positionProvider.setTarget(var10);
               class="kw">return true;
            }

            var10.set(Vector3dUtil.MIN);
            this.positionProvider.clear();
         }
      } else if ((this.throttleTimeRemaining -= var3) > 0.0
         && Math.abs(var9.yaw() - this.lastCheckedYaw) <= this.minRetestAngle
         && var8.distanceSquared(this.lastCheckedPosition) <= this.minRetestMoveSquared) {
         this.positionProvider.clear();
         class="kw">return false;
      }

      RayBlockHitTest var17 = RayBlockHitTest.THREAD_LOCAL.get();
      if (!var17.init(var1, this.blockSet, this.angle, var5)) {
         var10.set(Vector3dUtil.MIN);
         this.positionProvider.clear();
         var17.clear();
         class="kw">return false;
      }

      this.lastCheckedPosition.set(var8);
      this.lastCheckedYaw = var9.yaw();
      this.throttleTimeRemaining = this.throttleTime;
      boolean var18 = var17.run(this.range);
      if (var18) {
         this.lastBlockRevision = var17.getLastBlockRevision();
         Vector3d var13 = var17.getHitPosition();
         var10.set(var13.x + 0.5, var13.y + 0.5, var13.z + 0.5);
         this.positionProvider.setTarget(var10);
      } else {
         var10.set(Vector3dUtil.MIN);
         this.positionProvider.clear();
      }

      var17.clear();
      class="kw">return var18;
   }

   @Override
   class="kw">public InfoProvider getSensorInfo() {
      class="kw">return this.positionProvider;
   }
}