classpublicPriority 3
ImageCarta
com.hypixel.hytale.builtin.hytalegenerator.framework.cartas.ImageCarta
extends TriCarta
11
Methods
11
Public Methods
7
Fields
1
Constructors
Constructors
private
ImageCarta()Methods
Public Methods (11)
public
ImageCarta.Builder<R> addTerrainRgb(int rgb, R terrain)@Nonnull
public
List<R> allPossibleValues()@Override
public
R apply(int x, int y, int z, WorkerIndexer.Id tHreadId)@Nullable@Override
publicstatic
int blueFromRgb(int rgb)public
ImageCarta<R> build()@Nonnull
publicstatic
int coloursToRgb(int red, int green, int blue)publicstatic
int greenFromRgb(int rgb)publicstatic
int redFromRgb(int rgb)public
String toString()@Nonnull@Override
public
ImageCarta.Builder<R> withImage(BufferedImage image)@Nonnull
public
ImageCarta.Builder<R> withNoiseFunctions(TriDoubleFunction<Double> noiseX, TriDoubleFunction<Double> noiseY)@Nonnull
Fields
Private/Package Fields (7)
private
List<R> allPossibleValuesprivate
TriDoubleFunction<Double> functionXprivate
TriDoubleFunction<Double> functionYprivate
int heightprivate
int[] rgbArrayprivate
Map<Integer, R> rgbToTerrainMapprivate
int widthInheritance
Parent
Current
Interface
Child
Use mouse wheel to zoom, drag to pan. Click nodes to navigate.
Related Classes
Source Code
package com.hypixel.hytale.builtin.hytalegenerator.framework.cartas;
import com.hypixel.hytale.builtin.hytalegenerator.framework.interfaces.functions.TriCarta;
import com.hypixel.hytale.builtin.hytalegenerator.framework.interfaces.functions.TriDoubleFunction;
import com.hypixel.hytale.builtin.hytalegenerator.framework.math.Calculator;
import com.hypixel.hytale.builtin.hytalegenerator.threadindexer.WorkerIndexer;
import java.awt.image.BufferedImage;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
public class ImageCarta<R> extends TriCarta<R> {
private int[] rgbArray;
private int width;
private int height;
private TriDoubleFunction<Double> functionX;
private TriDoubleFunction<Double> functionY;
private Map<Integer, R> rgbToTerrainMap;
private List<R> allPossibleValues;
private ImageCarta() {
}
@Nullable
@Override
public R apply(int x, int y, int z, @Nonnull WorkerIndexer.Id tHreadId) {
Objects.requireNonNull(x);
Objects.requireNonNull(y);
Objects.requireNonNull(z);
int sampleX = Calculator.toNearestInt(this.functionX.apply((double)x, (double)y, (double)z) * (double)this.width);
sampleX = sampleX < 0 ? 0 : Math.min(sampleX, this.width - 1);
int sampleY = Calculator.toNearestInt(this.functionY.apply((double)x, (double)y, (double)z) * (double)this.height);
sampleY = sampleY < 0 ? 0 : Math.min(sampleY, this.height - 1);
int rgb = this.rgbArray[sampleX + sampleY * this.width];
return !this.rgbToTerrainMap.containsKey(rgb) ? null : this.rgbToTerrainMap.get(rgb);
}
@Override
public List<R> allPossibleValues() {
return this.allPossibleValues;
}
public static int greenFromRgb(int rgb) {
return (rgb & 0xFF00) >> 8;
}
public static int redFromRgb(int rgb) {
return (rgb & 0xFF0000) >> 16;
}
public static int blueFromRgb(int rgb) {
return rgb & 0xFF;
}
public static int coloursToRgb(int red, int green, int blue) {
int rgb = red << 16;
rgb += green << 8;
return rgb + blue;
}
@Nonnull
@Override
public String toString() {
return "ImageCarta{rgbArray="
+ Arrays.toString(this.rgbArray)
+ ", width="
+ this.width
+ ", height="
+ this.height
+ ", functionX="
+ this.functionX
+ ", functionY="
+ this.functionY
+ ", rgbToTerrainMap="
+ this.rgbToTerrainMap
+ ", allPossibleValues="
+ this.allPossibleValues
+ "}";
}
public static class Builder<R> {
@Nonnull
private final Map<Integer, R> rgbToTerrainMap = new HashMap<>();
private BufferedImage bufferedImage;
private boolean bufferedImageCheck;
private TriDoubleFunction<Double> noiseX;
private TriDoubleFunction<Double> noiseY;
private boolean noiseCheck;
public Builder() {
}
@Nonnull
public ImageCarta<R> build() {
if (this.bufferedImageCheck && this.noiseCheck) {
ImageCarta<R> instance = new ImageCarta<>();
instance.rgbToTerrainMap = this.rgbToTerrainMap;
instance.functionX = this.noiseX;
instance.functionY = this.noiseY;
instance.allPossibleValues = new ArrayList<>(1);
instance.allPossibleValues.addAll(this.rgbToTerrainMap.values());
instance.width = this.bufferedImage.getWidth();
instance.height = this.bufferedImage.getHeight();
instance.rgbArray = new int[instance.width * instance.height];
for (int x = 0; x < instance.width; x++) {
for (int y = 0; y < instance.height; y++) {
instance.rgbArray[x + y * instance.width] = 16777215 & this.bufferedImage.getRGB(x, y);
}
}
return instance;
} else {
throw new IllegalStateException("incomplete builder");
}
}
@Nonnull
public ImageCarta.Builder<R> withImage(BufferedImage image) {
Objects.requireNonNull(image);
this.bufferedImage = image;
this.bufferedImageCheck = true;
return this;
}
@Nonnull
public ImageCarta.Builder<R> withNoiseFunctions(TriDoubleFunction<Double> noiseX, TriDoubleFunction<Double> noiseY) {
Objects.requireNonNull(noiseX);
Objects.requireNonNull(noiseY);
this.noiseX = noiseX;
this.noiseY = noiseY;
this.noiseCheck = true;
return this;
}
@Nonnull
public ImageCarta.Builder<R> addTerrainRgb(int rgb, @Nonnull R terrain) {
this.rgbToTerrainMap.put(rgb, terrain);
return this;
}
}
}