/*
 * A puzzle game written in Java.
 *
 * Please read "http://juzzle.sourceforge.net/juzzle_licence.txt" for copyrights.
 * 
 * The sourcecode is designed and created with
 * Sun J2SDK 1.3 and Microsoft Visual J++ 6.0
 *
 * Juzzle homepage: http://juzzle.sourceforge.net
 *
 * autor: Slawa Weis
 * email: slawaweis@animatronik.net
 *
 */

package org.game.Juzzle.images;

import java.awt.*;
import java.io.*;
import java.net.*;
import java.util.*;

import javax.swing.*;

import org.game.Juzzle.*;

/**
 * static class for loading of the images
 */
public final class JuzzleImages
{
 /**
  * load a game image
  *
  * @param name name of the image
  * @return the image
  */
 public static Image loadImage(String name)
  {
  Class thisClass = JuzzleImages.class;
  return new ImageIcon(thisClass.getResource(name)).getImage();
  }

 /**
  * load all game images.
  *
  * @return the array with images
  */
 public static Vector getImages()
  {
  Vector vector = new Vector();
  try
     {
     Class thisClass = JuzzleImages.class;
     ImageIcon ii = null;
     ImageIcon iis = null;

     // the list of the images to load
     // is stored in the puzzleImages.txt file
     // in the format
     // [image] [name]
     LineNumberReader lnr = new LineNumberReader(new InputStreamReader(thisClass.getResourceAsStream("puzzleImages.txt")));
     String line = null;
     String file = null;
     String name = null;
     int sep = -1;
     while((line = lnr.readLine()) != null)
          {
          // get the name of image
          sep = line.indexOf(' ');
          if(sep < 0)
            {
            file = line;
            name = "";
            }
          else
            {
            file = line.substring(0, sep);
            name = line.substring(sep + 1, line.length());
            }
//          System.out.println(file + ":" + name);

          // create the image and store it in the ImageDescription
          ii = new ImageIcon(thisClass.getResource(file));
          iis = scaleIcon(ii, 80);
          vector.addElement(new ImageDescription(ii, iis, name));
          }
        }
  catch(IOException e)
       {
       e.printStackTrace();
       }
  return vector;
  }

 /**
  * scale the image to the scaled version
  *
  * @param ii        original image
  * @param imageSize the scaled image must fit into the (imageSize x imageSize) rectangle
  * @return the scaled image
  */
 public static ImageIcon scaleIcon(ImageIcon ii, int imageSize)
  {
  int iw = ii.getIconWidth();
  int ih = ii.getIconHeight();

  int niw = 0;
  int nih = 0;

  if(iw >= ih)
    {
    niw = imageSize;
    nih = (int)((double)ih*((double)imageSize/(double)iw));
    }
  else
    {
    niw = (int)((double)iw*((double)imageSize/(double)ih));
    nih = imageSize;
    }

  Image image_scaled = ii.getImage().getScaledInstance(niw, nih, Image.SCALE_FAST);
  return new ImageIcon(image_scaled);
  }

 /**
  * load a image as ImageIcon
  *
  * @param name name of the image
  * @return the image as ImageIcon
  */
 public static ImageIcon getIcon(String name)
  {
  Class thisClass = JuzzleImages.class;
  return new ImageIcon(thisClass.getResource(name));
  }
}