OrienterProp class
Пакет: com.hypixel.hytale.builtin.hytalegenerator.props
Файл: com/hypixel/hytale/builtin/hytalegenerator/props/OrienterProp.java
extends: Prop
Поля (12)
| Модификаторы | Тип | Имя |
|---|---|---|
|
ALL_VALID,
FIRST_VALID, |
RANDOM_VALID |
|
|
return |
|
Pattern |
var10 |
|
Bounds3i |
var11 |
|
Bounds3i |
var12 |
|
Bounds3i |
var13 |
|
Pattern |
var4 |
|
Pattern |
var4 |
|
Prop |
var5 |
|
int |
var5 |
|
Prop |
var6 |
|
Prop |
var9 |
Методы (7)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
|
|
SelectionMode SelectionMode() |
|
public void |
acceptpublic void accept(@Nonnull Vector3i var1, @Nonnull Control var2) |
|
public void |
acceptpublic void accept(@Nonnull Vector3i var1, @Nonnull Control var2) |
abstract |
|
for for(int var3 = 0; var3 < OrienterProp.this.patterns.size() |
abstract |
|
for for(int var8 = 0; var8 < var1.size() |
|
|
if if(OrienterProp.this.selectionMode == OrienterProp.SelectionMode.FIRST_VALID) |
|
|
if if(this.selectionMode != OrienterProp.SelectionMode.FIRST_VALID && this.selectionMode != OrienterProp.SelectionMode.ALL_VALID) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.builtin.hytalegenerator.props;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.bounds.Bounds3i;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.material.MaterialCache;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.patterns.Pattern;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.patterns.RotatorPattern;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.pipe.Control;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.pipe.Pipe;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.rng.RngField;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.scanners.Scanner;
class="kw">import com.hypixel.hytale.math.util.FastRandom;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.RotationTuple;
class="kw">import it.unimi.dsi.fastutil.ints.IntArrayList;
class="kw">import it.unimi.dsi.fastutil.ints.IntList;
class="kw">import java.util.ArrayList;
class="kw">import java.util.List;
class="kw">import javax.annotation.Nonnull;
class="kw">import org.joml.Vector3i;
class="kw">public class OrienterProp class="kw">extends Prop {
@Nonnull
class="kw">private class="kw">final List<Prop> props;
@Nonnull
class="kw">private class="kw">final List<Pattern> patterns;
@Nonnull
class="kw">private class="kw">final Scanner scanner;
@Nonnull
class="kw">private class="kw">final OrienterProp.SelectionMode selectionMode;
@Nonnull
class="kw">private class="kw">final RngField rngField;
@Nonnull
class="kw">private class="kw">final Bounds3i readBounds;
@Nonnull
class="kw">private class="kw">final Bounds3i writeBounds;
@Nonnull
class="kw">private class="kw">final FastRandom random;
@Nonnull
class="kw">private class="kw">final Pattern.Context rPatternContext;
@Nonnull
class="kw">private class="kw">final Prop.Context rChildContext;
@Nonnull
class="kw">private class="kw">final boolean[] rHasGenerated;
@Nonnull
class="kw">private class="kw">final IntList rValidPatternIndices;
@Nonnull
class="kw">private Prop.Context rContext;
@Nonnull
class="kw">private class="kw">final Pipe.One<Vector3i> rFirstAllValidPipe = new Pipe.One<Vector3i>() {
class="kw">public void accept(@Nonnull Vector3i var1, @Nonnull Control var2) {
OrienterProp.this.rPatternContext.position = var1;
for (int var3 = 0; var3 < OrienterProp.this.patterns.size(); var3++) {
Pattern var4 = OrienterProp.this.patterns.get(var3);
if (var4.matches(OrienterProp.this.rPatternContext)) {
Prop var5 = OrienterProp.this.props.get(var3);
OrienterProp.this.rChildContext.assign(OrienterProp.this.rContext);
OrienterProp.this.rChildContext.position = var1;
OrienterProp.this.rHasGenerated[0] = var5.generate(OrienterProp.this.rChildContext);
var2.stop = true;
if (OrienterProp.this.selectionMode == OrienterProp.SelectionMode.FIRST_VALID) {
class="kw">return;
}
}
}
}
};
@Nonnull
class="kw">private class="kw">final Pipe.One<Vector3i> rRandomValidPipe = new Pipe.One<Vector3i>() {
class="kw">public void accept(@Nonnull Vector3i var1, @Nonnull Control var2) {
OrienterProp.this.rPatternContext.position = var1;
OrienterProp.this.rValidPatternIndices.clear();
for (int var3 = 0; var3 < OrienterProp.this.patterns.size(); var3++) {
Pattern var4 = OrienterProp.this.patterns.get(var3);
if (var4.matches(OrienterProp.this.rPatternContext)) {
OrienterProp.this.rValidPatternIndices.add(var3);
}
}
if (!OrienterProp.this.rValidPatternIndices.isEmpty()) {
OrienterProp.this.random.setSeed(OrienterProp.this.rngField.get(var1.x, var1.y, var1.z));
int var5 = OrienterProp.this.random.nextInt(OrienterProp.this.rValidPatternIndices.size());
Prop var6 = OrienterProp.this.props.get(OrienterProp.this.rValidPatternIndices.getInt(var5));
OrienterProp.this.rChildContext.assign(OrienterProp.this.rContext);
OrienterProp.this.rChildContext.position = var1;
OrienterProp.this.rHasGenerated[0] = var6.generate(OrienterProp.this.rChildContext);
var2.stop = true;
}
}
};
class="kw">public OrienterProp(
@Nonnull List<RotationTuple> var1,
@Nonnull Prop var2,
@Nonnull Pattern var3,
@Nonnull Scanner var4,
@Nonnull MaterialCache var5,
@Nonnull OrienterProp.SelectionMode var6,
int var7
) {
this.props = new ArrayList<>(var1.size());
this.patterns = new ArrayList<>(var1.size());
this.scanner = var4;
this.selectionMode = var6;
this.rngField = new RngField(var7);
this.readBounds = new Bounds3i();
this.writeBounds = new Bounds3i();
this.random = new FastRandom();
for (int var8 = 0; var8 < var1.size(); var8++) {
Prop var9 = new StaticRotatorProp(var2, var1.get(var8), var5);
Pattern var10 = new RotatorPattern(var3, var1.get(var8), var5);
this.props.add(var9);
this.patterns.add(var10);
Bounds3i var11 = var4.getBoundsWithPattern_voxelGrid(var10);
Bounds3i var12 = var9.getReadBounds_voxelGrid();
if (!var12.isZeroVolume()) {
var11.stack(var12);
}
this.readBounds.encompass(var11);
Bounds3i var13 = var9.getWriteBounds_voxelGrid().clone();
if (!var13.isZeroVolume()) {
var13.stack(var11);
}
this.writeBounds.encompass(var13);
}
this.rPatternContext = new Pattern.Context();
this.rChildContext = new Prop.Context();
this.rHasGenerated = new boolean[1];
this.rValidPatternIndices = new IntArrayList(this.patterns.size());
this.rContext = Prop.Context.DEFAULT_INSTANCE;
}
@Override
class="kw">public boolean generate(@Nonnull Prop.Context var1) {
this.rContext = var1;
this.rPatternContext.assign(var1);
this.rHasGenerated[0] = false;
if (this.selectionMode != OrienterProp.SelectionMode.FIRST_VALID && this.selectionMode != OrienterProp.SelectionMode.ALL_VALID) {
this.scanner.scan(var1.position, this.rRandomValidPipe);
} else {
this.scanner.scan(var1.position, this.rFirstAllValidPipe);
}
this.rChildContext.clearReferences();
this.rPatternContext.clearReferences();
this.rContext = Prop.Context.DEFAULT_INSTANCE;
class="kw">return this.rHasGenerated[0];
}
@Nonnull
@Override
class="kw">public Bounds3i getReadBounds_voxelGrid() {
class="kw">return this.readBounds;
}
@Nonnull
@Override
class="kw">public Bounds3i getWriteBounds_voxelGrid() {
class="kw">return this.writeBounds;
}
class="kw">public enum SelectionMode {
ALL_VALID,
FIRST_VALID,
RANDOM_VALID;
SelectionMode() {
}
}
}