package chainreaction;

import java.awt.*;
import java.awt.event.*;
import javax.swing.JPanel;

class ChainReactionPanel extends JPanel {

public ChainReactionPanel() {
  setDoubleBuffered(true);
  setPreferredSize(new Dimension(800, 600));
  addMouseListener(mouseController);
  generateAtoms();
}

@Override
public void paint(Graphics g) {
  super.paint(g);
  g.setColor(new Color(120, 120, 120));
  g.fillRect(0, 0, getWidth(), getHeight());
  g.translate(75, 75);
  synchronized (Atom.atoms) {
    for (Atom atom : Atom.atoms.values()) {
      atom.paint(g);
    }
  }
  synchronized (Particle.particles) {
    for (Particle particle : Particle.particles) {
      particle.paint(g);
    }
  }
}

private void generateAtoms() {
  for (int i = 0; i < 13; i++) {
    for (int j = 0; j < 9; j++) {
      Atom a = new Atom();
      a.setCoords(i * 50, j * 50);
      Atom.atoms.put(new Point(i * 50, j * 50), a);
    }
  }
}
private final MouseAdapter mouseController = new MouseAdapter() {
@Override
public void mouseReleased(MouseEvent e) {
  Point point = e.getPoint();
  point.x -= 75;
  point.x /= 50;
  point.x *= 50;
  point.y -= 75;
  point.y /= 50;
  point.y *= 50;
  Atom atom = Atom.atoms.get(point);
  if (atom != null) {
    atom.grow();
  }
}
};

static boolean outOfBounds(int x, int y) {
  x += 75;
  y += 75;
  if (x < 0) {
    return true;
  }
  if (y < 0) {
    return true;
  }
  if (x > 800) {
    return true;
  }
  if (y > 600) {
    return true;
  }
  return false;
}
}
