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