package ds.ihm.gui.render;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.RenderingHints;
import java.awt.geom.AffineTransform;
import java.awt.geom.Line2D;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JPanel;
import util.BasicConvert;
import ds.moteur.voiture.VoiturePilotee;
/**Cette classe est la repr�sentation graphique du tableau de bord.
*
* @author Yannick BISIAUX
*
*/
@SuppressWarnings("serial")
public class PanelTableauBord extends JPanel {
private static final int TABLEAU_WIDTH = 800;
private static final int TABLEAU_HEIGHT = 200;
private VoiturePilotee voiture;
private Image imageCV;
private Image imageCT;
private RenderingHints rh;
private BasicStroke formatAiguille;
private Line2D aiguilleVitesse;
private Line2D aiguilleTourMin;
private int dimensionCadrans;
private int xVitesse;
private int xTour;
private int bordSuperieurCadrans;
private int centreXVitesse;
private int centreXTour;
private int centreY;
private int rayon;
public PanelTableauBord(){
super();
}
public void init(int height, int width){
this.setPreferredSize(new Dimension(TABLEAU_WIDTH, TABLEAU_HEIGHT));
this.setBackground(new Color(166, 166, 166));
try {
imageCV = ImageIO.read(new File("images/compteurVitesse_800x600.png"));
} catch (IOException e) {
System.out.println("Image compteur vitesse indisponible ou corrompue");
e.printStackTrace();
}
try {
imageCT = ImageIO.read(new File("images/compteTour_800x600.png"));
} catch (IOException e) {
System.out.println("Image compte tour indisponible ou corrompue");
e.printStackTrace();
}
//Calcul de l'emplacement des �l�ments
dimensionCadrans = (19*height)/20;
xVitesse = width/2 - height/10 - dimensionCadrans;
xTour = width/2 + height/10;
bordSuperieurCadrans = height/40;
centreXVitesse = xVitesse + dimensionCadrans/2;
centreXTour = xTour + dimensionCadrans/2;
centreY = height/2;
rayon = (int)(height/2.5);
//Pr�paration des �l�ments graphiques
rh = new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
formatAiguille = new BasicStroke(4.0f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND);
aiguilleVitesse = new Line2D.Double(centreXVitesse, centreY, centreXVitesse, centreY - rayon);
aiguilleTourMin = new Line2D.Double(centreXTour, centreY, centreXTour, centreY - rayon);
}
/**Cette m�thode permet de faire repr�senter au tableau de bord l'�tat actuel de la voiture pilot�e.
*
* @param voiture
*/
public void afficherVoiture(VoiturePilotee voiture){
this.voiture = voiture;
this.repaint();
}
public void paint(Graphics g){
super.paint(g);
Graphics2D g2d = (Graphics2D)g;
double vitesseKmh = 0;
double nbTour = 0;
if (voiture != null){
vitesseKmh = BasicConvert.msToKmh((voiture.getMecanique().getVitesse()));
nbTour = voiture.getMoteur().getVitesseRotation();
g2d.drawString(Integer.toString((int)vitesseKmh) + " km/h", 20, 20);
g2d.drawString(Integer.toString(voiture.getMoteur().getNumeroVitesse()), 80, 20);
}
if(imageCV != null){
g2d.drawImage(imageCV, xVitesse, bordSuperieurCadrans, dimensionCadrans, dimensionCadrans, null);
g2d.drawImage(imageCT, xTour, bordSuperieurCadrans, dimensionCadrans, dimensionCadrans, null);
}
g2d.setRenderingHints(rh);
g2d.setColor(Color.WHITE);
double angleAiguille = 0.0036*(vitesseKmh-100)*2*Math.PI;
AffineTransform saveAT = g2d.getTransform();
g2d.transform(AffineTransform.getRotateInstance(angleAiguille, centreXVitesse, centreY));
g2d.setStroke(formatAiguille);
g2d.draw(aiguilleVitesse);
g2d.setTransform(saveAT);
g2d.transform(AffineTransform.getRotateInstance(0.00012*(nbTour-3000)*2*Math.PI, centreXTour, centreY));
g2d.draw(aiguilleTourMin);
g2d.setTransform(saveAT);
}
}