mirror of
https://github.com/PolyhedralDev/Terra.git
synced 2026-02-16 10:30:42 +00:00
ColorPicker -> ColorSampler
This commit is contained in:
@@ -7,28 +7,25 @@
|
||||
|
||||
package com.dfsek.terra.addons.biome.image;
|
||||
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.util.Optional;
|
||||
|
||||
import com.dfsek.terra.addons.image.converter.ColorConverter;
|
||||
import com.dfsek.terra.addons.image.picker.ColorPicker;
|
||||
import com.dfsek.terra.addons.image.sampler.ColorSampler;
|
||||
import com.dfsek.terra.api.world.biome.Biome;
|
||||
import com.dfsek.terra.api.world.biome.generation.BiomeProvider;
|
||||
|
||||
|
||||
public class ImageBiomeProvider implements BiomeProvider {
|
||||
private final BufferedImage image;
|
||||
private final int resolution;
|
||||
|
||||
private final ColorConverter<Biome> colorConverter;
|
||||
|
||||
private final ColorPicker colorPicker;
|
||||
private final ColorSampler colorSampler;
|
||||
|
||||
public ImageBiomeProvider(BufferedImage image, ColorConverter<Biome> colorConverter, ColorPicker colorPicker, int resolution) {
|
||||
this.image = image;
|
||||
public ImageBiomeProvider(ColorConverter<Biome> colorConverter, ColorSampler colorSampler, int resolution) {
|
||||
this.resolution = resolution;
|
||||
this.colorConverter = colorConverter;
|
||||
this.colorPicker = colorPicker;
|
||||
this.colorSampler = colorSampler;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -39,7 +36,7 @@ public class ImageBiomeProvider implements BiomeProvider {
|
||||
public Biome getBiome(int x, int z) {
|
||||
x /= resolution;
|
||||
z /= resolution;
|
||||
return colorConverter.apply(colorPicker.apply(image, x, z));
|
||||
return colorConverter.apply(colorSampler.apply(x, z));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -12,11 +12,9 @@ import com.dfsek.tectonic.api.config.template.annotations.Description;
|
||||
import com.dfsek.tectonic.api.config.template.annotations.Value;
|
||||
import com.dfsek.tectonic.api.config.template.object.ObjectTemplate;
|
||||
|
||||
import java.awt.image.BufferedImage;
|
||||
|
||||
import com.dfsek.terra.addons.biome.image.ImageBiomeProvider;
|
||||
import com.dfsek.terra.addons.image.converter.ColorConverter;
|
||||
import com.dfsek.terra.addons.image.picker.ColorPicker;
|
||||
import com.dfsek.terra.addons.image.sampler.ColorSampler;
|
||||
import com.dfsek.terra.api.world.biome.Biome;
|
||||
import com.dfsek.terra.api.world.biome.generation.BiomeProvider;
|
||||
|
||||
@@ -30,16 +28,13 @@ public class ImageProviderTemplate implements ObjectTemplate<BiomeProvider> {
|
||||
private int resolution = 1;
|
||||
|
||||
@Value("image")
|
||||
private BufferedImage image;
|
||||
|
||||
@Value("mode")
|
||||
private ColorPicker colorPicker;
|
||||
private ColorSampler colorSampler;
|
||||
|
||||
@Value("biomes")
|
||||
private ColorConverter<Biome> colorConverter;
|
||||
|
||||
@Override
|
||||
public BiomeProvider get() {
|
||||
return new ImageBiomeProvider(image, colorConverter, colorPicker, resolution);
|
||||
return new ImageBiomeProvider(colorConverter, colorSampler, resolution);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,31 +7,27 @@
|
||||
|
||||
package com.dfsek.terra.addons.noise.image;
|
||||
|
||||
import java.awt.image.BufferedImage;
|
||||
|
||||
import com.dfsek.terra.addons.image.picker.ColorPicker;
|
||||
import com.dfsek.terra.addons.image.sampler.ColorSampler;
|
||||
import com.dfsek.terra.addons.image.util.ColorUtil.Channel;
|
||||
import com.dfsek.terra.api.noise.NoiseSampler;
|
||||
|
||||
|
||||
public class ImageSampler implements NoiseSampler {
|
||||
private final BufferedImage image;
|
||||
private final Channel channel;
|
||||
|
||||
private final double frequency;
|
||||
|
||||
private final ColorPicker colorPicker;
|
||||
private final ColorSampler colorSampler;
|
||||
|
||||
public ImageSampler(BufferedImage image, ColorPicker colorPicker, Channel channel, double frequency) {
|
||||
this.image = image;
|
||||
public ImageSampler(ColorSampler colorSampler, Channel channel, double frequency) {
|
||||
this.channel = channel;
|
||||
this.frequency = frequency;
|
||||
this.colorPicker = colorPicker;
|
||||
this.colorSampler = colorSampler;
|
||||
}
|
||||
|
||||
@Override
|
||||
public double noise(long seed, double x, double y) {
|
||||
return channel.from(colorPicker.apply(image, (int) (x * frequency), (int) (y * frequency))) / 255D * 2 - 1;
|
||||
return channel.from(colorSampler.apply((int) (x * frequency), (int) (y * frequency))) / 255D * 2 - 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -9,9 +9,7 @@ package com.dfsek.terra.addons.noise.image.config;
|
||||
|
||||
import com.dfsek.tectonic.api.config.template.annotations.Value;
|
||||
|
||||
import java.awt.image.BufferedImage;
|
||||
|
||||
import com.dfsek.terra.addons.image.picker.ColorPicker;
|
||||
import com.dfsek.terra.addons.image.sampler.ColorSampler;
|
||||
import com.dfsek.terra.addons.image.util.ColorUtil.Channel;
|
||||
import com.dfsek.terra.addons.noise.config.templates.SamplerTemplate;
|
||||
import com.dfsek.terra.addons.noise.image.ImageSampler;
|
||||
@@ -23,10 +21,7 @@ import com.dfsek.terra.api.noise.NoiseSampler;
|
||||
public class ImageSamplerTemplate extends SamplerTemplate<ImageSampler> {
|
||||
|
||||
@Value("image")
|
||||
private @Meta BufferedImage image;
|
||||
|
||||
@Value("mode")
|
||||
private @Meta ColorPicker colorPicker;
|
||||
private @Meta ColorSampler colorSampler;
|
||||
|
||||
@Value("frequency")
|
||||
private @Meta double frequency;
|
||||
@@ -36,6 +31,6 @@ public class ImageSamplerTemplate extends SamplerTemplate<ImageSampler> {
|
||||
|
||||
@Override
|
||||
public NoiseSampler get() {
|
||||
return new ImageSampler(image, colorPicker, channel, frequency);
|
||||
return new ImageSampler(colorSampler, channel, frequency);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,9 +6,9 @@ import java.awt.image.BufferedImage;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
import com.dfsek.terra.addons.image.config.BufferedImageLoader;
|
||||
import com.dfsek.terra.addons.image.config.picker.SingleColorPickerTemplate;
|
||||
import com.dfsek.terra.addons.image.config.picker.TileColorPickerTemplate;
|
||||
import com.dfsek.terra.addons.image.picker.ColorPicker;
|
||||
import com.dfsek.terra.addons.image.config.sampler.SingleColorSamplerTemplate;
|
||||
import com.dfsek.terra.addons.image.config.sampler.TileColorSamplerTemplate;
|
||||
import com.dfsek.terra.addons.image.sampler.ColorSampler;
|
||||
import com.dfsek.terra.addons.manifest.api.AddonInitializer;
|
||||
import com.dfsek.terra.api.Platform;
|
||||
import com.dfsek.terra.api.addon.BaseAddon;
|
||||
@@ -21,7 +21,7 @@ import com.dfsek.terra.api.util.reflection.TypeKey;
|
||||
|
||||
public class ImageLibraryAddon implements AddonInitializer {
|
||||
|
||||
public static final TypeKey<Supplier<ObjectTemplate<ColorPicker>>> COLOR_PICKER_REGISTRY_KEY = new TypeKey<>() {
|
||||
public static final TypeKey<Supplier<ObjectTemplate<ColorSampler>>> COLOR_PICKER_REGISTRY_KEY = new TypeKey<>() {
|
||||
};
|
||||
|
||||
@Inject
|
||||
@@ -40,10 +40,10 @@ public class ImageLibraryAddon implements AddonInitializer {
|
||||
event.getPack().applyLoader(BufferedImage.class, new BufferedImageLoader(event.getPack().getLoader()));
|
||||
})
|
||||
.then(event -> {
|
||||
CheckedRegistry<Supplier<ObjectTemplate<ColorPicker>>> colorPickerRegistry = event.getPack().getOrCreateRegistry(
|
||||
CheckedRegistry<Supplier<ObjectTemplate<ColorSampler>>> colorSamplerRegistry = event.getPack().getOrCreateRegistry(
|
||||
COLOR_PICKER_REGISTRY_KEY);
|
||||
colorPickerRegistry.register(addon.key("SINGLE"), SingleColorPickerTemplate::new);
|
||||
colorPickerRegistry.register(addon.key("TILED"), TileColorPickerTemplate::new);
|
||||
colorSamplerRegistry.register(addon.key("SINGLE"), SingleColorSamplerTemplate::new);
|
||||
colorSamplerRegistry.register(addon.key("TILED"), TileColorSamplerTemplate::new);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,17 +0,0 @@
|
||||
package com.dfsek.terra.addons.image.config.picker;
|
||||
|
||||
import com.dfsek.tectonic.api.config.template.annotations.Default;
|
||||
import com.dfsek.tectonic.api.config.template.annotations.Value;
|
||||
import com.dfsek.tectonic.api.config.template.object.ObjectTemplate;
|
||||
|
||||
import com.dfsek.terra.addons.image.picker.ColorPicker;
|
||||
import com.dfsek.terra.addons.image.picker.transform.Alignment;
|
||||
|
||||
|
||||
public abstract class ColorPickerTemplate implements ObjectTemplate<ColorPicker> {
|
||||
|
||||
@Value("align")
|
||||
@Default
|
||||
protected Alignment alignment = Alignment.NONE;
|
||||
|
||||
}
|
||||
@@ -1,18 +0,0 @@
|
||||
package com.dfsek.terra.addons.image.config.picker;
|
||||
|
||||
import com.dfsek.tectonic.api.config.template.annotations.Value;
|
||||
|
||||
import com.dfsek.terra.addons.image.picker.ColorPicker;
|
||||
import com.dfsek.terra.addons.image.picker.SimpleColorPicker;
|
||||
|
||||
|
||||
public class SingleColorPickerTemplate extends ColorPickerTemplate {
|
||||
|
||||
@Value("fallback")
|
||||
private int fallback;
|
||||
|
||||
@Override
|
||||
public ColorPicker get() {
|
||||
return new SimpleColorPicker(fallback, alignment);
|
||||
}
|
||||
}
|
||||
@@ -1,13 +0,0 @@
|
||||
package com.dfsek.terra.addons.image.config.picker;
|
||||
|
||||
import com.dfsek.terra.addons.image.picker.ColorPicker;
|
||||
import com.dfsek.terra.addons.image.picker.TileColorPicker;
|
||||
|
||||
|
||||
public class TileColorPickerTemplate extends ColorPickerTemplate {
|
||||
|
||||
@Override
|
||||
public ColorPicker get() {
|
||||
return new TileColorPicker(alignment);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
package com.dfsek.terra.addons.image.config.sampler;
|
||||
|
||||
import com.dfsek.tectonic.api.config.template.annotations.Default;
|
||||
import com.dfsek.tectonic.api.config.template.annotations.Value;
|
||||
import com.dfsek.tectonic.api.config.template.object.ObjectTemplate;
|
||||
|
||||
import java.awt.image.BufferedImage;
|
||||
|
||||
import com.dfsek.terra.addons.image.sampler.ColorSampler;
|
||||
import com.dfsek.terra.addons.image.sampler.transform.Alignment;
|
||||
|
||||
|
||||
public abstract class ColorSamplerTemplate implements ObjectTemplate<ColorSampler> {
|
||||
|
||||
@Value("path")
|
||||
protected BufferedImage image;
|
||||
|
||||
@Value("align")
|
||||
@Default
|
||||
protected Alignment alignment = Alignment.NONE;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
package com.dfsek.terra.addons.image.config.sampler;
|
||||
|
||||
import com.dfsek.tectonic.api.config.template.annotations.Value;
|
||||
|
||||
import com.dfsek.terra.addons.image.sampler.ColorSampler;
|
||||
import com.dfsek.terra.addons.image.sampler.SimpleColorSampler;
|
||||
|
||||
|
||||
public class SingleColorSamplerTemplate extends ColorSamplerTemplate {
|
||||
@Value("fallback")
|
||||
private int fallback;
|
||||
|
||||
@Override
|
||||
public ColorSampler get() {
|
||||
return new SimpleColorSampler(image, fallback, alignment);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package com.dfsek.terra.addons.image.config.sampler;
|
||||
|
||||
import com.dfsek.terra.addons.image.sampler.ColorSampler;
|
||||
import com.dfsek.terra.addons.image.sampler.TileColorSampler;
|
||||
|
||||
|
||||
public class TileColorSamplerTemplate extends ColorSamplerTemplate {
|
||||
|
||||
@Override
|
||||
public ColorSampler get() {
|
||||
return new TileColorSampler(image, alignment);
|
||||
}
|
||||
}
|
||||
@@ -1,15 +0,0 @@
|
||||
package com.dfsek.terra.addons.image.picker;
|
||||
|
||||
import java.awt.image.BufferedImage;
|
||||
|
||||
@FunctionalInterface
|
||||
public interface ColorPicker {
|
||||
|
||||
/**
|
||||
* @param image Lookup image
|
||||
* @param x World x coordinate
|
||||
* @param z World z coordinate
|
||||
* @return Integer representing a web color
|
||||
*/
|
||||
Integer apply(BufferedImage image, int x, int z);
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
package com.dfsek.terra.addons.image.sampler;
|
||||
|
||||
@FunctionalInterface
|
||||
public interface ColorSampler {
|
||||
|
||||
/**
|
||||
* @param x World x coordinate
|
||||
* @param z World z coordinate
|
||||
* @return Integer representing a web color
|
||||
*/
|
||||
Integer apply(int x, int z);
|
||||
}
|
||||
@@ -1,23 +1,26 @@
|
||||
package com.dfsek.terra.addons.image.picker;
|
||||
package com.dfsek.terra.addons.image.sampler;
|
||||
|
||||
import java.awt.image.BufferedImage;
|
||||
|
||||
import com.dfsek.terra.addons.image.picker.transform.ImageTransformation;
|
||||
import com.dfsek.terra.addons.image.sampler.transform.ImageTransformation;
|
||||
|
||||
|
||||
public class SimpleColorPicker implements ColorPicker {
|
||||
public class SimpleColorSampler implements ColorSampler {
|
||||
|
||||
private final BufferedImage image;
|
||||
|
||||
private final Integer fallback;
|
||||
|
||||
private final ImageTransformation transformation;
|
||||
|
||||
public SimpleColorPicker(int fallbackColor, ImageTransformation transformation) {
|
||||
public SimpleColorSampler(BufferedImage image, int fallbackColor, ImageTransformation transformation) {
|
||||
this.image = image;
|
||||
this.fallback = fallbackColor;
|
||||
this.transformation = transformation;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer apply(BufferedImage image, int x, int z) {
|
||||
public Integer apply(int x, int z) {
|
||||
x = transformation.transformX(image, x);
|
||||
z = transformation.transformZ(image, z);
|
||||
if(x < 0 || z < 0 || x >= image.getWidth() || z >= image.getHeight()) return fallback;
|
||||
@@ -1,22 +1,25 @@
|
||||
package com.dfsek.terra.addons.image.picker;
|
||||
package com.dfsek.terra.addons.image.sampler;
|
||||
|
||||
import net.jafama.FastMath;
|
||||
|
||||
import java.awt.image.BufferedImage;
|
||||
|
||||
import com.dfsek.terra.addons.image.picker.transform.ImageTransformation;
|
||||
import com.dfsek.terra.addons.image.sampler.transform.ImageTransformation;
|
||||
|
||||
|
||||
public class TileColorPicker implements ColorPicker {
|
||||
public class TileColorSampler implements ColorSampler {
|
||||
|
||||
private final BufferedImage image;
|
||||
|
||||
private final ImageTransformation transformation;
|
||||
|
||||
public TileColorPicker(ImageTransformation transformation) {
|
||||
public TileColorSampler(BufferedImage image, ImageTransformation transformation) {
|
||||
this.image = image;
|
||||
this.transformation = transformation;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer apply(BufferedImage image, int x, int z) {
|
||||
public Integer apply(int x, int z) {
|
||||
x = transformation.transformX(image, x);
|
||||
z = transformation.transformZ(image, z);
|
||||
return image.getRGB(FastMath.floorMod(x, image.getWidth()), FastMath.floorMod(z, image.getHeight()));
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.dfsek.terra.addons.image.picker.transform;
|
||||
package com.dfsek.terra.addons.image.sampler.transform;
|
||||
|
||||
import java.awt.image.BufferedImage;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.dfsek.terra.addons.image.picker.transform;
|
||||
package com.dfsek.terra.addons.image.sampler.transform;
|
||||
|
||||
import java.awt.image.BufferedImage;
|
||||
|
||||
Reference in New Issue
Block a user