ProxyEdgeAction class

Пакет: com.hypixel.hytale.builtin.hytalegenerator.graph.edgeactions

Файл: com/hypixel/hytale/builtin/hytalegenerator/graph/edgeactions/ProxyEdgeAction.java

extends: EdgeAction

Поля (13)

МодификаторыТипИмя
int var11
double var12
GraphSpace.Edge var13
GraphSpace.Node var14
GraphSpace.Content var15
GraphSpace.Node var3
GraphSpace.Node var4
boolean var5
GraphSpace.Edge var5
double var5
boolean var6
double var7
double var9

Методы (1)

МодификаторыВозвратСигнатура
if if(var5 && var6)

Исходный код

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

class="kw">import com.hypixel.hytale.builtin.hytalegenerator.VectorUtil;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.density.Density;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.graph.GraphSpace;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.graph.contentsuppliers.ContentSupplier;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.graph.nodeselectors.NodeSelector;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.rng.RngField;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.vectorproviders.VectorProvider;
class="kw">import com.hypixel.hytale.math.util.FastRandom;
class="kw">import java.util.function.Consumer;
class="kw">import javax.annotation.Nonnull;
class="kw">import org.joml.Vector3d;

class="kw">public class ProxyEdgeAction class="kw">extends EdgeAction {
   @Nonnull
   class="kw">private class="kw">final NodeSelector hostSelector;
   @Nonnull
   class="kw">private class="kw">final VectorProvider normalVectorProvider;
   @Nonnull
   class="kw">private class="kw">final Density angleToNormalDensity;
   @Nonnull
   class="kw">private class="kw">final Density spinAngleDensity;
   @Nonnull
   class="kw">private class="kw">final Density distanceDensity;
   @Nonnull
   class="kw">private class="kw">final ContentSupplier proxyContent;
   class="kw">private class="kw">final double maxProxyDistance;
   @Nonnull
   class="kw">private class="kw">final FastRandom random;
   @Nonnull
   class="kw">private class="kw">final RngField rngField;
   @Nonnull
   class="kw">private class="kw">final Vector3d rNormalVector;
   @Nonnull
   class="kw">private class="kw">final Vector3d rVectorToNeighbor;
   @Nonnull
   class="kw">private class="kw">final Vector3d rProxyPosition;
   @Nonnull
   class="kw">private class="kw">final Vector3d rSpinAxis;
   @Nonnull
   class="kw">private class="kw">final Density.Context rDensityContext;

   class="kw">public ProxyEdgeAction(
      @Nonnull NodeSelector var1,
      @Nonnull VectorProvider var2,
      @Nonnull Density var3,
      @Nonnull Density var4,
      @Nonnull Density var5,
      @Nonnull ContentSupplier var6,
      double var7,
      int var9
   ) {
      assert var7 >= 0.0;
      this.hostSelector = var1;
      this.normalVectorProvider = var2;
      this.angleToNormalDensity = var3;
      this.spinAngleDensity = var4;
      this.distanceDensity = var5;
      this.proxyContent = var6;
      this.maxProxyDistance = var7;
      this.random = new FastRandom();
      this.rngField = new RngField(var9);
      this.rNormalVector = new Vector3d();
      this.rVectorToNeighbor = new Vector3d();
      this.rProxyPosition = new Vector3d();
      this.rSpinAxis = new Vector3d();
      this.rDensityContext = new Density.Context();
      this.rDensityContext.densityAnchor = new Vector3d();
   }

   @Override
   class="kw">public void run(@Nonnull GraphSpace var1, @Nonnull GraphSpace.Edge var2) {
      GraphSpace.Node var3 = var2.nodeA();
      GraphSpace.Node var4 = var2.nodeB();
      boolean var5 = this.hostSelector.isSelected(var1, var3);
      boolean var6 = this.hostSelector.isSelected(var1, var4);
      if (var5 && var6) {
         var1.schedule(() -> {
            GraphSpace.Edge var5 = this.createProxy(var2, var3, var4, var1);
            this.createProxy(var5, var4, var5.otherNode(var4), var1);
         });
      } else if (var5) {
         var1.schedule(() -> this.createProxy(var2, var3, var4, var1));
      } else if (var6) {
         var1.schedule(() -> this.createProxy(var2, var4, var3, var1));
      }
   }

   @Nonnull
   class="kw">private GraphSpace.Edge createProxy(@Nonnull GraphSpace.Edge var1, @Nonnull GraphSpace.Node var2, @Nonnull GraphSpace.Node var3, @Nonnull GraphSpace var4) {
      this.normalVectorProvider.process(new VectorProvider.Context(new Vector3d(var2.position()), null, var2), this.rNormalVector);
      if (VectorUtil.isZero(this.rNormalVector)) {
         this.rNormalVector.set(0.0, 1.0, 0.0);
      }

      this.rDensityContext.position.set(var3.position());
      this.rDensityContext.densityAnchor.set(var2.position());
      this.rDensityContext.graphNode = var2;
      double var5 = Math.toRadians(this.angleToNormalDensity.process(this.rDensityContext));
      double var7 = Math.toRadians(this.spinAngleDensity.process(this.rDensityContext));
      double var9 = Math.min(this.distanceDensity.process(this.rDensityContext), this.maxProxyDistance);
      this.rDensityContext.graphNode = null;
      this.rVectorToNeighbor.set(var3.position());
      this.rVectorToNeighbor.sub(var2.position());
      this.rProxyPosition.set(this.rNormalVector);
      this.rVectorToNeighbor.cross(this.rNormalVector, this.rSpinAxis);
      if (VectorUtil.isZero(this.rSpinAxis)) {
         VectorUtil.orthogonalVector(this.rNormalVector, this.rSpinAxis);
         this.rSpinAxis.normalize();
         int var11 = this.rngField
            .get(
               var2.position().x() * 0.5 + var3.position().x() * 0.5,
               var2.position().y() * 0.5 + var3.position().y() * 0.5,
               var2.position().z() * 0.5 + var3.position().z() * 0.5
            );
         this.random.setSeed(var11);
         double var12 = this.random.nextDouble() * Math.PI * 2.0;
         this.rSpinAxis.rotateAxis(var12, this.rNormalVector.x, this.rNormalVector.y, this.rNormalVector.z);
      } else {
         this.rSpinAxis.normalize();
      }

      this.rProxyPosition.rotateAxis(-var5, this.rSpinAxis.x, this.rSpinAxis.y, this.rSpinAxis.z);
      this.rProxyPosition.rotateAxis(var7, this.rNormalVector.x, this.rNormalVector.y, this.rNormalVector.z);
      this.rProxyPosition.normalize(var9);
      this.rProxyPosition.add(var2.position());
      var4.deleteEdge(var1);
      GraphSpace.Node var14 = var4.createNode(this.rProxyPosition);
      GraphSpace.Content var15 = this.proxyContent.get(var14);
      var14.setContent(var15);
      var4.getOrCreateEdge(var2, var14);
      GraphSpace.Edge var13 = var4.getOrCreateEdge(var3, var14);
      assert var13 != null;
      class="kw">return var13;
   }

   @Override
   class="kw">public double getInteractionRange(double var1) {
      class="kw">return var1 + this.hostSelector.getInteractionRange(var1);
   }

   @Override
   class="kw">public double getLongestCreatedEdgeLength() {
      class="kw">return this.maxProxyDistance * 2.0;
   }

   @Override
   class="kw">public double getCausalRangeIncrement() {
      class="kw">return 0.0;
   }

   @Override
   class="kw">public void viewAllPossibleContent(@Nonnull Consumer<GraphSpace.Content> var1) {
      this.proxyContent.viewAllPossibleContent(var1);
   }
}