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