Ignore alpha channel by default with ExactColorConverter

This commit is contained in:
Astrash
2022-11-24 13:56:11 +11:00
parent 4e225a6592
commit 64c2a41d19
3 changed files with 23 additions and 4 deletions
@@ -1,5 +1,6 @@
package com.dfsek.terra.addons.biome.image.config.converter; package com.dfsek.terra.addons.biome.image.config.converter;
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.annotations.Value;
import com.dfsek.terra.addons.image.config.converter.ExactColorConverterTemplate; import com.dfsek.terra.addons.image.config.converter.ExactColorConverterTemplate;
@@ -14,6 +15,10 @@ public class ExactBiomeColorConverterTemplate extends ExactColorConverterTemplat
@Value("fallback") @Value("fallback")
private Biome fallback; private Biome fallback;
@Value("ignore-alpha")
@Default
private boolean ignoreAlpha = true;
@Override @Override
protected ColorMapping<Biome> getMapping() { protected ColorMapping<Biome> getMapping() {
@@ -24,4 +29,9 @@ public class ExactBiomeColorConverterTemplate extends ExactColorConverterTemplat
protected Biome getFallback() { protected Biome getFallback() {
return fallback; return fallback;
} }
@Override
protected boolean ignoreAlpha() {
return ignoreAlpha;
}
} }
@@ -11,8 +11,10 @@ public abstract class ExactColorConverterTemplate<T> implements ColorConverterTe
protected abstract T getFallback(); protected abstract T getFallback();
protected abstract boolean ignoreAlpha();
@Override @Override
public ColorConverter<T> get() { public ColorConverter<T> get() {
return new ExactColorConverter<T>(getMapping().get(), getFallback()); return new ExactColorConverter<T>(getMapping().get(), getFallback(), ignoreAlpha());
} }
} }
@@ -4,22 +4,29 @@ import java.util.HashSet;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
import com.dfsek.terra.addons.image.util.ColorUtil;
public class ExactColorConverter<T> implements ColorConverter<T> { public class ExactColorConverter<T> implements ColorConverter<T> {
private final Map<Integer, T> map; private final Map<Integer, T> map;
private final T fallback; private final T fallback;
public ExactColorConverter(Map<Integer, T> map, T fallback) { private final boolean ignoreAlpha;
public ExactColorConverter(Map<Integer, T> map, T fallback, boolean ignoreAlpha) {
this.map = map; this.map = map;
this.fallback = fallback; this.fallback = fallback;
this.ignoreAlpha = ignoreAlpha;
} }
@Override @Override
public T apply(Integer color) { public T apply(Integer color) {
if (ignoreAlpha) {
color = ColorUtil.zeroAlpha(color);
}
T lookup = map.get(color); T lookup = map.get(color);
if(lookup != null) return lookup; return lookup != null ? lookup : fallback;
return fallback;
} }
@Override @Override