SpatialData class

Пакет: com.hypixel.hytale.component.spatial

Файл: com/hypixel/hytale/component/spatial/SpatialData.java

Поля (24)

МодификаторыТипИмя
final Vector3d[] EMPTY_VECTOR_ARRAY
double var1
var1
double var11
var11
Vector3d var14
Vector3d var16
int var2
int var3
int var3
int var3
Vector3d var3
double var3
var3
Vector3d var4
int var5
int var5
double var5
var5
int var6
double var7
var7
double var9
var9

Методы (21)

МодификаторыВозвратСигнатура
public void addvoid add(@Nonnull Vector3d var1, @Nonnull T var2)
public void addCapacityvoid addCapacity(int var1)
public void appendvoid append(@Nonnull Vector3d var1, @Nonnull T var2)
public void clearvoid clear()
for for(int var4 = this.size; var4 < var3; var4++)
for for(int var4 = this.size; var4 < var3; var4++)
for for(int var13 = 0; var13 < this.size; var13++)
for for(int var15 = 0; var15 < this.size; var15++)
public int getSortedIndexint getSortedIndex(int var1)
if if(this.vectors.length < this.size + 1)
if if(this.vectors.length < var2)
if if(var5 != 0)
if if(var14.x < var1)
if if(var14.y < var3)
if if(var14.z < var5)
if if(var14.x > var7)
if if(var14.y > var9)
if if(var14.z > var11)
public int sizeint size()
public void sortvoid sort()
public void sortMortonvoid sortMorton()

Исходный код

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

class="kw">import com.hypixel.hytale.common.util.ArrayUtil;
class="kw">import it.unimi.dsi.fastutil.ints.IntArrays;
class="kw">import java.util.Arrays;
class="kw">import java.util.Objects;
class="kw">import javax.annotation.Nonnull;
class="kw">import org.joml.Vector3d;

class="kw">public class SpatialData<T> {
   class="kw">public class="kw">static class="kw">final Vector3d[] EMPTY_VECTOR_ARRAY = new Vector3d[0];
   @Nonnull
   class="kw">private int[] indexes = ArrayUtil.EMPTY_INT_ARRAY;
   @Nonnull
   class="kw">private long[] moroton = ArrayUtil.EMPTY_LONG_ARRAY;
   class="kw">private Vector3d[] vectors = EMPTY_VECTOR_ARRAY;
   @Nonnull
   class="kw">private T[] data = (T[])ArrayUtil.emptyArray();
   class="kw">private int size;

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

   class="kw">public int size() {
      class="kw">return this.size;
   }

   class="kw">public int getSortedIndex(int var1) {
      class="kw">return this.indexes[var1];
   }

   @Nonnull
   class="kw">public Vector3d getVector(int var1) {
      class="kw">return this.vectors[var1];
   }

   @Nonnull
   class="kw">public T getData(int var1) {
      class="kw">return this.data[var1];
   }

   class="kw">public void add(@Nonnull Vector3d var1, @Nonnull T var2) {
      Objects.requireNonNull(var2);
      if (this.vectors.length < this.size + 1) {
         int var3 = ArrayUtil.grow(this.size);
         this.indexes = Arrays.copyOf(this.indexes, var3);
         this.vectors = Arrays.copyOf(this.vectors, var3);
         this.data = (T[])Arrays.copyOf(this.data, var3);

         for (int var4 = this.size; var4 < var3; var4++) {
            this.vectors[var4] = new Vector3d();
         }
      }

      int var5 = this.size++;
      this.indexes[var5] = var5;
      this.vectors[var5].set(var1);
      this.data[var5] = var2;
   }

   class="kw">public void addCapacity(int var1) {
      int var2 = this.size + var1;
      if (this.vectors.length < var2) {
         int var3 = ArrayUtil.grow(var2);
         this.indexes = Arrays.copyOf(this.indexes, var3);
         this.vectors = Arrays.copyOf(this.vectors, var3);
         this.data = (T[])Arrays.copyOf(this.data, var3);

         for (int var4 = this.size; var4 < var3; var4++) {
            this.vectors[var4] = new Vector3d();
         }
      }
   }

   class="kw">public void append(@Nonnull Vector3d var1, @Nonnull T var2) {
      Objects.requireNonNull(var2);
      int var3 = this.size++;
      this.indexes[var3] = var3;
      this.vectors[var3].set(var1);
      this.data[var3] = var2;
   }

   class="kw">public void sort() {
      IntArrays.quickSort(this.indexes, 0, this.size, (var1, var2) -> {
         Vector3d var3 = this.vectors[var1];
         Vector3d var4 = this.vectors[var2];
         int var5 = Double.compare(var3.x, var4.x);
         if (var5 != 0) {
            class="kw">return var5;
         }

         int var6 = Double.compare(var3.z, var4.z);
         class="kw">return var6 != 0 ? var6 : Double.compare(var3.y, var4.y);
      });
   }

   class="kw">public void sortMorton() {
      double var1 = Double.POSITIVE_INFINITY;
      double var3 = Double.POSITIVE_INFINITY;
      double var5 = Double.POSITIVE_INFINITY;
      double var7 = Double.NEGATIVE_INFINITY;
      double var9 = Double.NEGATIVE_INFINITY;
      double var11 = Double.NEGATIVE_INFINITY;

      for (int var13 = 0; var13 < this.size; var13++) {
         Vector3d var14 = this.vectors[var13];
         if (var14.x < var1) {
            var1 = var14.x;
         }

         if (var14.y < var3) {
            var3 = var14.y;
         }

         if (var14.z < var5) {
            var5 = var14.z;
         }

         if (var14.x > var7) {
            var7 = var14.x;
         }

         if (var14.y > var9) {
            var9 = var14.y;
         }

         if (var14.z > var11) {
            var11 = var14.z;
         }
      }

      this.moroton = this.moroton.length < this.size ? Arrays.copyOf(this.moroton, this.size) : this.moroton;

      for (int var15 = 0; var15 < this.size; var15++) {
         Vector3d var16 = this.vectors[var15];
         this.moroton[var15] = Long.reverse(MortonCode.encode(var16.x, var16.y, var16.z, var1, var3, var5, var7, var9, var11));
      }

      IntArrays.quickSort(this.indexes, 0, this.size, (var1x, var2) -> Long.compare(this.moroton[var1x], this.moroton[var2]));
   }

   class="kw">public void clear() {
      Arrays.fill(this.data, 0, this.size, null);
      this.size = 0;
   }
}