ColorPicker -> ColorSampler

This commit is contained in:
Astrash
2022-11-25 10:17:56 +11:00
parent 64c2a41d19
commit 8670c4cdf3
17 changed files with 105 additions and 115 deletions
@@ -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;