BoxShape class

Пакет: com.hypixel.hytale.builtin.triggervolumes.shape

Файл: com/hypixel/hytale/builtin/triggervolumes/shape/BoxShape.java

extends: TriggerVolumeShape

Поля (19)

МодификаторыТипИмя
final double ROTATION_EPSILON
double var10
double var11
double var12
double var13
double var14
double var15
Vector3d var2
double var3
var3
Matrix3d var4
double var5
var5
double var5
double var7
var7
double var7
Matrix3d var9
double var9

Методы (8)

МодификаторыВозвратСигнатура
private void computeDerivedvoid computeDerived()
public boolean hasRotationboolean hasRotation()
if if(this.min != null && this.max != null)
if if(this.offset == null)
if if(var9 != null)
if if(var4 == null)
if if(this.rotation == null)
public void setRotationvoid setRotation(@Nullable Vector3d var1)

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.builtin.triggervolumes.shape;

class="kw">import com.hypixel.hytale.builtin.triggervolumes.YawRotation;
class="kw">import com.hypixel.hytale.codec.KeyedCodec;
class="kw">import com.hypixel.hytale.codec.builder.BuilderCodec;
class="kw">import com.hypixel.hytale.math.vector.Vector3dUtil;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Matrix3d;
class="kw">import org.joml.Vector3d;

class="kw">public class BoxShape class="kw">extends TriggerVolumeShape {
   class="kw">private class="kw">static class="kw">final double ROTATION_EPSILON = 1.0E-6;
   @Nonnull
   class="kw">public class="kw">static class="kw">final BuilderCodec<BoxShape> CODEC = BuilderCodec.builder(BoxShape.class, BoxShape::new, BASE_CODEC)
      .append(new KeyedCodec<>("Min", Vector3dUtil.CODEC), (var0, var1) -> var0.min = var1, var0 -> var0.min)
      .add()
      .append(new KeyedCodec<>("Max", Vector3dUtil.CODEC), (var0, var1) -> var0.max = var1, var0 -> var0.max)
      .add()
      .append(new KeyedCodec<>("Rotation", Vector3dUtil.CODEC, false), (var0, var1) -> var0.rotation = var1, var0 -> var0.hasRotation() ? var0.rotation : null)
      .add()
      .afterDecode(BoxShape::computeDerived)
      .build();
   class="kw">private Vector3d min;
   class="kw">private Vector3d max;
   @Nullable
   class="kw">private Vector3d rotation;
   class="kw">private class="kw">transient Vector3d offset;
   class="kw">private class="kw">transient Vector3d halfExtents;
   @Nullable
   class="kw">private class="kw">transient Matrix3d rotationMatrix;

   class="kw">public BoxShape() {
   }

   class="kw">public BoxShape(@Nonnull Vector3d var1, @Nonnull Vector3d var2) {
      this.min = var1;
      this.max = var2;
      this.computeDerived();
   }

   class="kw">public BoxShape(@Nonnull Vector3d var1, @Nonnull Vector3d var2, @Nullable Vector3d var3) {
      this.min = var1;
      this.max = var2;
      this.rotation = var3;
      this.computeDerived();
   }

   class="kw">private void computeDerived() {
      if (this.min != null && this.max != null) {
         this.offset = new Vector3d(this.min).add(this.max).mul(0.5);
         this.halfExtents = new Vector3d(this.max).sub(this.min).mul(0.5).absolute();
         this.rotationMatrix = this.hasRotation() ? new Matrix3d().rotationYXZ(this.rotation.y(), this.rotation.x(), this.rotation.z()) : null;
      }
   }

   class="kw">public boolean hasRotation() {
      class="kw">return this.rotation != null && (Math.abs(this.rotation.x()) > 1.0E-6 || Math.abs(this.rotation.y()) > 1.0E-6 || Math.abs(this.rotation.z()) > 1.0E-6);
   }

   @Override
   class="kw">public boolean contains(@Nonnull Vector3d var1, @Nonnull Vector3d var2) {
      if (this.offset == null) {
         class="kw">return false;
      }

      double var3 = var2.x() - (var1.x() + this.offset.x());
      double var5 = var2.y() - (var1.y() + this.offset.y());
      double var7 = var2.z() - (var1.z() + this.offset.z());
      Matrix3d var9 = this.rotationMatrix;
      if (var9 != null) {
         double var10 = var9.m00 * var3 + var9.m01 * var5 + var9.m02 * var7;
         double var12 = var9.m10 * var3 + var9.m11 * var5 + var9.m12 * var7;
         double var14 = var9.m20 * var3 + var9.m21 * var5 + var9.m22 * var7;
         var3 = var10;
         var5 = var12;
         var7 = var14;
      }

      class="kw">return Math.abs(var3) <= this.halfExtents.x() && Math.abs(var5) <= this.halfExtents.y() && Math.abs(var7) <= this.halfExtents.z();
   }

   @Override
   class="kw">public double getBoundingRadius() {
      class="kw">return this.halfExtents != null ? this.halfExtents.length() : 0.0;
   }

   @Override
   class="kw">public double getMaxDistanceFromOrigin() {
      class="kw">return this.offset != null && this.halfExtents != null ? this.offset.length() + this.halfExtents.length() : 0.0;
   }

   @Override
   class="kw">public void getWorldAABB(@Nonnull Vector3d var1, @Nonnull Vector3d var2, @Nonnull Vector3d var3) {
      Matrix3d var4 = this.rotationMatrix;
      if (var4 == null) {
         var2.set(var1).add(this.min);
         var3.set(var1).add(this.max);
      } else {
         double var5 = var1.x() + this.offset.x();
         double var7 = var1.y() + this.offset.y();
         double var9 = var1.z() + this.offset.z();
         double var11 = Math.abs(var4.m00) * this.halfExtents.x() + Math.abs(var4.m10) * this.halfExtents.y() + Math.abs(var4.m20) * this.halfExtents.z();
         double var13 = Math.abs(var4.m01) * this.halfExtents.x() + Math.abs(var4.m11) * this.halfExtents.y() + Math.abs(var4.m21) * this.halfExtents.z();
         double var15 = Math.abs(var4.m02) * this.halfExtents.x() + Math.abs(var4.m12) * this.halfExtents.y() + Math.abs(var4.m22) * this.halfExtents.z();
         var2.set(var5 - var11, var7 - var13, var9 - var15);
         var3.set(var5 + var11, var7 + var13, var9 + var15);
      }
   }

   @Override
   class="kw">public void rotateInPlace(float var1) {
      if (this.min != null && this.max != null && !(Math.abs(var1) < 1.0E-6)) {
         Vector3d var2 = new Vector3d(this.offset);
         YawRotation.rotate(var2, var1);
         this.min = new Vector3d(var2).sub(this.halfExtents);
         this.max = new Vector3d(var2).add(this.halfExtents);
         if (this.rotation == null) {
            this.rotation = new Vector3d(0.0, var1, 0.0);
         } else {
            this.rotation.y += var1;
         }

         this.computeDerived();
      }
   }

   @Nonnull
   class="kw">public BoxShape copy() {
      class="kw">return new BoxShape(new Vector3d(this.min), new Vector3d(this.max), this.rotation != null ? new Vector3d(this.rotation) : null);
   }

   @Nonnull
   class="kw">public Vector3d getMin() {
      class="kw">return this.min;
   }

   @Nonnull
   class="kw">public Vector3d getMax() {
      class="kw">return this.max;
   }

   @Nullable
   class="kw">public Vector3d getRotation() {
      class="kw">return this.rotation;
   }

   class="kw">public void setRotation(@Nullable Vector3d var1) {
      this.rotation = var1;
      this.computeDerived();
   }
}