package org.mage.plugins.card.utils.impl;
import java.awt.Color;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.awt.image.ColorModel;
import java.awt.image.CropImageFilter;
import java.awt.image.FilteredImageSource;
import java.awt.image.WritableRaster;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
import javax.imageio.ImageIO;
import mage.client.util.gui.BufferedImageBuilder;
import org.mage.plugins.card.utils.ImageManager;
import org.mage.plugins.card.utils.Transparency;
public class ImageManagerImpl implements ImageManager {
private static final ImageManagerImpl fInstance = new ImageManagerImpl();
public static ImageManagerImpl getInstance() {
return fInstance;
}
public ImageManagerImpl() {
init();
}
public void init() {
String[] phases = {"Untap", "Upkeep", "Draw", "Main1",
"Combat_Start", "Combat_Attack", "Combat_Block", "Combat_Damage", "Combat_End",
"Main2", "Cleanup", "Next_Turn"};
phasesImages = new HashMap<>();
for (String name : phases) {
Image image = getImageFromResource("/phases/phase_" + name.toLowerCase() + ".png", new Rectangle(36, 36));
phasesImages.put(name, image);
}
}
@Override
public Image getPhaseImage(String phase) {
return phasesImages.get(phase);
}
@Override
public Image getAppImage() {
if (appImage == null) {
Image image = getBufferedImageFromResource("/icon-mage.png");
appImage = BufferedImageBuilder.bufferImage(image, BufferedImage.TYPE_INT_ARGB);
}
return appImage;
}
@Override
public Image getAppSmallImage() {
if (appSmallImage == null) {
Image image = getImageFromResourceTransparent("/icon-mage.png", Color.WHITE, new Rectangle(16, 16));
appSmallImage = BufferedImageBuilder.bufferImage(image, BufferedImage.TYPE_INT_ARGB);
}
return appSmallImage;
}
@Override
public Image getAppFlashedImage() {
if (appImageFlashed == null) {
Image image = getImageFromResourceTransparent("/icon-mage-flashed.png", Color.WHITE, new Rectangle(16, 16));
appImageFlashed = BufferedImageBuilder.bufferImage(image, BufferedImage.TYPE_INT_ARGB);
}
return appImageFlashed;
}
@Override
public BufferedImage getSicknessImage() {
if (imageSickness == null) {
Image image = getImageFromResourceTransparent("/sickness.png", Color.WHITE, new Rectangle(296, 265));
Toolkit tk = Toolkit.getDefaultToolkit();
image = tk.createImage(new FilteredImageSource(image.getSource(), new CropImageFilter(0, 0, 200, 285)));
imageSickness = BufferedImageBuilder.bufferImage(image, BufferedImage.TYPE_INT_ARGB);
}
return imageSickness;
}
@Override
public BufferedImage getDayImage() {
if (imageDay == null) {
Image image = getImageFromResourceTransparent("/card/day.png", Color.WHITE, new Rectangle(20, 20));
imageDay = BufferedImageBuilder.bufferImage(image, BufferedImage.TYPE_INT_ARGB);
}
return imageDay;
}
@Override
public BufferedImage getNightImage() {
if (imageNight == null) {
Image image = getImageFromResourceTransparent("/card/night.png", Color.WHITE, new Rectangle(20, 20));
imageNight = BufferedImageBuilder.bufferImage(image, BufferedImage.TYPE_INT_ARGB);
}
return imageNight;
}
@Override
public BufferedImage getTokenIconImage() {
if (imageTokenIcon == null) {
Image image = getImageFromResourceTransparent("/card/token.png", Color.WHITE, new Rectangle(20, 20));
imageTokenIcon = BufferedImageBuilder.bufferImage(image, BufferedImage.TYPE_INT_ARGB);
}
return imageTokenIcon;
}
@Override
public BufferedImage getTriggeredAbilityImage() {
if (triggeredAbilityIcon == null) {
Image image = getImageFromResourceTransparent("/card/triggered_ability.png", Color.WHITE, new Rectangle(20, 20));
triggeredAbilityIcon = BufferedImageBuilder.bufferImage(image, BufferedImage.TYPE_INT_ARGB);
}
return triggeredAbilityIcon;
}
@Override
public BufferedImage getActivatedAbilityImage() {
if (activatedAbilityIcon == null) {
Image image = getImageFromResourceTransparent("/card/activated_ability.png", Color.WHITE, new Rectangle(20, 20));
activatedAbilityIcon = BufferedImageBuilder.bufferImage(image, BufferedImage.TYPE_INT_ARGB);
}
return activatedAbilityIcon;
}
@Override
public BufferedImage getCopyInformIconImage() {
if (imageCopyIcon == null) {
Image image = getImageFromResourceTransparent("/card/copy.png", Color.WHITE, new Rectangle(20, 20));
imageCopyIcon = BufferedImageBuilder.bufferImage(image, BufferedImage.TYPE_INT_ARGB);
}
return imageCopyIcon;
}
@Override
public BufferedImage getCounterImageViolet() {
if (imageCounterViolet == null) {
Image image = getImageFromResourceTransparent("/card/counter_violet.png", Color.WHITE, new Rectangle(32, 32));
imageCounterViolet = BufferedImageBuilder.bufferImage(image, BufferedImage.TYPE_INT_ARGB);
}
return imageCounterViolet;
}
@Override
public BufferedImage getCounterImageGreen() {
if (imageCounterGreen == null) {
Image image = getImageFromResourceTransparent("/card/counter_green.png", Color.WHITE, new Rectangle(32, 32));
imageCounterGreen = BufferedImageBuilder.bufferImage(image, BufferedImage.TYPE_INT_ARGB);
}
return imageCounterGreen;
}
@Override
public BufferedImage getCounterImageRed() {
if (imageCounterRed == null) {
Image image = getImageFromResourceTransparent("/card/counter_red.png", Color.WHITE, new Rectangle(32, 32));
imageCounterRed = BufferedImageBuilder.bufferImage(image, BufferedImage.TYPE_INT_ARGB);
}
return imageCounterRed;
}
@Override
public BufferedImage getCounterImageGrey() {
if (imageCounterGrey == null) {
Image image = getImageFromResourceTransparent("/card/counter_grey.png", Color.WHITE, new Rectangle(32, 32));
imageCounterGrey = BufferedImageBuilder.bufferImage(image, BufferedImage.TYPE_INT_ARGB);
}
return imageCounterGrey;
}
@Override
public Image getDlgCancelButtonImage() {
if (imageDlgCancelButton == null) {
imageDlgCancelButton = getBufferedImageFromResource("/dlg/dlg.cancel.png");
}
return imageDlgCancelButton;
}
@Override
public Image getDlgActiveCancelButtonImage() {
if (imageDlgActiveCancelButton == null) {
imageDlgActiveCancelButton = getBufferedImageFromResource("/dlg/dlg.cancel.hover.png");
}
return imageDlgActiveCancelButton;
}
@Override
public Image getDlgAcceptButtonImage() {
if (imageDlgAcceptButton == null) {
imageDlgAcceptButton = getBufferedImageFromResource("/dlg/dlg.ok.png");
}
return imageDlgAcceptButton;
}
@Override
public Image getDlgActiveAcceptButtonImage() {
if (imageDlgActiveAcceptButton == null) {
imageDlgActiveAcceptButton = getBufferedImageFromResource("/dlg/dlg.ok.hover.png");
}
return imageDlgActiveAcceptButton;
}
@Override
public Image getDlgPrevButtonImage() {
if (imageDlgPrevButton == null) {
imageDlgPrevButton = getBufferedImageFromResource("/dlg/dlg.prev.png");
}
return imageDlgPrevButton;
}
@Override
public Image getDlgActivePrevButtonImage() {
if (imageDlgActivePrevButton == null) {
imageDlgActivePrevButton = getBufferedImageFromResource("/dlg/dlg.prev.hover.png");
}
return imageDlgActivePrevButton;
}
@Override
public Image getDlgNextButtonImage() {
if (imageDlgNextButton == null) {
imageDlgNextButton = getBufferedImageFromResource("/dlg/dlg.next.png");
}
return imageDlgNextButton;
}
@Override
public Image getDlgActiveNextButtonImage() {
if (imageDlgActiveNextButton == null) {
imageDlgActiveNextButton = getBufferedImageFromResource("/dlg/dlg.next.hover.png");
}
return imageDlgActiveNextButton;
}
@Override
public Image getConcedeButtonImage() {
if (imageConcedeButton == null) {
imageConcedeButton = getBufferedImageFromResource("/buttons/concede.png");
}
return imageConcedeButton;
}
@Override
public Image getSwitchHandsButtonImage() {
if (imageSwitchHandsButton == null) {
imageSwitchHandsButton = getBufferedImageFromResource("/buttons/switch_hands.png");
}
return imageSwitchHandsButton;
}
@Override
public Image getStopWatchButtonImage() {
if (imageStopWatchingButton == null) {
imageStopWatchingButton = getBufferedImageFromResource("/buttons/stop_watching.png");
}
return imageStopWatchingButton;
}
@Override
public Image getCancelSkipButtonImage() {
if (imageCancelSkipButton == null) {
imageCancelSkipButton = getBufferedImageFromResource("/buttons/cancel_skip.png");
}
return imageCancelSkipButton;
}
@Override
public Image getSkipNextTurnButtonImage() {
if (imageSkipNextTurnButton == null) {
imageSkipNextTurnButton = getBufferedImageFromResource("/buttons/skip_turn.png");
}
return imageSkipNextTurnButton;
}
@Override
public Image getSkipEndTurnButtonImage() {
if (imageSkipToEndTurnButton == null) {
imageSkipToEndTurnButton = getBufferedImageFromResource("/buttons/skip_to_end.png");
}
return imageSkipToEndTurnButton;
}
@Override
public Image getSkipMainButtonImage() {
if (imageSkipToMainButton == null) {
imageSkipToMainButton = getBufferedImageFromResource("/buttons/skip_to_main.png");
}
return imageSkipToMainButton;
}
@Override
public Image getSkipYourNextTurnButtonImage() {
if (imageSkipYourNextTurnButton == null) {
imageSkipYourNextTurnButton = getBufferedImageFromResource("/buttons/skip_all.png");
}
return imageSkipYourNextTurnButton;
}
protected static Image getImageFromResourceTransparent(String path, Color mask, Rectangle rec) {
BufferedImage image;
Image imageCardTransparent;
Image resized = null;
URL imageURL = ImageManager.class.getResource(path);
try {
image = ImageIO.read(imageURL);
imageCardTransparent = Transparency.makeColorTransparent(image, mask);
resized = imageCardTransparent.getScaledInstance(rec.width, rec.height, java.awt.Image.SCALE_SMOOTH);
} catch (Exception e) {
e.printStackTrace();
}
return resized;
}
protected static Image getImageFromResource(String path, Rectangle rec) {
Image resized = null;
URL imageURL = ImageManager.class.getResource(path);
try {
BufferedImage image = ImageIO.read(imageURL);
resized = image.getScaledInstance(rec.width, rec.height, java.awt.Image.SCALE_SMOOTH);
} catch (Exception e) {
e.printStackTrace();
}
return resized;
}
protected static BufferedImage getBufferedImageFromResource(String path) {
URL imageURL = ImageManager.class.getResource(path);
BufferedImage image = null;
try {
image = ImageIO.read(imageURL);
} catch (Exception e) {
e.printStackTrace();
}
return image;
}
public static BufferedImage deepCopy(BufferedImage bi) {
ColorModel cm = bi.getColorModel();
boolean isAlphaPremultiplied = cm.isAlphaPremultiplied();
WritableRaster raster = bi.copyData(null);
return new BufferedImage(cm, raster, isAlphaPremultiplied, null);
}
private static BufferedImage appImage;
private static BufferedImage appSmallImage;
private static BufferedImage appImageFlashed;
private static BufferedImage imageSickness;
private static BufferedImage imageDay;
private static BufferedImage imageNight;
private static BufferedImage imageTokenIcon;
private static BufferedImage triggeredAbilityIcon;
private static BufferedImage activatedAbilityIcon;
private static BufferedImage imageCopyIcon;
private static BufferedImage imageCounterGreen;
private static BufferedImage imageCounterGrey;
private static BufferedImage imageCounterRed;
private static BufferedImage imageCounterViolet;
private static BufferedImage imageDlgAcceptButton;
private static BufferedImage imageDlgActiveAcceptButton;
private static BufferedImage imageDlgCancelButton;
private static BufferedImage imageDlgActiveCancelButton;
private static BufferedImage imageDlgPrevButton;
private static BufferedImage imageDlgActivePrevButton;
private static BufferedImage imageDlgNextButton;
private static BufferedImage imageDlgActiveNextButton;
private static BufferedImage imageCancelSkipButton;
private static BufferedImage imageSwitchHandsButton;
private static BufferedImage imageStopWatchingButton;
private static BufferedImage imageConcedeButton;
private static BufferedImage imageSkipNextTurnButton;
private static BufferedImage imageSkipToEndTurnButton;
private static BufferedImage imageSkipToMainButton;
private static BufferedImage imageSkipYourNextTurnButton;
private static Map<String, Image> phasesImages;
}