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



class EquipementPanel extends JPanel{
	
	private Vector vecteurEquipement=new Vector();
	boolean torcheAllumee=false;
	boolean arme=false;
	boolean armure=false;
	private Entite objet=new Entite();
	
	
	private Graphics buffer;
	private Image image;
	private Graphics gOffScreenImage;
	private Image imageTile;
	private Toolkit toolkit = Toolkit.getDefaultToolkit();
	
	
	
	private Image imageTileStealth=toolkit.getImage("./images/sorts/3.gif");
	private Image imageTileFOND=toolkit.getImage("./images/EquipParchemin.jpg");
	private Image imageTileTORCH=toolkit.getImage("./images/special/allume.gif");
	
	private Image imageTileARME;
	private Image imageTileARMURE;
	
	private Image imageTileSILHOUETTE=toolkit.getImage("./images/sil1.gif");
	
	
	Enumeration e; 
	
	private CryptRL leJeu;
	
	int hpBar=0;
	int ppBar=0;
	
	
	public EquipementPanel(CryptRL game){
		leJeu=game;
		setLayout(null);
		
		
		
		new AnimThreadEquip(this).start();
		
	}
	

	
	public void update(Graphics g){
		
		if ( image == null ){
			image =createImage( getSize().width,getSize().height ); 
			gOffScreenImage= image.getGraphics();
		
		}

		paintComponent(gOffScreenImage); ///ou paint ?
		g.drawImage(image, 0, 0, this);
		gOffScreenImage.dispose(); 
		
	}
	
	
	
	
	
	/////////////////////////////////////////////////////////////////////////
	/////////////////////////////////////////////////////////////////////////
	public void paintComponent(Graphics g){
		if(buffer == null){
 			
 			image = createImage(640 ,480 );
 			buffer = image.getGraphics();
 		}
		
		
		buffer.drawImage(imageTileFOND, 0, 0, this);
		buffer.drawImage(imageTileSILHOUETTE, 25, 30, this);
		
		
		
		//// BARRES HP ET PP
		//Hits Points
		
		//leJeu.monde.perso.getMaxHitPts()
		//leJeu.monde.perso.getCurrentHitPts()
		//System.out.println(((double)leJeu.monde.perso.getCurrentHitPts()/(double)leJeu.monde.perso.getMaxHitPts())*180);
 		
 		hpBar=(int)Math.round(((double)leJeu.monde.perso.getCurrentHitPts()/(double)leJeu.monde.perso.getMaxHitPts())*180);
 		buffer.setColor(Color.red);
        buffer.fillRect(5,5,hpBar,5);
		
		
		
		
		//Power Points
		
		//leJeu.monde.perso.getMaxPower()
		//leJeu.monde.perso.getCurrentPower()
		ppBar=(int)Math.round(((double)leJeu.monde.perso.getCurrentPower()/(double)leJeu.monde.perso.getMaxPower())*180);
		buffer.setColor(Color.blue);
        buffer.fillRect(5,13,ppBar,5);
		
		
		
		
		
		/////ETATS MONDAINS
        if(leJeu.monde.perso.getStealthmode()){
        	buffer.drawImage(imageTileStealth, 15, 40, this);
        }
		
		
		
		////PARCOURS EQUIPEMENT DU PERSO////////////////////////
		torcheAllumee=false;
		arme=false;
		armure=false;
		
		vecteurEquipement=leJeu.monde.perso.getEquipementVect();
		
		
		if(!vecteurEquipement.isEmpty()){
				
			for(e = vecteurEquipement.elements();e.hasMoreElements();){
                
 				try{
					objet=(Entite) e.nextElement();
					
					
					if(objet.getAlume()){
			    		
			    		torcheAllumee=true;			
			    	}
					
					if(objet.getEquiped() && (objet.getClass().getName().compareTo("Arme")==0 || objet.getClass().getName().compareTo("Outil")==0)){
						arme=true;
						imageTileARME=toolkit.getImage(objet.getTileStr());
					}
					
					if(objet.getEquiped() && objet.getClass().getName().compareTo("Armure")==0){
				 		armure=true;
						imageTileARMURE=toolkit.getImage(objet.getTileStr());
				 	}
					
					
				}
				catch(NoSuchElementException exc){};
			}	
		}
		
		
		
		
		
		if(torcheAllumee){
			buffer.drawImage(imageTileTORCH, 170, 40, this);
		}		
		
		if(arme){
			buffer.drawImage(imageTileARME, 10, 145, this);
		}
		
		if(armure){
			buffer.drawImage(imageTileARMURE, 87, 100, this);
		}
		
		
		
		
		
		
		
		//finalement le buffer mémoire est dessiné dans le buffer d'affichage
		g.drawImage(image,0,0,this);
		
		
		//////TEST
		setOpaque( false );
		super.paintComponent(g);
	}
	
	
}

/////////////////////////////////////////////////////////////////////////

class AnimThreadEquip extends Thread{
	
	EquipementPanel an;
	public AnimThreadEquip(EquipementPanel a){
		
		an=a;
	}
	
	
	public void run(){
		while(true){
			try{
				
				an.repaint();
			
			
			sleep(200);
			}catch(Exception ex){}
		}	
		
	}
		
	
}
