mmb.engine.java2d.TexGen Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of multimachinebuilder Show documentation
Show all versions of multimachinebuilder Show documentation
Dependency for the MultiMachineBuilder, a voxel game about building an industrial empire in a finite world.
THIS RELEASE IS NOT PLAYABLE. To play the game, donwload from >ITCH.IO LINK HERE< or >GH releases link here<
/**
*
*/
package mmb.engine.java2d;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.*;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import mmb.NN;
import mmb.Nil;
import mmb.content.electric.VoltageTier;
import mmb.engine.texture.Textures;
/**
* @author oskar
*
*/
public class TexGen {
/**
* Generates a texture from a template.
* @param color main color
* @param src the source texture
* @param dest destination image. If it is null, a new compatible image is constructed
* @return the generated texture
*/
@NN public static BufferedImage genTexture(Color color, BufferedImage src, @Nil BufferedImage dest) {
ColorMul mapper = ColorMul.ofType(src.getType());
mapper.setColor(color);
LookupOp lookup = new LookupOp(mapper, null);
BufferedImage result = dest;
if(result == null) result = new BufferedImage(src.getWidth(), src.getHeight(), src.getType());
lookup.filter(src, result);
return result;
}
@NN public static BufferedImage colormap(Color from, Color to, BufferedImage src, @Nil BufferedImage dest) {
ColorMapper mapper = ColorMapper.ofType(src.getType(), from, to);
LookupOp lookup = new LookupOp(mapper, null);
BufferedImage result = dest;
if(result == null) result = new BufferedImage(src.getWidth(), src.getHeight(), src.getType());
lookup.filter(src, result);
return result;
}
/**
* Generates a texture from a template.
* @param r red component of main color
* @param g green component of main color
* @param b blue component of main color
* @param src the source texture
* @param dest destination image. If it is null, a new compatible image is constructed
* @return the generated texture
*/
@NN public static BufferedImage genTexture(int r, int g, int b, BufferedImage src, @Nil BufferedImage dest) {
return genTexture(new Color(r, g, b), src, dest);
}
/**
* Generates a texture from a template.
* @param c color
* @param src the source texture
* @param bg the image, over which a recolored component is placed. This image is unchanged
* @param dest destination image. If it is null, a new compatible image is constructed
* @return the generated texture
*/
@NN public static BufferedImage genTexture(Color c, BufferedImage src, BufferedImage bg, @Nil BufferedImage dest) {
BufferedImage dest0 = dest;
if(dest0 == null) dest0 = new BufferedImage(
bg.getWidth(), bg.getHeight(), bg.getType());
BufferedImage overlay = genTexture(c, src, null);
Graphics gr = dest0.createGraphics();
gr.drawImage(bg, 0, 0, null);
gr.drawImage(overlay, 0, 0, null);
gr.dispose();
return dest0;
}
/**
* Generates a texture from a template.
* @param r red component of main color
* @param g green component of main color
* @param b blue component of main color
* @param src the source texture
* bg the image, over which a recolored component is placed. This image is unchanged
* @param dest destination image. If it is null, a new compatible image is constructed
* @return the generated texture
*/
@NN public static BufferedImage genTexture(int r, int g, int b, BufferedImage src, BufferedImage bg, @Nil BufferedImage dest) {
return genTexture(new Color(r, g, b), src, bg, dest);
}
@NN public static final BufferedImage NUGGET = Textures.get("item/nugget.png");
@NN public static BufferedImage nugget(Color c) {
return genTexture(c, NUGGET, null);
}
@NN public static final BufferedImage WIREBASE = Textures.get("item/wire spool.png");
@NN public static final BufferedImage WIREOV = Textures.get("item/wire overlay.png");
@NN public static BufferedImage wire(Color c) {
return genTexture(c, TexGen.WIREOV, TexGen.WIREBASE, null);
}
@NN public static final BufferedImage INGOT = Textures.get("item/ingot.png");
@NN public static BufferedImage ingot(Color c) {
return genTexture(c, TexGen.INGOT, null);
}
@NN public static final BufferedImage OREOV = Textures.get("block/ore overlay.png");
@NN public static final BufferedImage ORE = Textures.get("block/coal ore.png");
@NN public static BufferedImage genOre(Color c) {
return genTexture(c, TexGen.OREOV, TexGen.ORE, null);
}
@NN public static final BufferedImage CROP = Textures.get("block/coal crop.png");
@NN public static BufferedImage genCrop(Color c) {
return genTexture(c, TexGen.OREOV, TexGen.CROP, null);
}
/**
* @param src the source image
* @return the list with generated machine textures, in order of increasing voltages
*/
@NN public static List<@NN BufferedImage> generateMachineTextures(BufferedImage src){
ColorMapper mapper = ColorMapper.ofType(src.getType(), Color.RED, Color.BLACK);
LookupOp lookup = new LookupOp(mapper, null);
return Stream.of(VoltageTier.values())
.map(vtier -> {
mapper.setTo(vtier.c);
return lookup.filter(src, null);
}).collect(Collectors.toList());
}
}