PixelDistanceProvider class

Пакет: com.hypixel.hytale.server.worldgen.zoom

Файл: com/hypixel/hytale/server/worldgen/zoom/PixelDistanceProvider.java

Поля (30)

МодификаторыТипИмя
final int TABLE_SIZE
private final int pixel
private final IntSet pixels
double var10
var10
int var10
int var11
int var12
int var13
int var13
int var14
int var15
int var15
double var16
double var18
IntSet var3
PixelDistanceProvider.IPixelSet var4
int var4
var5
int var5
var6
double var6
int var7
int var8
double var8
var8
int var8
double var8
int var9
int var9

Методы (31)

МодификаторыВозвратСигнатура
MultiplePixelSet MultiplePixelSet(IntSet var1)
SinglePixelSet SinglePixelSet(int var1)
protected int cellIndexint cellIndex(int var1, int var2)
protected int clampXint clampX(int var1)
protected int clampYint clampY(int var1)
public boolean containspublic boolean contains(int var1)
public boolean containspublic boolean contains(int var1)
abstract boolean containsboolean contains(int var1)
protected double distanceSqToDiffInSeqdouble distanceSqToDiffInSeq(double var1, double var3, int var5, int var6, int var7)
public double distanceSqToDifferentPixeldouble distanceSqToDifferentPixel(double var1, double var3, int var5, int var6)
static double distanceSqToPixeldouble distanceSqToPixel(double var0, double var2, int var4, int var5)
for for(int var16 = var12; var16 < var13; var16++)
for for(int var17 = var14; var17 < var15; var17++)
for for(int var12 = 0; var12 < 8; var12++)
for for(int var14 = 0; var14 < 8; var14++)
for for(int var1 = 0; var1 < this.cellsX; var1++)
for for(int var2 = 0; var2 < this.cellsY; var2++)
for for(int var6 = 0; var6 < 8; var6++)
for for(int var7 = 0; var7 < 8; var7++)
protected boolean hasDifferentPixelboolean hasDifferentPixel(int var1, int var2, int var3)
if if(var18 < var10)
if if(var16 < var8)
if if(var8 < this.width && var9 < this.height)
if if(var1 < 0)
if if(var1 < 0)
private void prepareSegmentTablevoid prepareSegmentTable()
public int sizepublic int size()
public int sizepublic int size()
abstract int sizeint size()
public String toStringpublic String toString()
public String toStringpublic String toString()

Исходный код

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

class="kw">import it.unimi.dsi.fastutil.ints.IntOpenHashSet;
class="kw">import it.unimi.dsi.fastutil.ints.IntSet;
class="kw">import javax.annotation.Nonnull;

class="kw">public class PixelDistanceProvider {
   class="kw">private class="kw">static class="kw">final int TABLE_SIZE = 8;
   @Nonnull
   class="kw">protected class="kw">final PixelProvider image;
   class="kw">protected class="kw">final int width;
   class="kw">protected class="kw">final int height;
   class="kw">protected class="kw">final int cellsX;
   class="kw">protected class="kw">final int cellsY;
   @Nonnull
   class="kw">protected class="kw">final PixelDistanceProvider.IPixelSet[] table;
   @Nonnull
   class="kw">protected class="kw">final IntSet pixels;

   class="kw">public PixelDistanceProvider(@Nonnull PixelProvider var1) {
      this.image = var1;
      this.width = var1.getWidth();
      this.height = var1.getHeight();
      this.cellsX = var1.getWidth() / 8;
      this.cellsY = var1.getHeight() / 8;
      this.table = new PixelDistanceProvider.IPixelSet[this.cellsX * this.cellsY];
      this.pixels = new IntOpenHashSet();
      this.prepareSegmentTable();
   }

   @Nonnull
   class="kw">public IntSet getColors() {
      class="kw">return this.pixels;
   }

   class="kw">public double distanceSqToDifferentPixel(double var1, double var3, int var5, int var6) {
      var5 = this.clampX(var5);
      var6 = this.clampY(var6);
      int var7 = this.image.getPixel(var5, var6);
      int var8 = var5 / 8;
      int var9 = var6 / 8;
      double var10 = Double.POSITIVE_INFINITY;
      int var12 = Math.max(var8 - 1, 0);
      int var13 = Math.min(var8 + 2, this.cellsX);
      int var14 = Math.max(var9 - 1, 0);
      int var15 = Math.min(var9 + 2, this.cellsY);

      for (int var16 = var12; var16 < var13; var16++) {
         for (int var17 = var14; var17 < var15; var17++) {
            double var18 = this.distanceSqToDiffInSeq(var1, var3, var7, var16, var17);
            if (var18 < var10) {
               var10 = var18;
            }
         }
      }

      class="kw">return var10;
   }

   class="kw">protected double distanceSqToDiffInSeq(double var1, double var3, int var5, int var6, int var7) {
      double var8 = Double.POSITIVE_INFINITY;
      if (this.hasDifferentPixel(var6, var7, var5)) {
         int var10 = var6 * 8;
         int var11 = var7 * 8;

         for (int var12 = 0; var12 < 8; var12++) {
            int var13 = var12 + var10;

            for (int var14 = 0; var14 < 8; var14++) {
               int var15 = var14 + var11;
               if (var5 != this.image.getPixel(var13, var15)) {
                  double var16 = distanceSqToPixel(var1, var3, var13, var15);
                  if (var16 < var8) {
                     var8 = var16;
                  }
               }
            }
         }
      }

      class="kw">return var8;
   }

   class="kw">protected boolean hasDifferentPixel(int var1, int var2, int var3) {
      PixelDistanceProvider.IPixelSet var4 = this.table[this.cellIndex(var1, var2)];
      class="kw">return !var4.contains(var3) || var4.size() > 1;
   }

   class="kw">private void prepareSegmentTable() {
      for (int var1 = 0; var1 < this.cellsX; var1++) {
         for (int var2 = 0; var2 < this.cellsY; var2++) {
            IntSet var3 = new IntOpenHashSet();
            int var4 = var1 * 8;
            int var5 = var2 * 8;

            for (int var6 = 0; var6 < 8; var6++) {
               for (int var7 = 0; var7 < 8; var7++) {
                  int var8 = var6 + var4;
                  int var9 = var7 + var5;
                  if (var8 < this.width && var9 < this.height) {
                     var3.add(this.image.getPixel(var8, var9));
                  }
               }
            }

            this.pixels.addAll(var3);
            if (var3.size() == 1) {
               this.table[this.cellIndex(var1, var2)] = new PixelDistanceProvider.SinglePixelSet(var3.iterator().nextInt());
            } else {
               this.table[this.cellIndex(var1, var2)] = new PixelDistanceProvider.MultiplePixelSet(var3);
            }
         }
      }
   }

   class="kw">protected int clampX(int var1) {
      if (var1 < 0) {
         class="kw">return 0;
      } else {
         class="kw">return var1 >= this.width ? this.width - 1 : var1;
      }
   }

   class="kw">protected int clampY(int var1) {
      if (var1 < 0) {
         class="kw">return 0;
      } else {
         class="kw">return var1 >= this.height ? this.height - 1 : var1;
      }
   }

   class="kw">protected int cellIndex(int var1, int var2) {
      class="kw">return var1 * this.cellsY + var2;
   }

   class="kw">private class="kw">static double distanceSqToPixel(double var0, double var2, int var4, int var5) {
      double var6 = Math.max(Math.max(var4 - var0, var0 - var4 - 1.0), 0.0);
      double var8 = Math.max(Math.max(var5 - var2, var2 - var5 - 1.0), 0.0);
      class="kw">return var6 * var6 + var8 * var8;
   }

   class="kw">private class="kw">interface IPixelSet {
      boolean contains(int var1);

      int size();
   }

   class="kw">private class="kw">static class MultiplePixelSet class="kw">implements PixelDistanceProvider.IPixelSet {
      class="kw">private class="kw">final IntSet pixels;

      MultiplePixelSet(IntSet var1) {
         this.pixels = var1;
      }

      @Override
      class="kw">public boolean contains(int var1) {
         class="kw">return this.pixels.contains(var1);
      }

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

      @Nonnull
      @Override
      class="kw">public String toString() {
         class="kw">return "MultiplePixelSet{pixels=" + this.pixels + "}";
      }
   }

   class="kw">private class="kw">static class SinglePixelSet class="kw">implements PixelDistanceProvider.IPixelSet {
      class="kw">private class="kw">final int pixel;

      SinglePixelSet(int var1) {
         this.pixel = var1;
      }

      @Override
      class="kw">public boolean contains(int var1) {
         class="kw">return this.pixel == var1;
      }

      @Override
      class="kw">public int size() {
         class="kw">return 1;
      }

      @Nonnull
      @Override
      class="kw">public String toString() {
         class="kw">return "SinglePixelSet{pixel=" + this.pixel + "}";
      }
   }
}