PipeCaveNodeShapeGenerator class

Пакет: com.hypixel.hytale.server.worldgen.cave.shape

Файл: com/hypixel/hytale/server/worldgen/cave/shape/PipeCaveNodeShape.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 PipeCaveNodeShapereturn new PipeCaveNodeShape(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 PipeCaveNodeShape 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 PipeCaveNodeShape(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);
      double var9;
      double var11;
      double var13;
      double var15;
      if (var7 < 0.0) {
         var9 = this.o.x;
         var11 = this.o.y;
         var13 = this.o.z;
         var15 = this.radius1;
      } else if (var7 > 1.0) {
         var9 = this.o.x + this.v.x;
         var11 = this.o.y + this.v.y;
         var13 = this.o.z + this.v.z;
         var15 = this.radius2;
      } else {
         var9 = this.o.x + this.v.x * var7;
         var11 = this.o.y + this.v.y * var7;
         var13 = this.o.z + this.v.z * var7;
         var15 = this.getRadiusAt(var7);
      }

      var15 *= 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;
   }

   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 "PipeCaveNodeShape{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 PipeCaveNodeShapeGenerator 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 PipeCaveNodeShapeGenerator(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 PipeCaveNodeShape(var2, var5, var10, var11, var13, var15);
      }
   }
}