CylinderCaveNodeShapeGenerator class
Пакет: com.hypixel.hytale.server.worldgen.cave.shape
Файл: com/hypixel/hytale/server/worldgen/cave/shape/CylinderCaveNodeShape.java
implements: CaveNodeShapeEnum.CaveNodeShapeGenerator
Поля (13)
| Модификаторы | Тип | Имя |
|---|---|---|
|
private final boolean |
inheritParentRadius |
|
private final IDoubleRange |
length |
|
private final IDoubleRange |
middleRadius |
|
private final IDoubleRange |
radius |
|
Vector3d |
var10 |
|
double |
var11 |
|
|
var11 |
|
|
var11 |
|
double |
var13 |
|
double |
var15 |
|
|
var15 |
|
Vector3d |
var17 |
|
double |
var8 |
Методы (4)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
abstract |
return new |
CylinderCaveNodeShapereturn new CylinderCaveNodeShape(var2, var5, var10, var11, var13, var15) |
|
public CaveNodeShape |
generateCaveNodeShapepublic CaveNodeShape generateCaveNodeShape(@Nonnull Random var1, CaveType var2, CaveNode var3, @Nonnull CaveNodeType.CaveNodeChildEntry var4, @Nonnull Vector3d var5, float var6, float var7) |
|
|
if if(this.inheritParentRadius) |
|
|
if if(this.middleRadius != null) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.server.worldgen.cave.shape;
class="kw">import com.hypixel.hytale.math.util.MathUtil;
class="kw">import com.hypixel.hytale.math.util.TrigMathUtil;
class="kw">import com.hypixel.hytale.procedurallib.supplier.IDoubleRange;
class="kw">import com.hypixel.hytale.server.worldgen.cave.CaveNodeType;
class="kw">import com.hypixel.hytale.server.worldgen.cave.CaveType;
class="kw">import com.hypixel.hytale.server.worldgen.cave.element.CaveNode;
class="kw">import com.hypixel.hytale.server.worldgen.util.bounds.IWorldBounds;
class="kw">import java.util.Random;
class="kw">import javax.annotation.Nonnull;
class="kw">import org.joml.Vector3d;
class="kw">public class CylinderCaveNodeShape class="kw">extends AbstractCaveNodeShape class="kw">implements IWorldBounds {
class="kw">private class="kw">final CaveType caveType;
@Nonnull
class="kw">private class="kw">final Vector3d o;
@Nonnull
class="kw">private class="kw">final Vector3d v;
class="kw">private class="kw">final int lowBoundX;
class="kw">private class="kw">final int lowBoundY;
class="kw">private class="kw">final int lowBoundZ;
class="kw">private class="kw">final int highBoundX;
class="kw">private class="kw">final int highBoundY;
class="kw">private class="kw">final int highBoundZ;
class="kw">private class="kw">final double radius1;
class="kw">private class="kw">final double radius2;
class="kw">private class="kw">final double middleRadius;
class="kw">public CylinderCaveNodeShape(CaveType var1, @Nonnull Vector3d var2, @Nonnull Vector3d var3, double var4, double var6, double var8) {
this.caveType = var1;
this.o = var2;
this.v = var3;
this.radius1 = var4;
this.radius2 = var6;
this.middleRadius = var8;
this.lowBoundX = MathUtil.floor(Math.min(var2.x, var2.x + var3.x) - Math.max(var4, var6));
this.lowBoundY = MathUtil.floor(Math.min(var2.y, var2.y + var3.y) - Math.max(var4, var6));
this.lowBoundZ = MathUtil.floor(Math.min(var2.z, var2.z + var3.z) - Math.max(var4, var6));
this.highBoundX = MathUtil.ceil(Math.max(var2.x, var2.x + var3.x) + Math.max(var4, var6));
this.highBoundY = MathUtil.ceil(Math.max(var2.y, var2.y + var3.y) + Math.max(var4, var6));
this.highBoundZ = MathUtil.ceil(Math.max(var2.z, var2.z + var3.z) + Math.max(var4, var6));
}
@Nonnull
@Override
class="kw">public Vector3d getStart() {
class="kw">return new Vector3d(this.o);
}
@Nonnull
@Override
class="kw">public Vector3d getEnd() {
double var1 = this.o.x + this.v.x;
double var3 = this.o.y + this.v.y;
double var5 = this.o.z + this.v.z;
class="kw">return new Vector3d(var1, var3, var5);
}
@Nonnull
@Override
class="kw">public Vector3d getAnchor(@Nonnull Vector3d var1, double var2, double var4, double var6) {
double var8 = this.getRadiusAt(var2);
class="kw">return CaveNodeShapeUtils.getPipeAnchor(var1, this.o, this.v, var8, var8, var8, var2, var4, var6);
}
@Nonnull
@Override
class="kw">public IWorldBounds getBounds() {
class="kw">return this;
}
@Override
class="kw">public int getLowBoundX() {
class="kw">return this.lowBoundX;
}
@Override
class="kw">public int getLowBoundZ() {
class="kw">return this.lowBoundZ;
}
@Override
class="kw">public int getHighBoundX() {
class="kw">return this.highBoundX;
}
@Override
class="kw">public int getHighBoundZ() {
class="kw">return this.highBoundZ;
}
@Override
class="kw">public int getLowBoundY() {
class="kw">return this.lowBoundY;
}
@Override
class="kw">public int getHighBoundY() {
class="kw">return this.highBoundY;
}
class="kw">public double getRadius1() {
class="kw">return this.radius1;
}
class="kw">public double getRadius2() {
class="kw">return this.radius2;
}
@Override
class="kw">public boolean shouldReplace(int var1, double var2, double var4, int var6) {
double var7 = this.projectPointOnNode(var2, var6, var4);
if (!(var7 < 0.0) && !(var7 > 1.0)) {
double var9 = this.o.x + this.v.x * var7;
double var11 = this.o.y + this.v.y * var7;
double var13 = this.o.z + this.v.z * var7;
double var15 = this.getRadiusAt(var7) * this.caveType.getHeightRadiusFactor(var1, var2, var4, MathUtil.floor(var11));
var9 -= var2;
var11 -= var6;
var13 -= var4;
class="kw">return var9 * var9 + var11 * var11 + var13 * var13 < var15 * var15;
} else {
class="kw">return false;
}
}
class="kw">private double projectPointOnNode(double var1, double var3, double var5) {
double var7 = (var1 - this.o.x) * this.v.x + (var3 - this.o.y) * this.v.y + (var5 - this.o.z) * this.v.z;
class="kw">return var7 / (this.v.x * this.v.x + this.v.y * this.v.y + this.v.z * this.v.z);
}
class="kw">private double getRadiusAt(double var1) {
class="kw">return var1 < 0.5
? (this.middleRadius - this.radius1) * 2.0 * var1 + this.radius1
: (this.radius2 - this.middleRadius) * 2.0 * (var1 - 0.5) + this.middleRadius;
}
@Override
class="kw">public double getFloorPosition(int var1, double var2, double var4) {
for (int var6 = this.getLowBoundY(); var6 < this.getHighBoundY(); var6++) {
if (this.shouldReplace(var1, var2, var4, var6)) {
class="kw">return var6 - 1;
}
}
class="kw">return -1.0;
}
@Override
class="kw">public double getCeilingPosition(int var1, double var2, double var4) {
for (int var6 = this.getHighBoundY(); var6 > this.getLowBoundY(); var6--) {
if (this.shouldReplace(var1, var2, var4, var6)) {
class="kw">return var6 + 1;
}
}
class="kw">return -1.0;
}
@Nonnull
@Override
class="kw">public String toString() {
class="kw">return "CylinderCaveNodeShape{caveType="
+ this.caveType
+ ", o="
+ this.o
+ ", v="
+ this.v
+ ", lowBoundX="
+ this.lowBoundX
+ ", lowBoundY="
+ this.lowBoundY
+ ", lowBoundZ="
+ this.lowBoundZ
+ ", highBoundX="
+ this.highBoundX
+ ", highBoundY="
+ this.highBoundY
+ ", highBoundZ="
+ this.highBoundZ
+ ", radius1="
+ this.radius1
+ ", radius2="
+ this.radius2
+ ", middleRadius="
+ this.middleRadius
+ "}";
}
class="kw">public class="kw">static class CylinderCaveNodeShapeGenerator class="kw">implements CaveNodeShapeEnum.CaveNodeShapeGenerator {
class="kw">private class="kw">final IDoubleRange radius;
class="kw">private class="kw">final IDoubleRange middleRadius;
class="kw">private class="kw">final IDoubleRange length;
class="kw">private class="kw">final boolean inheritParentRadius;
class="kw">public CylinderCaveNodeShapeGenerator(IDoubleRange var1, IDoubleRange var2, IDoubleRange var3, boolean var4) {
this.radius = var1;
this.middleRadius = var2;
this.length = var3;
this.inheritParentRadius = var4;
}
@Nonnull
@Override
class="kw">public CaveNodeShape generateCaveNodeShape(
@Nonnull Random var1, CaveType var2, CaveNode var3, @Nonnull CaveNodeType.CaveNodeChildEntry var4, @Nonnull Vector3d var5, float var6, float var7
) {
double var8 = this.length.getValue(var1.nextDouble());
Vector3d var10 = new Vector3d(TrigMathUtil.sin(var7) * TrigMathUtil.cos(var6), TrigMathUtil.cos(var7), TrigMathUtil.sin(var7) * TrigMathUtil.sin(var6))
.mul(var8);
double var11;
if (this.inheritParentRadius) {
var11 = CaveNodeShapeUtils.getEndRadius(var3, this.radius, var1);
} else {
var11 = this.radius.getValue(var1.nextDouble());
}
double var13 = this.radius.getValue(var1.nextDouble());
double var15 = (var13 - var11) * 0.5 + var11;
if (this.middleRadius != null) {
var15 = this.middleRadius.getValue(var1.nextDouble());
}
Vector3d var17 = CaveNodeShapeUtils.getOffset(var3, var4);
var5.add(var17);
class="kw">return new CylinderCaveNodeShape(var2, var5, var10, var11, var13, var15);
}
}
}