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