GraphGeneratorAsset class

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

Файл: com/hypixel/hytale/builtin/hytalegenerator/assets/graph/GraphGeneratorAsset.java

implements: Cleanable, JsonAssetWithMap<String, DefaultAssetMap<String, GraphGeneratorAsset>>

Поля (26)

МодификаторыТипИмя
public Registry<GraphContentAsset> contentRegistry
public MaterialCache materialCache
public SeedBox parentSeed
public ReferenceBundle referenceBundle
public ThreadBridge threadBridge
HytaleGenerator var1
String var2
var2
var2
var2
GraphGeneratorAsset var2
var2
var2
var2
GraphGeneratorAsset var3
var3
var3
var3
Bounds3d var3
List var3
GridCache var4
var4
GraphSpace var4
GraphGeneratorAsset var6
GraphPass var8
public WorkerIndexer.Id workerId

Методы (15)

МодификаторыВозвратСигнатура
public Argumentpublic Argument(@Nonnull SeedBox var1, @Nonnull ReferenceBundle var2, @Nullable MaterialCache var3, @Nonnull WorkerIndexer.Id var4, @Nonnull ThreadBridge var5, @Nonnull Registry<GraphContentAsset> var6)
public Argumentpublic Argument(@Nonnull GraphGeneratorAsset.Argument var1)
public Argumentpublic Argument(@Nonnull DensityAsset.Argument var1, @Nonnull Registry<GraphContentAsset> var2)
public Argumentpublic Argument(@Nonnull PropDistributionAsset.Argument var1, @Nonnull Registry<GraphContentAsset> var2)
public Argumentpublic Argument(@Nonnull MaterialProviderAsset.Argument var1, @Nonnull Registry<GraphContentAsset> var2)
public Argumentpublic Argument(@Nonnull PositionProviderAsset.Argument var1, @Nonnull Registry<GraphContentAsset> var2)
abstract return new GraphGeneratorreturn new GraphGenerator(var3, this.printStats, this.statsPrintInterval, this.statsLabel)
for for(GraphPassAsset var7 : var2.graphPassAssets)
for for(GraphPassAsset var4 : this.graphPassAssets)
for for(GraphPassAsset var5 : var6.graphPassAssets)
if if(var3 == null)
if if(var3.isSingleInstance)
if if(var4 == null)
if if(var2 == null)
if if(var6 != null && var6 != this)

Исходный код

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

class="kw">import com.hypixel.hytale.assetstore.AssetExtraInfo;
class="kw">import com.hypixel.hytale.assetstore.codec.AssetBuilderCodec;
class="kw">import com.hypixel.hytale.assetstore.map.DefaultAssetMap;
class="kw">import com.hypixel.hytale.assetstore.map.JsonAssetWithMap;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.GridCache;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.LoggerUtil;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.Registry;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.VectorAssetValidatorUtil;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.assets.Cleanable;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.assets.ThreadBridge;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.assets.density.DensityAsset;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.assets.graph.passes.GraphPassAsset;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.assets.materialproviders.MaterialProviderAsset;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.assets.positionproviders.PositionProviderAsset;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.assets.propdistribution.PropDistributionAsset;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.bounds.Bounds3d;
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.graph.passes.GraphPass;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.material.MaterialCache;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.plugin.HytaleGenerator;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.referencebundle.ReferenceBundle;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.rng.SeedBox;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.workerindexer.WorkerIndexer;
class="kw">import com.hypixel.hytale.codec.Codec;
class="kw">import com.hypixel.hytale.codec.KeyedCodec;
class="kw">import com.hypixel.hytale.codec.codecs.array.ArrayCodec;
class="kw">import com.hypixel.hytale.codec.validation.Validators;
class="kw">import com.hypixel.hytale.math.vector.Vector3dUtil;
class="kw">import java.util.ArrayList;
class="kw">import java.util.List;
class="kw">import java.util.Map;
class="kw">import java.util.concurrent.ConcurrentHashMap;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3d;

class="kw">public class GraphGeneratorAsset class="kw">implements Cleanable, JsonAssetWithMap<String, DefaultAssetMap<String, GraphGeneratorAsset>> {
   @Nonnull
   class="kw">public class="kw">static class="kw">final GraphGeneratorAsset EMPTY = new GraphGeneratorAsset();
   @Nonnull
   class="kw">private class="kw">static class="kw">final Map<String, GraphGeneratorAsset> exportedNodes = new ConcurrentHashMap<>();
   @Nonnull
   class="kw">public class="kw">static class="kw">final AssetBuilderCodec<String, GraphGeneratorAsset> CODEC = AssetBuilderCodec.builder(
         GraphGeneratorAsset.class,
         GraphGeneratorAsset::new,
         Codec.STRING,
         (var0, var1) -> var0.id = var1,
         var0 -> var0.id,
         (var0, var1) -> var0.data = var1,
         var0 -> var0.data
      )
      .append(
         new KeyedCodec<>("Passes", new ArrayCodec<>(GraphPassAsset.CODEC, GraphPassAsset[]::new), true),
         (var0, var1) -> var0.graphPassAssets = var1,
         var0 -> var0.graphPassAssets
      )
      .add()
      .append(new KeyedCodec<>("ExportName", Codec.STRING, true), (var0, var1) -> var0.exportName = var1, var0 -> var0.exportName)
      .add()
      .append(new KeyedCodec<>("ImportName", Codec.STRING, true), (var0, var1) -> var0.importName = var1, var0 -> var0.importName)
      .add()
      .append(new KeyedCodec<>("IsSingleInstance", Codec.BOOLEAN, true), (var0, var1) -> var0.isSingleInstance = var1, var0 -> var0.isSingleInstance)
      .add()
      .<Vector3d>append(new KeyedCodec<>("CacheCellSize", Vector3dUtil.CODEC, true), (var0, var1) -> var0.cacheCellSize = var1, var0 -> var0.cacheCellSize)
      .addValidator(VectorAssetValidatorUtil.greaterThan(0.0))
      .add()
      .<Integer>append(new KeyedCodec<>("CacheCapacity", Codec.INTEGER, true), (var0, var1) -> var0.cacheCapacity = var1, var0 -> var0.cacheCapacity)
      .addValidator(Validators.greaterThanOrEqual(1))
      .add()
      .append(new KeyedCodec<>("PrintStats", Codec.BOOLEAN, true), (var0, var1) -> var0.printStats = var1, var0 -> var0.printStats)
      .add()
      .append(new KeyedCodec<>("StatsLabel", Codec.STRING, true), (var0, var1) -> var0.statsLabel = var1, var0 -> var0.statsLabel)
      .add()
      .<Integer>append(
         new KeyedCodec<>("StatsPrintInterval", Codec.INTEGER, true), (var0, var1) -> var0.statsPrintInterval = var1, var0 -> var0.statsPrintInterval
      )
      .addValidator(Validators.greaterThanOrEqual(0))
      .add()
      .afterDecode(var0 -> {
         if (!var0.exportName.isEmpty()) {
            if (exportedNodes.containsKey(var0.exportName)) {
               LoggerUtil.getLogger().warning("Duplicate export name for asset: " + var0.exportName);
            }

            exportedNodes.put(var0.exportName, var0);
            LoggerUtil.getLogger().fine("Registered imported GraphGenerator asset with name '" + var0.exportName + "' with asset id '" + var0.id);
         }
      })
      .build();
   class="kw">private String id;
   class="kw">private AssetExtraInfo.Data data;
   @Nonnull
   class="kw">private GraphPassAsset[] graphPassAssets = new GraphPassAsset[0];
   @Nonnull
   class="kw">private String exportName = "";
   @Nonnull
   class="kw">private String importName = "";
   @Nonnull
   class="kw">private String statsLabel = "UNNAMED";
   class="kw">private boolean printStats = false;
   class="kw">private int statsPrintInterval = 50;
   @Nonnull
   class="kw">private Vector3d cacheCellSize = new Vector3d(320.0, 320.0, 320.0);
   class="kw">private int cacheCapacity = 50;
   class="kw">private boolean isSingleInstance = true;

   class="kw">public GraphGeneratorAsset() {
   }

   @Nonnull
   class="kw">public GridCache<GraphSpace.ReadOnly> buildSingleInstanceGrid(@Nonnull GraphGeneratorAsset.Argument var1) {
      String var2;
      GraphGeneratorAsset var3;
      if (!this.exportName.isEmpty()) {
         var2 = this.exportName;
         var3 = this;
      } else if (!this.importName.isEmpty()) {
         var2 = this.importName;
         var3 = exportedNodes.get(var2);
         if (var3 == null) {
            class="kw">return EMPTY.buildSingleInstanceGrid(var1);
         }
      } else {
         var2 = Integer.toString(this.hashCode());
         var3 = this;
      }

      if (var3.isSingleInstance) {
         try {
            var1.threadBridge.aquire();
            GridCache var4 = var1.threadBridge.get(GridCache.class, var2);
            if (var4 == null) {
               var4 = var3.buildGrid();
               var1.threadBridge.put(GridCache.class, var2, var4);
            }

            class="kw">return var4;
         } class="kw">finally {
            var1.threadBridge.release();
         }
      } else {
         class="kw">return var3.buildGrid();
      }
   }

   @Nonnull
   class="kw">public GridCache<GraphSpace.ReadOnly> buildGrid() {
      HytaleGenerator var1 = HytaleGenerator.get();
      assert var1 != null;
      class="kw">return new GridCache<>(this.cacheCellSize, this.cacheCapacity, var1.getMaxConcurrencyLevel(), (var1x, var2) -> {
         Bounds3d var3 = new Bounds3d();
         GraphSpace var4 = new GraphSpace();
         GridCache.toCellBounds(var1x, this.cacheCellSize, var3);
         var2.generate(var4, var3);
         class="kw">return var4.toReadOnly();
      });
   }

   @Nonnull
   class="kw">public GraphGenerator buildGraphGenerator(@Nonnull GraphGeneratorAsset.Argument var1) {
      GraphGeneratorAsset var2;
      if (!this.exportName.isEmpty()) {
         var2 = this;
      } else if (!this.importName.isEmpty()) {
         var2 = exportedNodes.get(this.importName);
         if (var2 == null) {
            class="kw">return EMPTY.buildGraphGenerator(var1);
         }
      } else {
         var2 = this;
      }

      List var3 = new ArrayList<>(var2.graphPassAssets.length);

      for (GraphPassAsset var7 : var2.graphPassAssets) {
         GraphPass var8 = var7.build(var1);
         var3.add(var8);
      }

      class="kw">return new GraphGenerator(var3, this.printStats, this.statsPrintInterval, this.statsLabel);
   }

   @Nonnull
   class="kw">public String getId() {
      class="kw">return "";
   }

   @Override
   class="kw">public void cleanUp() {
      for (GraphPassAsset var4 : this.graphPassAssets) {
         var4.cleanUp();
      }

      if (!this.importName.isEmpty()) {
         GraphGeneratorAsset var6 = exportedNodes.get(this.importName);
         if (var6 != null && var6 != this) {
            for (GraphPassAsset var5 : var6.graphPassAssets) {
               var5.cleanUp();
            }
         }
      }
   }

   class="kw">public class="kw">static class Argument {
      @Nonnull
      class="kw">public SeedBox parentSeed;
      @Nonnull
      class="kw">public ReferenceBundle referenceBundle;
      @Nullable
      class="kw">public MaterialCache materialCache;
      @Nonnull
      class="kw">public WorkerIndexer.Id workerId;
      @Nonnull
      class="kw">public ThreadBridge threadBridge;
      @Nonnull
      class="kw">public Registry<GraphContentAsset> contentRegistry;

      class="kw">public Argument(
         @Nonnull SeedBox var1,
         @Nonnull ReferenceBundle var2,
         @Nullable MaterialCache var3,
         @Nonnull WorkerIndexer.Id var4,
         @Nonnull ThreadBridge var5,
         @Nonnull Registry<GraphContentAsset> var6
      ) {
         this.parentSeed = var1;
         this.referenceBundle = var2;
         this.materialCache = var3;
         this.workerId = var4;
         this.threadBridge = var5;
         this.contentRegistry = var6;
      }

      class="kw">public Argument(@Nonnull GraphGeneratorAsset.Argument var1) {
         this.parentSeed = var1.parentSeed;
         this.referenceBundle = var1.referenceBundle;
         this.materialCache = var1.materialCache;
         this.workerId = var1.workerId;
         this.threadBridge = var1.threadBridge;
         this.contentRegistry = var1.contentRegistry;
      }

      class="kw">public Argument(@Nonnull DensityAsset.Argument var1, @Nonnull Registry<GraphContentAsset> var2) {
         this.parentSeed = var1.parentSeed;
         this.referenceBundle = var1.referenceBundle;
         this.materialCache = null;
         this.workerId = var1.workerId;
         this.threadBridge = var1.threadBridge;
         this.contentRegistry = var2;
      }

      class="kw">public Argument(@Nonnull PropDistributionAsset.Argument var1, @Nonnull Registry<GraphContentAsset> var2) {
         this.parentSeed = var1.parentSeed;
         this.referenceBundle = var1.referenceBundle;
         this.materialCache = var1.materialCache;
         this.workerId = var1.workerId;
         this.threadBridge = var1.threadBridge;
         this.contentRegistry = var2;
      }

      class="kw">public Argument(@Nonnull MaterialProviderAsset.Argument var1, @Nonnull Registry<GraphContentAsset> var2) {
         this.parentSeed = var1.parentSeed;
         this.referenceBundle = var1.referenceBundle;
         this.materialCache = var1.materialCache;
         this.workerId = var1.workerId;
         this.threadBridge = var1.threadBridge;
         this.contentRegistry = var2;
      }

      class="kw">public Argument(@Nonnull PositionProviderAsset.Argument var1, @Nonnull Registry<GraphContentAsset> var2) {
         this.parentSeed = var1.parentSeed;
         this.referenceBundle = var1.referenceBundle;
         this.materialCache = null;
         this.workerId = var1.workerId;
         this.threadBridge = var1.threadBridge;
         this.contentRegistry = var2;
      }
   }
}