WallDirection enum

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

Файл: com/hypixel/hytale/builtin/hytalegenerator/patterns/WallPattern.java

Поля (2)

МодификаторыТипИмя
public static final Codec<WallPattern.WallDirection> CODEC
N, S, E, W

Исходный код

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

class="kw">import com.hypixel.hytale.builtin.hytalegenerator.bounds.Bounds3i;
class="kw">import com.hypixel.hytale.codec.Codec;
class="kw">import com.hypixel.hytale.codec.codecs.EnumCodec;
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 WallPattern class="kw">extends Pattern {
   @Nonnull
   class="kw">private class="kw">final Pattern wallPattern;
   @Nonnull
   class="kw">private class="kw">final Pattern originPattern;
   @Nonnull
   class="kw">private class="kw">final List<WallPattern.WallDirection> directions;
   class="kw">private class="kw">final boolean matchAll;
   @Nonnull
   class="kw">private class="kw">final Bounds3i bounds_voxelGrid;
   @Nonnull
   class="kw">private class="kw">final Vector3i rWallPosition;
   @Nonnull
   class="kw">private class="kw">final Pattern.Context rWallContext;

   class="kw">public WallPattern(@Nonnull Pattern var1, @Nonnull Pattern var2, @Nonnull List<WallPattern.WallDirection> var3, boolean var4) {
      this.wallPattern = var1;
      this.originPattern = var2;
      this.directions = new ArrayList<>(var3);
      this.matchAll = var4;
      this.rWallPosition = new Vector3i();
      this.rWallContext = new Pattern.Context();
      this.bounds_voxelGrid = var2.getBounds_voxelGrid().clone();
      Bounds3i var5 = var1.getBounds_voxelGrid().clone();

      for (WallPattern.WallDirection var7 : this.directions) {
         class="kw">switch (var7) {
            case N:
               this.bounds_voxelGrid.encompass(var5.clone().offset(new Vector3i(0, 0, -1)));
               break;
            case S:
               this.bounds_voxelGrid.encompass(var5.clone().offset(new Vector3i(0, 0, 1)));
               break;
            case E:
               this.bounds_voxelGrid.encompass(var5.clone().offset(new Vector3i(1, 0, 0)));
               break;
            case W:
               this.bounds_voxelGrid.encompass(var5.clone().offset(new Vector3i(-1, 0, 0)));
         }
      }
   }

   @Override
   class="kw">public boolean matches(@Nonnull Pattern.Context var1) {
      for (WallPattern.WallDirection var3 : this.directions) {
         boolean var4 = this.matches(var1, var3);
         if (this.matchAll && !var4) {
            class="kw">return false;
         }

         if (var4) {
            class="kw">return true;
         }
      }

      class="kw">return false;
   }

   class="kw">private boolean matches(@Nonnull Pattern.Context var1, @Nonnull WallPattern.WallDirection var2) {
      this.rWallPosition.set(var1.position);
      class="kw">switch (var2) {
         case N:
            this.rWallPosition.z--;
            break;
         case S:
            this.rWallPosition.z++;
            break;
         case E:
            this.rWallPosition.x++;
            break;
         case W:
            this.rWallPosition.x--;
      }

      this.rWallContext.assign(var1);
      this.rWallContext.position = this.rWallPosition;
      boolean var3 = this.originPattern.matches(var1) && this.wallPattern.matches(this.rWallContext);
      this.rWallContext.clearReferences();
      class="kw">return var3;
   }

   @Nonnull
   @Override
   class="kw">public Bounds3i getBounds_voxelGrid() {
      class="kw">return this.bounds_voxelGrid;
   }

   class="kw">public enum WallDirection {
      N,
      S,
      E,
      W;

      @Nonnull
      class="kw">public class="kw">static class="kw">final Codec<WallPattern.WallDirection> CODEC = new EnumCodec<>(WallPattern.WallDirection.class, EnumCodec.EnumStyle.LEGACY);

      WallDirection() {
      }
   }
}