BoxBlockIntersectionEvaluator class

Пакет: com.hypixel.hytale.server.core.modules.collision

Файл: com/hypixel/hytale/server/core/modules/collision/BoxBlockIntersectionEvaluator.java

extends: BlockContactData

implements: IBlockCollisionEvaluator

Поля (2)

МодификаторыТипИмя
int var8
int var8

Методы (8)

МодификаторыВозвратСигнатура
if if(this.worldUp.y != 0.0)
public int intersectBoxint intersectBox(@Nonnull Box var1, double var2, double var4, double var6)
public int intersectBoxComputeOnGroundint intersectBoxComputeOnGround(@Nonnull Box var1, double var2, double var4, double var6)
public int intersectBoxComputeTouchint intersectBoxComputeTouch(@Nonnull Box var1, double var2, double var4, double var6)
public boolean isBoxIntersectingboolean isBoxIntersecting(@Nonnull Box var1, double var2, double var4, double var6)
public boolean isTouchingboolean isTouching()
public void setWorldUpvoid setWorldUp(@Nonnull Vector3dc var1)
public boolean touchesCeilboolean touchesCeil()

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.server.core.modules.collision;

class="kw">import com.hypixel.hytale.math.shape.Box;
class="kw">import com.hypixel.hytale.math.vector.Vector3dUtil;
class="kw">import javax.annotation.Nonnull;
class="kw">import org.joml.Vector3d;
class="kw">import org.joml.Vector3dc;

class="kw">public class BoxBlockIntersectionEvaluator class="kw">extends BlockContactData class="kw">implements IBlockCollisionEvaluator {
   @Nonnull
   class="kw">protected Box box = new Box();
   class="kw">protected Vector3d worldUp = new Vector3d(Vector3dUtil.UP);
   class="kw">protected boolean touchCeil;
   class="kw">protected int resultCode;

   class="kw">public BoxBlockIntersectionEvaluator() {
      this.setStartEnd(0.0, 1.0);
   }

   @Override
   class="kw">public void setCollisionData(@Nonnull BlockCollisionData var1, @Nonnull CollisionConfig var2, int var3) {
      var1.setStart(this.collisionPoint, this.collisionStart);
      var1.setEnd(this.collisionEnd, this.collisionNormal);
      var1.setBlockData(var2);
      var1.setDetailBoxIndex(var3);
      var1.setTouchingOverlapping(CollisionMath.isTouching(this.resultCode), CollisionMath.isOverlapping(this.resultCode));
   }

   @Nonnull
   class="kw">public Vector3dc getWorldUp() {
      class="kw">return this.worldUp;
   }

   class="kw">public void setWorldUp(@Nonnull Vector3dc var1) {
      this.worldUp.set(var1);
   }

   @Nonnull
   class="kw">public BoxBlockIntersectionEvaluator setBox(@Nonnull Box var1) {
      this.box.assign(var1);
      class="kw">return this;
   }

   @Nonnull
   class="kw">public BoxBlockIntersectionEvaluator expandBox(double var1) {
      this.box.expand(var1);
      class="kw">return this;
   }

   @Nonnull
   class="kw">public BoxBlockIntersectionEvaluator setPosition(@Nonnull Vector3dc var1) {
      this.collisionPoint.set(var1);
      class="kw">return this;
   }

   @Nonnull
   class="kw">public BoxBlockIntersectionEvaluator setBox(@Nonnull Box var1, @Nonnull Vector3dc var2) {
      class="kw">return this.setBox(var1).setPosition(var2);
   }

   @Nonnull
   class="kw">public BoxBlockIntersectionEvaluator offsetPosition(@Nonnull Vector3d var1) {
      this.collisionPoint.add(var1);
      class="kw">return this;
   }

   @Nonnull
   class="kw">public BoxBlockIntersectionEvaluator setStartEnd(double var1, double var3) {
      this.collisionStart = var1;
      this.collisionEnd = var3;
      class="kw">return this;
   }

   class="kw">public int intersectBox(@Nonnull Box var1, double var2, double var4, double var6) {
      class="kw">return CollisionMath.intersectAABBs(this.collisionPoint.x, this.collisionPoint.y, this.collisionPoint.z, this.box, var2, var4, var6, var1);
   }

   class="kw">public int intersectBoxComputeTouch(@Nonnull Box var1, double var2, double var4, double var6) {
      int var8 = CollisionMath.intersectAABBs(this.collisionPoint.x, this.collisionPoint.y, this.collisionPoint.z, this.box, var2, var4, var6, var1);
      this.resultCode = var8;
      this.onGround = false;
      this.touchCeil = false;
      this.collisionNormal.set(0.0, 0.0, 0.0);
      this.overlapping = CollisionMath.isOverlapping(this.resultCode);
      if ((var8 & 7) != 0) {
         if (this.worldUp.y != 0.0) {
            if ((var8 & 2) != 0) {
               this.collisionNormal.set(0.0, var4 + var1.min.y < this.collisionPoint.y + this.box.min.y ? 1.0 : -1.0, 0.0);
               this.onGround = this.collisionNormal.y == this.worldUp.y;
               this.touchCeil = !this.onGround;
            } else if ((var8 & 1) != 0) {
               this.collisionNormal.set(var2 + var1.min.x < this.collisionPoint.x + this.box.min.x ? 1.0 : -1.0, 0.0, 0.0);
            } else {
               this.collisionNormal.set(0.0, 0.0, var6 + var1.min.z < this.collisionPoint.z + this.box.min.z ? 1.0 : -1.0);
            }
         } else if (this.worldUp.x != 0.0) {
            if ((var8 & 1) != 0) {
               this.collisionNormal.set(var2 + var1.min.x < this.collisionPoint.x + this.box.min.x ? 1.0 : -1.0, 0.0, 0.0);
               this.onGround = this.collisionNormal.x == this.worldUp.x;
               this.touchCeil = !this.onGround;
            } else if ((var8 & 2) != 0) {
               this.collisionNormal.set(0.0, var4 + var1.min.y < this.collisionPoint.y + this.box.min.y ? 1.0 : -1.0, 0.0);
            } else {
               this.collisionNormal.set(0.0, 0.0, var6 + var1.min.z < this.collisionPoint.z + this.box.min.z ? 1.0 : -1.0);
            }
         } else if ((var8 & 4) != 0) {
            this.collisionNormal.set(0.0, 0.0, var6 + var1.min.z < this.collisionPoint.z + this.box.min.z ? 1.0 : -1.0);
            this.onGround = this.collisionNormal.z == this.worldUp.z;
            this.touchCeil = !this.onGround;
         } else if ((var8 & 2) != 0) {
            this.collisionNormal.set(0.0, var4 + var1.min.y < this.collisionPoint.y + this.box.min.y ? 1.0 : -1.0, 0.0);
         } else {
            this.collisionNormal.set(var2 + var1.min.x < this.collisionPoint.x + this.box.min.x ? 1.0 : -1.0, 0.0, 0.0);
         }
      }

      class="kw">return var8;
   }

   class="kw">public int intersectBoxComputeOnGround(@Nonnull Box var1, double var2, double var4, double var6) {
      int var8 = CollisionMath.intersectAABBs(this.collisionPoint.x, this.collisionPoint.y, this.collisionPoint.z, this.box, var2, var4, var6, var1);
      this.resultCode = var8;
      this.onGround = false;
      this.touchCeil = false;
      if ((var8 & 7) != 0) {
         if (this.worldUp.y != 0.0 && (var8 & 2) != 0) {
            this.onGround = (var4 + var1.min.y - this.collisionPoint.y - this.box.min.y) * this.worldUp.y < 0.0;
            this.touchCeil = !this.onGround;
         } else if (this.worldUp.x != 0.0 && (var8 & 1) != 0) {
            this.onGround = (var2 + var1.min.x - this.collisionPoint.x - this.box.min.x) * this.worldUp.x < 0.0;
            this.touchCeil = !this.onGround;
         } else if (this.worldUp.z != 0.0 && (var8 & 4) != 0) {
            this.onGround = (var6 + var1.min.z - this.collisionPoint.z - this.box.min.z) * this.worldUp.z < 0.0;
            this.touchCeil = !this.onGround;
         }
      }

      class="kw">return var8;
   }

   class="kw">public boolean isBoxIntersecting(@Nonnull Box var1, double var2, double var4, double var6) {
      class="kw">return !CollisionMath.isDisjoint(this.intersectBoxComputeTouch(var1, var2, var4, var6));
   }

   class="kw">public boolean isTouching() {
      class="kw">return CollisionMath.isTouching(this.resultCode);
   }

   class="kw">public boolean touchesCeil() {
      class="kw">return this.touchCeil;
   }
}