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