Package jpotter

Source Code of jpotter.IHM

package jpotter;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.util.Random;

import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JProgressBar;

import jpotter.spells.Spell;

import org.jdesktop.animation.timing.Animator;
import org.jdesktop.animation.timing.TimingTarget;
import org.jdesktop.animation.timing.interpolation.PropertySetter;

/**
* Date: 24 Mar 2011 Time: 15:28:47
*
* @author Christophe Dorthe
*/
public class IHM extends JFrame {

  // display constants
  private static final int FIRST_COL_POS_X = 10;
  private static final int SECOND_COL_POS_X = 600;
  private static final int ENEMY_IMG_SIZE = 130;
  private static final int PROGRESS_BAR_THICKNESS = 20;
  private static final int MARGIN = 10;
  private static final int WINDOW_HEIGHT = 600;
  private static final int WINDOW_WIDTH = 800;

  private JProgressBar jpbHarry;
  private JProgressBar[] jpbEnemy = new JProgressBar[Game.NB_ENEMIES];
  private String effectHarry;
  private String[] effectEnemy = new String[Game.NB_ENEMIES];
  private JPanel jPanel;
  private Point curs;
  private BufferedImage background = null;
  public Harry harry = null;
  private static final IHM instance = new IHM();
  private int enemyTarget = 0;

  public void setEnemyTarget(int et) {
    this.enemyTarget = et;
  }

  public static IHM getInstance() {
    return instance;
  }

  private IHM() {
    if (instance != null)
      throw new AssertionError();

    setTitle("JPotter");
    setSize(WINDOW_WIDTH, WINDOW_HEIGHT);
    setLocationRelativeTo(null);
    this.curs = new Point(WINDOW_WIDTH / 2, WINDOW_HEIGHT / 2);
    try {
      background = ImageIO.read(new File("img/background1.jpg"));
    } catch (IOException e1) {
      e1.printStackTrace();
    }
    Arrays.fill(effectEnemy, "");
    jPanel = new JPanel() {
      @Override
      public void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.drawImage(background, 0, 0, null);
        g.drawImage(harry.getImage(), FIRST_COL_POS_X, MARGIN, null);
//        g.drawString(effectHarry + "", harry.getWidth() + 20, harry
//            .getHeight() + 15);

        for (int i = 0; i < Game.NB_ENEMIES; i++) {
          g.drawImage(Game.getInstance().enemies[i].getBi(),
              SECOND_COL_POS_X, i * ENEMY_IMG_SIZE + MARGIN,
              ENEMY_IMG_SIZE, ENEMY_IMG_SIZE, null);
//          g.drawString(effectEnemy[i] + "", SECOND_COL_POS_X
//              + ENEMY_IMG_SIZE + MARGIN, i * ENEMY_IMG_SIZE
//              + ENEMY_IMG_SIZE + 5);
        }

        g.setColor(Color.RED);
        Point[] p = getEnemyPos(enemyTarget);
        g.fillRect((p[0].x), (p[0].y), 5, 5);
        g.fillRect((p[1].x), (p[1].y), 5, 5);
        g.setColor(Color.GREEN);
        g.fillOval((int) IHM.this.getCurs().getX(), (int) IHM.this
            .getCurs().getY(), 10, 10);
      }
    };
    createHarry(5000, "OK");
    jPanel.setLayout(null);
    add(jPanel);
    setVisible(true);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  }

  public boolean setTarget() {
    for (int i = 0; i < Game.NB_ENEMIES; i++) {
      Point[] en = getEnemyPos(i);
      Rectangle r = new Rectangle(en[0].x, en[0].y, en[1].x - en[0].x,
          en[1].y - en[0].y);
      if (r.contains(IHM.getInstance().getCurs())
          && !Game.getInstance().enemies[i].isKo()) {
        enemyTarget = i;
        jPanel.repaint();
        return true;
      }
    }
    return false;
  }

  /**
   *
   * @param pvHarry
   *            max pv
   * @param effect
   */
  private void createHarry(int pvHarry, String effect) {
    try {
      harry = new Harry(pvHarry);
    } catch (IOException e) {
      e.printStackTrace();
    }
    jpbHarry = new JProgressBar(0, pvHarry);
    jPanel.add(jpbHarry);
    jpbHarry.setBounds(FIRST_COL_POS_X, harry.getHeight() - 10, harry
        .getWidth(), PROGRESS_BAR_THICKNESS);
    jpbHarry.setValue(pvHarry);
    jpbHarry.setStringPainted(true);
    jpbHarry.setString(jpbHarry.getValue() + "");
    effectHarry = effect;
    // repaint();
  }

  /**
   *
   * @param n
   *            enemy number
   * @param pvEnemy
   *            max pv
   * @param effect
   * @param img
   *            enemy's image file
   */
  public void createEnemy(Enemy enemy) {
    int n = enemy.getId();
    jpbEnemy[n] = new JProgressBar(0, enemy.getPv());
    jPanel.add(jpbEnemy[n]);
    jpbEnemy[n].setBounds(SECOND_COL_POS_X, n * ENEMY_IMG_SIZE + 120,
        ENEMY_IMG_SIZE, PROGRESS_BAR_THICKNESS);
    jpbEnemy[n].setValue(enemy.getPv());
    jpbEnemy[n].setStringPainted(true);
    jpbEnemy[n].setString(jpbEnemy[n].getValue() + "");

    repaint();
  }

  public Point[] getHarryPos() {
    return new Point[] {
        new Point(MARGIN, MARGIN),
        new Point(MARGIN + harry.getWidth(), MARGIN + harry.getHeight()) };
  }

  public Point[] getEnemyPos(int n) {
    return new Point[] {
        new Point(SECOND_COL_POS_X, MARGIN + n * ENEMY_IMG_SIZE),
        new Point(SECOND_COL_POS_X + ENEMY_IMG_SIZE, MARGIN + n
            * ENEMY_IMG_SIZE + ENEMY_IMG_SIZE) };
  }

  public void updateHarryPV(int damage) {
    boolean ko;
    try {
      ko = harry.updatePv(damage);

      if (ko) {
        jpbHarry.setValue(0);
        jpbHarry.setString("KO");
      } else {
        jpbHarry.setValue(harry.getPv());
        jpbHarry.setString(harry.getPv() + "");
      }
    } catch (IOException e) {
      e.printStackTrace();
    }
    repaint();
  }

  public void updateEnemyPV(int damage) {
    try {
      boolean ko = Game.getInstance().enemies[enemyTarget]
          .updateEnemyPV(damage);
      if (ko) {
        jpbEnemy[enemyTarget].setValue(0);
        jpbEnemy[enemyTarget].setString("KO");
      } else {
        jpbEnemy[enemyTarget]
            .setValue(Game.getInstance().enemies[enemyTarget]
                .getPv());
        jpbEnemy[enemyTarget]
            .setString(Game.getInstance().enemies[enemyTarget]
                .getPv()
                + "");
      }
    } catch (IOException e) {
      e.printStackTrace();
    }
    repaint();
  }

  public void updateHarryEffect(String effect) {
    effectHarry = effect;
    repaint();
  }

  public void updateEnemyEffect(int n, String effect) {
    effectEnemy[n] = effect;
    repaint();
  }

  public Point getCurs() {
    return curs;
  }

  public void setCurs(Point curs) {
    this.curs = curs;
  }

  public Point getDefaultStartPos(Spell sp) {
    Point p = IHM.getInstance().getHarryPos()[1];
    Point pMiddle = new Point(p.x,
        p.y
            - (IHM.getInstance().harry.getHeight() + sp
                .getDimension().height) / 2);
    return pMiddle;
  }

  public Point getTargetPos(int target, Spell sp) {
    Point[] en = getEnemyPos(target);
    // Rectangle r = new Rectangle(en[0].x, en[0].y, en[1].x - en[0].x,
    // en[1].y - en[0].y);
    Point p2 = en[0];
    Point p2Middle = new Point(p2.x, p2.y
        + (IHM.ENEMY_IMG_SIZE - sp.getDimension().height) / 2);
    return p2Middle;
  }

  public boolean cast(Spell s) {
    Point target = getTargetPos(enemyTarget, s);
    jPanel.add(s.getComponent());
    jPanel.setComponentZOrder(s.getComponent(), 0);
    jPanel.validate();
    if (target != null) {
      s.cast(getDefaultStartPos(s), target, jPanel, true);
      return true;
    }
    return false;
  }

  public boolean enemyCast(int from) {
    Random rand = new Random();
    Spell s = Enemy.knownSpells.get(rand.nextInt(Enemy.knownSpells.size()));
    Point target = getTargetPos(from, s);
    jPanel.add(s.getComponent());
    jPanel.setComponentZOrder(s.getComponent(), 0);
    jPanel.validate();
    if (target != null) {
      s.cast(target, getDefaultStartPos(s), jPanel, false);
      return true;
    }
    return false;
  }

  public void displayText(String string) {
    System.out.println("TEXT!!!!");
    final JLabel label = new JLabel(string);
    label.setForeground(Color.RED);
    Font font = label.getFont();
    Font f = font.deriveFont(30f);
    label.setFont(f);
    Point from = new Point(getWidth()/2, getHeight());
    Point to = new Point(getWidth()/2, getHeight()/2);
    jPanel.add(label);
    jPanel.validate();
    Dimension dim = new Dimension(400, 50);
    System.out.println("DIM:"+dim);
      label.setSize(dim);
      label.setPreferredSize(dim);
      label.setMinimumSize(dim);
      label.setMaximumSize(dim);
      label.setVisible(false);
    Animator anim = PropertySetter.createAnimator(2500, label, "location",
            from, to);
    anim.addTarget(new TimingTarget(){
      @Override
      public void begin() {
        label.setVisible(true);
      }
     
      @Override
      public void end() {
        jPanel.remove(label);
            label.setVisible(false);

            jPanel.validate();
            jPanel.repaint();
      }
     
      @Override
      public void repeat() {
       
      }
     
      @Override
      public void timingEvent(float fraction) {
       
      }
    });
    anim.start();
  }
}
TOP

Related Classes of jpotter.IHM

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.