package target;


import java.awt.*;
import javax.swing.*;
import java.util.*;
import java.awt.geom.Point2D;

/**
* Simulates hits on a target background
*
* @author Charles Stanton
* @version  May 3, 2002
*/
public class TargetPanel extends JPanel {
            
    //private Dimension r;
    private int numberHits = 0;
    private Vector hits= new Vector();
    private int height, width;
    private TargetModel tm;
    //private Point2D[] plotPoints;

    /**
    * Constructor for TargetPanel
    *
    * @param aTm the TargetModel keeping the data
    */
    public TargetPanel( TargetModel aTm) {
        tm = aTm;
        this.setPreferredSize(new Dimension(250,350));
        this.setMinimumSize(new Dimension(250,350));
        repaint();
    }

    /** 
    * paint method for the panel
    */
    public void paint (Graphics g) {
        Point2D p;
        int ri;   //ri = ring increment
        Dimension s=this.getSize();
        //r = getSize();
        height= s.height;
        width = s.width;
        //Target size is adjusted to panel size and painted
        ri = s.width/8;  
        g.setColor(Color.black);
        g.fillRect(0,0,s.width,s.height);
        g.setColor(Color.white);
        g.fillOval(s.width/2-3*ri, s.height/2-3*ri, 6*ri, 6*ri);
        g.setColor(Color.blue);
        g.fillOval(s.width/2-2*ri, s.height/2-2*ri, 4*ri, 4*ri);
        g.setColor(Color.red);
        g.fillOval(s.width/2-ri, s.height/2-ri, 2*ri, 2*ri);
        
        // Hits are plotted from hits vector
        g.setColor(Color.green);
        for (Enumeration e=hits.elements();
                e.hasMoreElements();){
                p = (Point2D)e.nextElement();
                g.fillOval(xScale(-1*p.getX())-3,yScale(p.getY())-3,6,6);
                }

    }


    /**
    * updates the panel from the TargetModel data
    */
    public void update() {
        numberHits = tm.getNumberHits();
        hits = tm.getHits();
        repaint();
        }

    private int xScale(double x ) {
        return width/2+(int)(x*width/6);
        }

    private int yScale(double y) {
        return height/2+(int)(y*width/6); // keep x, y same scale!
        }

}
        
