Extrude class
Пакет: com.hypixel.hytale.server.core.modules.interaction.interaction.config.client
Файл: com/hypixel/hytale/server/core/modules/interaction/interaction/config/client/PlacementGestureTracker.java
extends: PlacementGestureTracker
Поля (4)
| Модификаторы | Тип | Имя |
|---|---|---|
|
private boolean |
downgraded |
|
private int |
lineAxis |
|
private final Set<Vector3i> |
placed |
|
int |
var3 |
Методы (7)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
|
protected boolean |
acceptprotected boolean accept(@Nonnull Vector3ic var1, boolean var2, boolean var3) |
|
private boolean |
acceptStrictprivate boolean acceptStrict(@Nonnull Vector3ic var1, boolean var2) |
|
|
if if(var2) |
|
|
if if(var2) |
|
|
if if(var3 == 0) |
|
|
if if(this.lineAxis == 0) |
|
protected void |
onAcceptedprotected void onAccepted(@Nonnull Vector3ic var1, boolean var2) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.server.core.modules.interaction.interaction.config.client;
class="kw">import java.util.HashSet;
class="kw">import java.util.Set;
class="kw">import javax.annotation.Nonnull;
class="kw">import org.joml.Vector3i;
class="kw">import org.joml.Vector3ic;
class="kw">public class PlacementGestureTracker {
class="kw">private class="kw">static class="kw">final int ALL_AXES = 7;
class="kw">private class="kw">final Set<Vector3i> accepted = new HashSet<>();
class="kw">private class="kw">final Vector3i anchor = new Vector3i();
class="kw">private boolean hasAnchor;
class="kw">private int planeAxes = 7;
class="kw">private int violations;
class="kw">public PlacementGestureTracker() {
}
class="kw">public class="kw">final boolean validatePlacement(@Nonnull Vector3ic var1, boolean var2, boolean var3) {
if (this.accept(var1, var2, var3)) {
this.recordAccepted(var1, var2);
class="kw">return true;
} else {
this.violations++;
class="kw">return false;
}
}
class="kw">public class="kw">final int getViolations() {
class="kw">return this.violations;
}
class="kw">protected boolean accept(@Nonnull Vector3ic var1, boolean var2, boolean var3) {
if (var3) {
class="kw">return true;
} else {
class="kw">return !this.hasAnchor ? true : this.isCoplanarWithAccepted(var1) || this.isAdjacentToAccepted(var1);
}
}
class="kw">protected class="kw">final boolean isCoplanarWithAccepted(@Nonnull Vector3ic var1) {
class="kw">return (this.planeAxes & this.matchingAnchorAxes(var1)) != 0;
}
class="kw">protected class="kw">final boolean isAdjacentToAccepted(@Nonnull Vector3ic var1) {
Vector3i var2 = new Vector3i();
for (int var3 = 0; var3 < 3; var3++) {
for (int var4 = -1; var4 <= 1; var4 += 2) {
var2.set(var1).setComponent(var3, var1.get(var3) + var4);
if (this.accepted.contains(var2)) {
class="kw">return true;
}
}
}
class="kw">return false;
}
class="kw">protected class="kw">final boolean isAccepted(@Nonnull Vector3ic var1) {
class="kw">return this.accepted.contains(new Vector3i(var1));
}
class="kw">protected class="kw">final boolean hasAnchor() {
class="kw">return this.hasAnchor;
}
class="kw">protected class="kw">final int matchingAnchorAxes(@Nonnull Vector3ic var1) {
int var2 = 0;
for (int var3 = 0; var3 < 3; var3++) {
if (var1.get(var3) == this.anchor.get(var3)) {
var2 |= 1 << var3;
}
}
class="kw">return var2;
}
class="kw">protected void onAccepted(@Nonnull Vector3ic var1, boolean var2) {
}
class="kw">private void recordAccepted(@Nonnull Vector3ic var1, boolean var2) {
if (!this.hasAnchor) {
this.anchor.set(var1);
this.hasAnchor = true;
}
this.planeAxes = this.planeAxes & this.matchingAnchorAxes(var1);
this.accepted.add(new Vector3i(var1));
this.onAccepted(var1, var2);
}
class="kw">public class="kw">static class Extrude class="kw">extends PlacementGestureTracker {
class="kw">private class="kw">final Set<Vector3i> placed = new HashSet<>();
class="kw">private int lineAxis;
class="kw">private boolean downgraded;
class="kw">public Extrude() {
}
@Override
class="kw">protected boolean accept(@Nonnull Vector3ic var1, boolean var2, boolean var3) {
if (!this.downgraded && this.acceptStrict(var1, var2)) {
class="kw">return true;
}
this.downgraded = true;
class="kw">return super.accept(var1, var2, var3);
}
@Override
class="kw">protected void onAccepted(@Nonnull Vector3ic var1, boolean var2) {
if (var2) {
this.placed.remove(new Vector3i(var1));
} else {
this.placed.add(new Vector3i(var1));
}
}
class="kw">private boolean acceptStrict(@Nonnull Vector3ic var1, boolean var2) {
if (var2) {
class="kw">return this.placed.contains(new Vector3i(var1));
}
if (!this.hasAnchor()) {
class="kw">return true;
}
int var3 = 7 & ~this.matchingAnchorAxes(var1);
if (var3 == 0) {
class="kw">return true;
}
if (Integer.bitCount(var3) > 1) {
class="kw">return false;
}
if (this.lineAxis == 0) {
this.lineAxis = var3;
}
class="kw">return var3 == this.lineAxis;
}
}
class="kw">public class="kw">static class SurfaceDraw class="kw">extends PlacementGestureTracker {
class="kw">private boolean downgraded;
class="kw">public SurfaceDraw() {
}
@Override
class="kw">protected boolean accept(@Nonnull Vector3ic var1, boolean var2, boolean var3) {
if (!this.downgraded && this.acceptStrict(var1, var2)) {
class="kw">return true;
}
this.downgraded = true;
class="kw">return super.accept(var1, var2, var3);
}
class="kw">private boolean acceptStrict(@Nonnull Vector3ic var1, boolean var2) {
if (var2) {
class="kw">return false;
} else {
class="kw">return !this.hasAnchor() ? true : !this.isAccepted(var1) && this.isCoplanarWithAccepted(var1);
}
}
}
}