package Specific
{
	import flash.display.MovieClip;
	import flash.events.MouseEvent;
	import flash.events.KeyboardEvent;
	import flash.events.Event;
	import flash.display.Bitmap;
	import flash.display.BitmapData;
	
	import com.indindi.StateMachine.*;
	import com.indindi.Text.*;
	
	public class IntroState extends IState
	{

		// Specifique
		private var Introfond:Bitmap; 
		
		/* 
		Pour pouvoir utiliser facilement les évènements sur l'état
		on garde un pointeur sur le movieClip (_root/Stage) qui est
		récupéré à la création
		*/
		private var PMC:MovieClip;
		
		/*
		Par commodité, on garde un pointeur sur la machine à état dont
		fait partie l'étt actuel qu'on récupère à la création.
		*/
		private var MySM:StateMachine;

		var loadingTextBD:BitmapData;
		var loadingTextBitmap:Bitmap;
		
		public function IntroState(SM:StateMachine,ParentMC:MovieClip,stateName:String):void
		{
			super(stateName);
			PMC = ParentMC;			
			MySM = SM;
		}
		
		
		/*
		Ces trois fonctions sont gérées au niveau de la StateMachine
		et doivent figurer dans la classe dérivée.
		*/
		override public function Enter():void
		{	
			trace("Entree intro...");
			var introBD:BitmapData = new GfxIntro(400, 400);
			Introfond = new Bitmap(introBD);
			
			Introfond.x = 0;
			Introfond.y = 0;
			PMC.addChild(Introfond);
			
						
			var str:String = "Loading, please wait..."
			loadingTextBD = new BitmapData(str.length*9+10, 70, true, 0x55000000);
			PMC.dText.draw(loadingTextBD, str, 10, 5);
			loadingTextBitmap = new Bitmap(loadingTextBD);
			loadingTextBitmap.x = 90;
			loadingTextBitmap.y = 285;
			PMC.addChild(loadingTextBitmap);
			PMC.addEventListener("CacheGfxDone", hideLoadingText);

			
			PMC.stage.addEventListener(MouseEvent.CLICK,GoGame);
			PMC.stage.addEventListener(KeyboardEvent.KEY_DOWN,GoGame);
		}
		
		private function hideLoadingText(e:Event) {
			PMC.removeChild(loadingTextBitmap);
			PMC.removeEventListener("CacheGfxDone", hideLoadingText);
		}
		
		override public function Exit():void
		{
			PMC.removeChild(Introfond);			

			PMC.stage.removeEventListener(MouseEvent.CLICK,GoGame);
			PMC.stage.removeEventListener(KeyboardEvent.KEY_DOWN,GoGame);
		}
		
		override public function Update(time:int):void
		{
			// Boucle du jeux ICI
			//trace("intro");
		}
		
		private function GoGame(e:Event):void
		{
			if (PMC.cacheGfxDone) {
				trace("Start Options !");
				MySM.GotoNextState();
			}
		}
		
	}
}