package dev.kske.chess.io; import java.awt.Image; import java.awt.image.BufferedImage; import java.io.IOException; import java.util.Arrays; import java.util.HashMap; import java.util.Map; import javax.imageio.ImageIO; import dev.kske.chess.board.Piece; /** * Project: Chess
* File: TextureUtil.java
* Created: 01.07.2019
* * @since Chess v0.1-alpha * @author Kai S. K. Engelbart */ public class TextureUtil { private static Map textures = new HashMap<>(), scaledTextures = new HashMap<>(); static { loadPieceTextures(); scaledTextures.putAll(textures); } private TextureUtil() {} /** * Loads a piece texture fitting to a piece object. * * @param piece The piece from which the texture properties are taken * @return The fitting texture */ public static Image getPieceTexture(Piece piece) { String key = piece.getClass().getSimpleName().toLowerCase() + "_" + piece.getColor().toString().toLowerCase(); return scaledTextures.get(key); } /** * Scales all piece textures to fit the current tile size. * * @param tileSize the new width and height of the piece textures */ public static void scalePieceTextures(int tileSize) { scaledTextures.clear(); textures.forEach( (key, img) -> scaledTextures.put(key, img.getScaledInstance(tileSize, tileSize, Image.SCALE_SMOOTH)) ); } /** * Loads an image from a file in the resource folder. * * @param fileName The name of the image resource * @return The loaded image */ private static Image loadImage(String fileName) { BufferedImage in = null; try { in = ImageIO.read(TextureUtil.class.getResourceAsStream(fileName)); } catch (IOException e) { e.printStackTrace(); } return in; } /** * Load every PNG file inside the res/pieces directory. * The filenames without extensions are used as keys in the map textures. */ private static void loadPieceTextures() { Arrays .asList( "king_white", "king_black", "queen_white", "queen_black", "rook_white", "rook_black", "knight_white", "knight_black", "bishop_white", "bishop_black", "pawn_white", "pawn_black" ) .forEach( name -> textures.put(name, loadImage("/pieces/" + name + ".png")) ); } }