/*
* 12:39:53
* vjanssen
*/
package a0902d_f_Philosophen_VORLAGE;

import java.awt.Color;
import java.awt.Graphics;

public class Philosoph
{
	//Klassenvariablen für alle Philosophenobjekte gleich
		private static AbsForm[] gesicht = {
			new AF_Kreis (80,90,100, Color.GRAY),					//Kopf
			new AF_Kreis (60,80,20, Color.LIGHT_GRAY),				//Augen
			new AF_Kreis (100,80,20, Color.LIGHT_GRAY),	
			new AF_Kreis (63,85,6, Color.BLACK),					//Augen
			new AF_Kreis (103,85,6, Color.BLACK),
			new AF_Dreieck (80,100,20, Color.LIGHT_GRAY)	};			//Nase		
		private static AbsForm[] mund_essen = {					//Mund fröhlich
			new AF_Quadrat (80,120,10, Color.GREEN),
			new AF_Quadrat (70,118,10, Color.GREEN),
			new AF_Quadrat (60,112,10, Color.GREEN),
			new AF_Quadrat (90,118,10, Color.GREEN),
			new AF_Quadrat (100,112,10, Color.GREEN)	};
		private static AbsForm[] mund_hunger = {					//Mund traurig
			new AF_Quadrat (80,120,10, Color.RED),
			new AF_Quadrat (70,122,10, Color.RED),
			new AF_Quadrat (60,128,10, Color.RED),
			new AF_Quadrat (90,122,10, Color.RED),
			new AF_Quadrat (100,128,10, Color.RED)	};
		private static AbsForm[] mund_denken = {					//Mund neutral
			new AF_Quadrat (80,120,10, Color.YELLOW),
			new AF_Quadrat (70,120,10, Color.YELLOW),
			new AF_Quadrat (60,120,10, Color.YELLOW),
			new AF_Quadrat (90,120,10, Color.YELLOW),
			new AF_Quadrat (100,120,10, Color.YELLOW)	};
		
		private static GabelSteuerung gabelSteuerung = new GabelSteuerung();
	
	// Klassenmethode
		private void warte()
		{
			try {Thread.sleep((int)(Math.random()*5000)+5000);}	
			catch (InterruptedException ie){}	
		}

	// Objektvariablen
		private int nummer;
		private int xVer;
		private int yVer;
		private String zustand;
		private MeinFenster fenster;
			
		public Philosoph()
		{
			super();
		}
		
		public Philosoph (int nummer, int xVer, int yVer, String zustand, MeinFenster fenster)
		{
			//Mögliche Zustände: "essen" "hunger" oder "denken"
			
			this.nummer = nummer;
			this.xVer = xVer;
			this.yVer = yVer;
			this.zustand = zustand;
			this.fenster = fenster;
		}

		public int getNummer()
		{
			return this.nummer;
		}
		
		public void setHunger()
		{
			this.zustand = "hunger";
			fenster.repaint();
			this.warte();
			if (gabelSteuerung.getGabeln(this))
			{
				this.setEssen();
			}
			else
			{
				this.setDenken();
			}			
		}
		
		public void setEssen()
		{
			this.zustand = "essen";
			fenster.repaint();
			this.warte();
			gabelSteuerung.setGabeln(this);	
			this.setDenken();
		}
		
		public void setDenken()
		{
			this.zustand = "denken";
			fenster.repaint();
			this.warte();
		}
		
		public void drawObjekt(Graphics g)
		{
			AbsForm[] mund;
					
			if 		(zustand.equals("denken"))	mund = mund_denken;
			else if (zustand.equals("hunger"))	mund = mund_hunger;
			else								mund = mund_essen;

			for (int i=0; i<gesicht.length; i++)
			{
				gesicht[i].drawObjekt(g, this.xVer, this.yVer);
			}
			for (int i=0; i<mund.length; i++)
			{
				mund[i].drawObjekt(g, this.xVer, this.yVer);
			}
			
			if 		(zustand.equals("denken"))	g.drawString("* denk *",58 + this.xVer, 65 + this.yVer);
			else if (zustand.equals("hunger"))	g.drawString("HUNGER!",	53 + this.xVer, 65 + this.yVer);
			else								g.drawString("essen",	63 + this.xVer, 65 + this.yVer);
			
			g.drawString("Philosoph " + this.nummer, 50 + this.xVer, 155 + this.yVer);
			
			gabelSteuerung.drawObjekt(g);			
		} 
}
