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.*;
	
	public class GameOverState extends IState
	{

		// Specifique
		private var GameOverFond: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 = new 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 = new StateMachine();
		
		var score_bitmap:Bitmap;
		var _score:int;
		var _scale:int;
		
		public function GameOverState(SM:StateMachine,ParentMC:MovieClip,stateName:String):void
		{
			super(stateName);
			PMC = ParentMC;			
			MySM = SM;
			_score = 0;
			_scale = 1;
		}
		
		
		/*
		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 Game Over...");
			var goBD:BitmapData = new GfxGameOver(400, 400);
			GameOverFond = new Bitmap(goBD);
			
			GameOverFond.x = 0;
			GameOverFond.y = 0;
			PMC.addChild(GameOverFond);
			
			score_bitmap = new Bitmap();
			score_bitmap.x = 100;
			score_bitmap.y = 230;
			PMC.addChild(score_bitmap);
			
			PMC.stage.addEventListener(MouseEvent.CLICK,GoGame);
			//PMC.stage.addEventListener(KeyboardEvent.KEY_DOWN,GoGame);
			
			PMC.playGameOverSound();
			PMC.playScoreSound();
			
			_score = 0;
			_scale = 1+Math.round(PMC.getScore()/(10*PMC.getFrameRate()));

		}
		
		override public function Exit():void
		{
			trace("Sortie Game Over...");
			PMC.removeChild(GameOverFond);		
			
			PMC.stopScoreSound();

			PMC.stage.removeEventListener(MouseEvent.CLICK,GoGame);
			PMC.stage.removeEventListener(KeyboardEvent.KEY_DOWN,GoGame);
		}
		
		override public function Update(time:int):void
		{
			// Boucle du jeux ICI
			if (_score <= PMC.getScore() - _scale) {				
				_score += _scale;
			} else {
				_score = PMC.getScore();
				PMC.stopScoreSound();
			}
			
			var a_textBD = new BitmapData(200, 40, true, 0x55000000);
			var len:int = String(_score).length;
			var str:String = "";
			for (var i:int=0; i<5-len; i++) str += "0";
			PMC.dText.draw(a_textBD, "< Score : "+str+_score+" >", 30, 12);
			score_bitmap.bitmapData = a_textBD;
				
			PMC.gameLoop(false);
			
		}
		
		private function GoGame(e:Event):void
		{
			trace("Start Game !");
			PMC.resetStats();
			PMC.resetObjects();
			PMC.getPlayerObj().SM.GotoPreviousState();
			MySM.GotoPreviousState();
			//MySM.SetNextState(new OptionState(MySM, PMC, "OptionState"));
		}
		
	}
}