Add rotate color sampler

This commit is contained in:
Astrash
2022-11-25 14:36:28 +11:00
parent e9db14f52c
commit 5c916f7758
4 changed files with 69 additions and 0 deletions

View File

@@ -5,6 +5,8 @@ import com.dfsek.tectonic.api.config.template.object.ObjectTemplate;
import java.util.function.Supplier;
import com.dfsek.terra.addons.image.config.ImageLoader;
import com.dfsek.terra.addons.image.config.sampler.RotateColorSamplerTemplate;
import com.dfsek.terra.addons.image.config.sampler.ConstantColorSamplerTemplate;
import com.dfsek.terra.addons.image.config.sampler.SingleColorSamplerTemplate;
import com.dfsek.terra.addons.image.config.sampler.TileColorSamplerTemplate;
import com.dfsek.terra.addons.image.image.Image;
@@ -44,6 +46,8 @@ public class ImageLibraryAddon implements AddonInitializer {
COLOR_PICKER_REGISTRY_KEY);
colorSamplerRegistry.register(addon.key("SINGLE"), SingleColorSamplerTemplate::new);
colorSamplerRegistry.register(addon.key("TILED"), TileColorSamplerTemplate::new);
colorSamplerRegistry.register(addon.key("COLOR"), ConstantColorSamplerTemplate::new);
colorSamplerRegistry.register(addon.key("ROTATE"), RotateColorSamplerTemplate::new);
});
}
}

View File

@@ -0,0 +1,18 @@
package com.dfsek.terra.addons.image.config.sampler;
import com.dfsek.tectonic.api.config.template.annotations.Value;
import com.dfsek.tectonic.api.config.template.object.ObjectTemplate;
import com.dfsek.terra.addons.image.sampler.ColorSampler;
public class ConstantColorSamplerTemplate implements ObjectTemplate<ColorSampler> {
@Value("color")
private int color;
@Override
public ColorSampler get() {
return ((x, z) -> color);
}
}

View File

@@ -0,0 +1,23 @@
package com.dfsek.terra.addons.image.config.sampler;
import com.dfsek.tectonic.api.config.template.annotations.Value;
import com.dfsek.tectonic.api.config.template.object.ObjectTemplate;
import net.jafama.FastMath;
import com.dfsek.terra.addons.image.sampler.ColorSampler;
import com.dfsek.terra.addons.image.sampler.RotateColorSampler;
public class RotateColorSamplerTemplate implements ObjectTemplate<ColorSampler> {
@Value("image")
private ColorSampler sampler;
@Value("angle")
private double angle;
@Override
public ColorSampler get() {
return new RotateColorSampler(sampler, FastMath.toRadians(angle));
}
}

View File

@@ -0,0 +1,24 @@
package com.dfsek.terra.addons.image.sampler;
import net.jafama.FastMath;
public class RotateColorSampler implements ColorSampler {
private final ColorSampler sampler;
private final double radians;
public RotateColorSampler(ColorSampler sampler, double radians) {
this.sampler = sampler;
this.radians = radians;
}
@Override
public Integer apply(int x, int z) {
return sampler.apply(
(int) (x * FastMath.cos(radians) - z * FastMath.sin(radians)),
(int) (z * FastMath.cos(radians) + x * FastMath.sin(radians))
);
}
}