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