GraphMaterialProvider class

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

Файл: com/hypixel/hytale/builtin/hytalegenerator/materialproviders/GraphMaterialProvider.java

extends: MaterialProvider<Material>

Поля (26)

МодификаторыТипИмя
public static final GraphMaterialProvider.MaterialContent EMPTY
public final MaterialProvider<Material> materialProvider
List<GraphSpace.Node> nodes
public final double radius
public final double rangeSquared
double var10
GraphSpace.ReadOnly var12
double var13
double var15
int var17
GraphMaterialProvider.MaterialContent var18
GraphSpace.Node var2
var2
Material var20
GraphSpace.Node var21
int var22
GraphMaterialProvider.MaterialContent var23
double var3
var3
double var5
var5
double var5
var5
GraphMaterialProvider.MaterialContent var8
StackedBoundedCache.Segment var8
Bounds3d var9

Методы (14)

МодификаторыВозвратСигнатура
public MaterialContentpublic MaterialContent(@Nonnull MaterialProvider<Material> var1, double var2)
QueryResult QueryResult()
for for(int var9 = this.rCellIndexBounds.min.x; var9 < this.rCellIndexBounds.max.x; var9++)
for for(int var10 = this.rCellIndexBounds.min.y; var10 < this.rCellIndexBounds.max.y; var10++)
for for(int var11 = this.rCellIndexBounds.min.z; var11 < this.rCellIndexBounds.max.z; var11++)
abstract for for(int var7 = 0; var7 < var4.size()
abstract for for(int var7 = 0; var7 < this.rQueryResults.size()
abstract for for(int var19 = 0; var19 < var8.data.nodes.size()
if if(this.isEmpty)
if if(var8.data == null)
if if(var12 != null)
if if(var22 != -1)
if if(var23 != null)
if if(var2 == null)

Исходный код

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

class="kw">import com.hypixel.hytale.builtin.hytalegenerator.GridCache;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.StackedBoundedCache;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.VectorUtil;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.bounds.Bounds3d;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.bounds.Bounds3i;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.graph.GraphGenerator;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.graph.GraphSpace;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.material.Material;
class="kw">import java.util.ArrayList;
class="kw">import java.util.List;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3d;
class="kw">import org.joml.Vector3i;

class="kw">public class GraphMaterialProvider class="kw">extends MaterialProvider<Material> {
   @Nonnull
   class="kw">private class="kw">final GraphGenerator graphGenerator;
   @Nonnull
   class="kw">private class="kw">final GridCache<GraphSpace.ReadOnly> grid;
   @Nonnull
   class="kw">private class="kw">final StackedBoundedCache<GraphMaterialProvider.QueryResult> queryCache;
   @Nonnull
   class="kw">private class="kw">final List<GraphMaterialProvider.MaterialContent> indexedContent;
   class="kw">private class="kw">final boolean isEmpty;
   @Nonnull
   class="kw">private class="kw">final List<StackedBoundedCache.Segment<GraphMaterialProvider.QueryResult>> rQueryResults;
   @Nonnull
   class="kw">private class="kw">final Vector3d rSegmentBoundsMaxInclusive;
   @Nonnull
   class="kw">private class="kw">final Bounds3i rCellIndexBounds;
   @Nonnull
   class="kw">private class="kw">final Vector3i rCellIndex;
   @Nonnull
   class="kw">private class="kw">final Vector3d rContextPositionDouble;
   @Nonnull
   class="kw">private class="kw">final Bounds3d rIntersectingCellBounds;
   @Nonnull
   class="kw">private class="kw">final MaterialProvider.Context rChildContext;
   @Nonnull
   class="kw">private class="kw">final Vector3d rAnchor;

   class="kw">public GraphMaterialProvider(
      @Nonnull GraphGenerator var1, @Nonnull GridCache<GraphSpace.ReadOnly> var2, int var3, @Nonnull List<GraphMaterialProvider.MaterialContent> var4
   ) {
      this.graphGenerator = var1;
      this.grid = var2;
      this.indexedContent = new ArrayList<>(var4);
      double var5 = 0.0;

      for (int var7 = 0; var7 < var4.size(); var7++) {
         GraphMaterialProvider.MaterialContent var8 = var4.get(var7);
         var5 = Math.max(var8.radius, var5);
      }

      double var10 = 30.0;
      Bounds3d var9 = new Bounds3d(new Vector3d(Math.nextUp(-var5), Math.min(-30.0, -var5), Math.nextUp(-var5)), new Vector3d(var5, Math.max(30.0, var5), var5));
      this.queryCache = new StackedBoundedCache<>(var9, var3);
      this.isEmpty = var5 == 0.0;
      this.rQueryResults = new ArrayList<>();
      this.rSegmentBoundsMaxInclusive = new Vector3d();
      this.rCellIndexBounds = new Bounds3i();
      this.rCellIndex = new Vector3i();
      this.rContextPositionDouble = new Vector3d();
      this.rIntersectingCellBounds = new Bounds3d();
      this.rChildContext = new MaterialProvider.Context();
      this.rAnchor = new Vector3d();
   }

   @Nullable
   class="kw">public Material getVoxelTypeAt(@Nonnull MaterialProvider.Context var1) {
      if (this.isEmpty) {
         class="kw">return null;
      }

      this.rQueryResults.clear();
      this.rContextPositionDouble.set(var1.position);
      this.queryCache.get(this.rContextPositionDouble, this.rQueryResults);
      GraphSpace.Node var2 = null;
      double var3 = Double.MAX_VALUE;
      double var5 = Double.MAX_VALUE;

      for (int var7 = 0; var7 < this.rQueryResults.size(); var7++) {
         StackedBoundedCache.Segment var8 = this.rQueryResults.get(var7);
         if (var8.data == null) {
            var8.data = new GraphMaterialProvider.QueryResult();
            this.rSegmentBoundsMaxInclusive.set(var8.bounds.max);
            VectorUtil.nextDown(this.rSegmentBoundsMaxInclusive);
            this.grid.toCellIndex(var8.bounds.min, this.rCellIndexBounds.min);
            this.grid.toCellIndex(this.rSegmentBoundsMaxInclusive, this.rCellIndexBounds.max);
            this.rCellIndexBounds.max.add(1, 1, 1);

            for (int var9 = this.rCellIndexBounds.min.x; var9 < this.rCellIndexBounds.max.x; var9++) {
               for (int var10 = this.rCellIndexBounds.min.y; var10 < this.rCellIndexBounds.max.y; var10++) {
                  for (int var11 = this.rCellIndexBounds.min.z; var11 < this.rCellIndexBounds.max.z; var11++) {
                     this.rCellIndex.set(var9, var10, var11);
                     this.grid.toCellBounds(this.rCellIndex, this.rIntersectingCellBounds);
                     this.rIntersectingCellBounds.intersect(var8.bounds);
                     VectorUtil.nextDown(this.rIntersectingCellBounds.max);
                     GraphSpace.ReadOnly var12 = this.grid.getCell(this.rCellIndex, this.graphGenerator);
                     assert var12 != null;
                     if (var12 != null) {
                        var12.getNodes(this.rIntersectingCellBounds, var8.data.nodes);
                     }
                  }
               }
            }
         }

         for (int var19 = 0; var19 < var8.data.nodes.size(); var19++) {
            GraphSpace.Node var21 = var8.data.nodes.get(var19);
            int var22 = var21.content().index;
            if (var22 != -1) {
               GraphMaterialProvider.MaterialContent var23 = this.indexedContent.get(var22);
               if (var23 != null) {
                  double var13 = var21.position().distance(this.rContextPositionDouble);
                  if (!(var13 >= var23.radius) && !(var13 >= var3)) {
                     double var15 = var21.hashCode();
                     if (var13 != var3 || !(var15 >= var5)) {
                        var2 = var21;
                        var3 = var13;
                        var5 = var15;
                     }
                  }
               }
            }
         }
      }

      if (var2 == null) {
         class="kw">return null;
      }

      this.rChildContext.assign(var1);
      this.rChildContext.graphNode = var2;
      this.rAnchor.set(var2.position());
      this.rChildContext.anchor = this.rAnchor;
      int var17 = var2.content().index;
      GraphMaterialProvider.MaterialContent var18 = this.indexedContent.get(var17);
      assert var18 != null;
      Material var20 = var18.materialProvider.getVoxelTypeAt(this.rChildContext);
      this.rChildContext.clearReferences();
      class="kw">return var20;
   }

   class="kw">public class="kw">static class MaterialContent {
      class="kw">public class="kw">static class="kw">final GraphMaterialProvider.MaterialContent EMPTY = new GraphMaterialProvider.MaterialContent(TransparentMaterialProvider.instance(), 0.0);
      @Nonnull
      class="kw">public class="kw">final MaterialProvider<Material> materialProvider;
      class="kw">public class="kw">final double radius;
      class="kw">public class="kw">final double rangeSquared;

      class="kw">public MaterialContent(@Nonnull MaterialProvider<Material> var1, double var2) {
         assert var2 >= 9.0;
         this.materialProvider = var1;
         this.radius = var2;
         this.rangeSquared = var2 * var2;
      }
   }

   class="kw">private class="kw">static class QueryResult {
      @Nonnull
      List<GraphSpace.Node> nodes = new ArrayList<>();

      QueryResult() {
      }
   }
}