var anchoJuego=320; //Almacena el ancho del juego en pantalla
var altoJuego=480; //Almacena el alto del juego en pantalla
var factorVelocidad=3; //Variable para ver el factor de velocidad que llevamos a mayor número es más lento (empezando con -0-)
var contadorVelocidad=0; //Variable para llevar el conteo de velocidad en si
var decimalPuntuacion=0;
var decimalDecimal=0;
var numeroBinario='';
var numeroBinarioConvertido='';
var validaUno=false;
var validaCero=false;
var validaBorrar=false;
var validaEnter=false;
var validaReiniciar=false;
var juegoTerminado=false;
var tiempoRestante=15;
var booleanoBalaJugador=false;
var booleanoExplosionEnemigo=false;
var booleanoBalaEnemigo=false;
var booleanoExplosionJugador=false;

var playState = {	
	//Se removió el preload porque ya tenemos el otro
	
	//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
	//Ésta función es casi igual a la que teníamos en la versión única no tiene mucha ciencia...
	create: function () {
		//Se remueve el color de fondo y el sistema físico	
		this.fondoEstrellas=game.add.sprite(0,-480,'fondoEstrellas'); 
		//this.jugador=game.add.sprite(anchoJuego/2,altoJuego*(3/4),'jugador'); 
		this.jugador=game.add.sprite(anchoJuego/2,altoJuego*(2/3)+15,'jugador');
		this.jugador.animations.add('animacionJugador',[1,2,3,4],8);
		this.jugador.anchor.setTo(0.5,0.5); 
		
		
		
		
		
		
		//this.enemigo=game.add.sprite(anchoJuego/2,altoJuego*(1/4),'enemigo');
		//this.player.animations.add('right', [1, 2], 8, true);
		this.enemigo = game.add.sprite(anchoJuego/2,altoJuego*(1/4)+10+15,'enemigo');
		//this.enemigo.animations.add('animacionEnemigo',[1,2,3,4],8,true);
		this.enemigo.animations.add('animacionEnemigo',[1,2,3,4],8);
		//this.enemigo.animations.play('animacionEnemigo'); // Start the left animation
		this.enemigo.anchor.setTo(0.5,0.5);
		
		
		
		
		this.balaJugador=game.add.sprite(this.jugador.x,this.jugador.y-50,'balaJugador');
		this.balaJugador.animations.add('animacionBalaJugador',[1,2,3,4],8);
		this.balaJugador.anchor.setTo(0.5,0.5);
		this.balaJugador.visible=false;
		//this.balaJugador.enableBody = true;
		


		this.balaEnemigo=game.add.sprite(this.enemigo.x,this.enemigo.y+50,'balaEnemigo');
		this.balaEnemigo.animations.add('animacionBalaEnemigo',[1,2,3,4],8);
		this.balaEnemigo.anchor.setTo(0.5,0.5);
		this.balaEnemigo.visible=false;


		
		
		
		
		this.explosionEnemigo=game.add.sprite(this.enemigo.x,this.enemigo.y,'explosionEnemigo');
		this.explosionEnemigo.animations.add('animacionExplosionEnemigo',[0,1,2,3,4,5,6,7,8,0],8);
		this.explosionEnemigo.anchor.setTo(0.5,0.5);
		this.explosionEnemigo.frame=0;
		//this.explosion.visible=true;
		//this.explosion.animations.play('animacionExplosion');
		//this.explosion.visible=false;
		
		
		this.explosionJugador=game.add.sprite(this.jugador.x,this.jugador.y,'explosionJugador');
		this.explosionJugador.animations.add('animacionExplosionJugador',[0,1,2,3,4,5,6,7,8,0],8);
		this.explosionJugador.anchor.setTo(0.5,0.5);
		this.explosionJugador.frame=0;
		
		
		
		this.btnUno=game.add.sprite(10,altoJuego*(1/2)+15,'btnUno');
		this.btnCero=game.add.sprite(anchoJuego-10-60,altoJuego*(1/2)+15,'btnCero');
		this.btnEnter=game.add.sprite(10,altoJuego*(2/3)+15,'btnEnter');
		this.btnBorrar=game.add.sprite(anchoJuego-10-60,altoJuego*(2/3)+15,'btnBorrar');
		this.btnReiniciar=game.add.sprite(10,altoJuego*(5/6)+15,'btnReiniciar');

		this.textoPuntuacion=game.add.text(10,5+15,'Puntuacion: '+decimalPuntuacion,{font:'20px Arial',fill:'#fff'});
		decimalDecimal=this.obtenDecimal(); //Este no lleva porque es variable local
		numeroBinarioConvertido=this.convierteBinario(decimalDecimal); //Este no lleva porque es variable local
		this.textoDecimal=game.add.text(10,30+15,'Decimal: '+decimalDecimal,{font:'20px Arial',fill:'#fff'});
		this.textoTiempoRestante=game.add.text(10,55+15,'Tiempo restante: '+tiempoRestante,{font:'20px Arial',fill:'#fff'});
		
		this.textoBinario=game.add.text(anchoJuego/2,altoJuego*(3/7)+15+15,numeroBinario,{font:'bold 32px Arial',fill:'#fff',align:'center'});
		this.textoBinario.anchor.setTo(0.5,0.5);
				
		this.btnUno.inputEnabled=true;
		this.btnUno.events.onInputOver.add(function() {validaUno=true;},this);
		this.btnUno.events.onInputOut.add(function() {validaUno=false;},this);
		this.btnUno.events.onInputDown.add(function() {validaUno=true;},this);
		this.btnUno.events.onInputUp.add(function() {validaUno=false;},this);
				
		this.btnCero.inputEnabled=true;
		this.btnCero.events.onInputOver.add(function() {validaCero=true;},this);
		this.btnCero.events.onInputOut.add(function() {validaCero=false;},this);
		this.btnCero.events.onInputDown.add(function() {validaCero=true;},this);
		this.btnCero.events.onInputUp.add(function() {validaCero=false;},this);
				
		this.btnEnter.inputEnabled=true;
		this.btnEnter.events.onInputOver.add(function() {validaEnter=true;},this);
		this.btnEnter.events.onInputOut.add(function() {validaEnter=false;},this);
		this.btnEnter.events.onInputDown.add(function() {validaEnter=true;},this);
		this.btnEnter.events.onInputUp.add(function() {validaEnter=false;},this);

		this.btnBorrar.inputEnabled=true;
		this.btnBorrar.events.onInputOver.add(function() {validaBorrar=true;},this);
		this.btnBorrar.events.onInputOut.add(function() {validaBorrar=false;},this);
		this.btnBorrar.events.onInputDown.add(function() {validaBorrar=true;},this);
		this.btnBorrar.events.onInputUp.add(function() {validaBorrar=false;},this);

		this.btnReiniciar.inputEnabled=true;
		this.btnReiniciar.events.onInputOver.add(function() {validaReiniciar=true;},this);
		this.btnReiniciar.events.onInputOut.add(function() {validaReiniciar=false;},this);
		this.btnReiniciar.events.onInputDown.add(function() {validaReiniciar=true;},this);
		this.btnReiniciar.events.onInputUp.add(function() {validaReiniciar=false;},this);

		
		//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&		
		//Probaremos esta situación del tiempo
		//Teóricamente cada segundo debería actualizar el contador
		game.time.events.loop(Phaser.Timer.SECOND, this.actualizaTiempo, this);
		//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
		
		
		this.sonidoLaser=game.add.audio('sonidoLaser');
		this.sonidoExplosion=game.add.audio('sonidoExplosion');
		
		
		
		
	}, //Fin del create
	//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
	
	//||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
	//Función para actualizar el contador
	actualizaTiempo: function() {
		if (juegoTerminado==false) {
			tiempoRestante--;
			if (tiempoRestante<0) { 
				juegoTerminado=true; 
				this.textoTiempoRestante.text="Tiempo restante: 0"
				this.textoBinario.text='Juego Terminado';
				this.mueveBalaEnemigo();
				
				
				
				
				
				
				
			}
			else {
			this.textoTiempoRestante.text="Tiempo restante: "+tiempoRestante;
			}
		}
	}, //Fin de actualizaTiempo
	
	//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
	//Función para mover el fondo
	mueveFondo: function () {
		if (this.fondoEstrellas.y > 0) {
			this.fondoEstrellas.y=-480;
		}//fin del if			
		contadorVelocidad++; //Se incrementará con cada pasada o actualización
		if (contadorVelocidad>=factorVelocidad) { //Si es mayor o igual
			this.fondoEstrellas.y+=1; //Se mueve el fondo un poquitito
			contadorVelocidad=0; //Se reinicia el contador de velocidad
		}//Fin del if
	},//Fin de mover el fondo
	//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!			
		
	//=============================================================
	//Función para obtener un decimal al azar
	obtenDecimal: function () {
		var limiteSuperior=0;
		var residuo=0;
		var regresar=0;
		residuo=parseInt((decimalPuntuacion+10)/10);
		limiteSuperior=residuo*5;
		regresar=game.rnd.integerInRange(1,limiteSuperior);
		return (regresar);
	},//Fin de obtenDecimal
	//============================================================

	//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
	//Función para convertir a binario
	convierteBinario: function (numerin) {
		var invertido='';
		var regreso='';
		var i=0;
		var modulo=0;
		while (numerin>1) {
			modulo=numerin%2;
			if (modulo==1) { invertido+='1'; }
			else { invertido+='0'; }
			numerin=parseInt(numerin/2);
		}//fin del while
		if (numerin==1) { invertido+='1'; }
		else { invertido+='0'; }					
		regreso=invertido.split('').reverse().join('');
		return (regreso);
	},//Fin de convierteBinario
	//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

	//=============================================================
	//Función de actualización
	update: function () {
		if (juegoTerminado==false) {
			this.mueveFondo(); //Se invocará el movimiento del fondo
			this.enemigo.animations.play('animacionEnemigo'); // Start the left animation
			this.jugador.animations.play('animacionJugador');
			this.balaJugador.animations.play('animacionBalaJugador');
			this.balaEnemigo.animations.play('animacionBalaEnemigo');
			
			
			
			
			
			
			
			
			if (validaUno==true) {
				validaUno=false;
				if (numeroBinario.length <16) {
					numeroBinario+='1';
					this.textoBinario.text=numeroBinario;
				}//fin del if de longitud
			}//fin de validaUno==true
			if (validaCero==true) {
				validaCero=false;
				if (numeroBinario.length <16 && numeroBinario.length>0) {
					numeroBinario+='0';
					this.textoBinario.text=numeroBinario;
				}//fin del if de longitud
			}//fin de validaCero==true
			if (validaEnter==true) {
				validaEnter=false;
				if (numeroBinario.length>0) {
					if (numeroBinario==numeroBinarioConvertido) {
						decimalDecimal=this.obtenDecimal();
						this.textoDecimal.text='Decimal: '+decimalDecimal;
						numeroBinarioConvertido=this.convierteBinario(decimalDecimal);
						numeroBinario='';
						this.textoBinario.text=numeroBinario;
						decimalPuntuacion++;
						this.textoPuntuacion.text='Puntuacion: '+decimalPuntuacion;
						
						game.global.puntajeAlmacenar=decimalPuntuacion;
						
						if (localStorage.getItem('bestScore')<game.global.puntajeAlmacenar) { 
							localStorage.setItem('bestScore',game.global.puntajeAlmacenar);
						}
						
						//localStorage.setItem('bestScore', game.global.puntajeAlmacenar)
						
						
						//Aqui abajo probaremos reiniciar el tiempo a ver que ondon....
						//=======================================================
						tiempoRestante=15;
						//=======================================================
						


						this.mueveBalaJugador();
						

						
						
						
						
						
						
						
						
						
						
						
					}//fin de comparación en caso de éxito de comparación
					else { //Osea habremos perdido...
						juegoTerminado=true;
						this.mueveBalaEnemigo();
						//Aquí abajo pondríamos el código de si se alcanzó la puntuación máxima
						//=====================================================================
						//Usar localStorage
						//=====================================================================
						this.textoBinario.text='Juego Terminado';
						this.enemigo.frame = 0;
					}//fin del else de juego terminado
				}//fin de if de longitud
			}//fin de validaEnter
			if (validaBorrar==true) {
				validaBorrar=false;
				if (numeroBinario.length>0) {
					numeroBinario=numeroBinario.substring(0,numeroBinario.length-1);
					this.textoBinario.text=numeroBinario;
				}//fin del if de longitud
			}//fin de validaBorrar==true

		}//fin del if juegoTerminado==false
		
		else {				
		//Ésta de aquí abajo va fuera del if de juegoTerminado
		//¿Si no lo hiciéramos así entonces como podríamos verificar el reinicio del juego?				
			if (validaReiniciar==true) {
				//validaReiniciar=false;
				//juegoTerminado=false;
				//decimalDecimal=obtenDecimal();
				//textoDecimal.text='Decimal: '+decimalDecimal;
				//numeroBinarioConvertido=convierteBinario(decimalDecimal);
				//numeroBinario='';
				//textoBinario.text=numeroBinario;
				//decimalPuntuacion=0;
				//textoPuntuacion.text='Puntuacion: '+decimalPuntuacion;
				//game.time.events.add(2000, this.startMenu, this);
				game.time.events.add(100, this.startMenu, this);
			}//fin de validaReiniciar
		}//fin del else osea juegoTerminado==true				
		
		
		
		
		if (booleanoBalaJugador==true) {
			this.balaJugador.y-=10;
			if (this.balaJugador.y<=this.enemigo.y) {
				this.balaJugador.x=this.jugador.x;
				this.balaJugador.y=this.jugador.y-50;
				this.balaJugador.visible=false;
				this.explosionEnemigo.animations.play('animacionExplosionEnemigo');
				
				
				this.sonidoExplosion.play();
				
				
				booleanoBalaJugador=false;
			}
		}

		
		if (booleanoBalaEnemigo==true) {
			this.balaEnemigo.y+=10;
			if (this.balaEnemigo.y>=this.jugador.y) {
				this.balaEnemigo.x=this.enemigo.x;
				this.balaEnemigo.y=this.enemigo.y+50;
				this.balaEnemigo.visible=false;
				this.explosionJugador.animations.play('animacionExplosionJugador');
				
				
				this.sonidoExplosion.play();
				
				
				booleanoBalaEnemigo=false;
			}
		}
		
		
		
		
		
		
		
	},//Fin de actualización
	//=============================================================

	startMenu: function() {
		validaReiniciar=false;
		juegoTerminado=false;
		decimalDecimal=this.obtenDecimal();
		this.textoDecimal.text='Decimal: '+decimalDecimal;
		numeroBinarioConvertido=this.convierteBinario(decimalDecimal);
		numeroBinario='';
		this.textoBinario.text=numeroBinario;
		decimalPuntuacion=0;
		this.textoPuntuacion.text='Puntuacion: '+decimalPuntuacion;
		tiempoRestante=15;
		game.state.start('menu');
	},
	
	
	mueveBalaJugador: function() {
		this.balaJugador.visible=true;
		booleanoBalaJugador=true;
		//reproduce el sonido del disparo
		this.sonidoLaser.play();
		
		
	},
	

	mueveBalaEnemigo: function() {
		this.balaEnemigo.visible=true;
		booleanoBalaEnemigo=true;
		//reproduce el sonido del disparo
		this.sonidoLaser.play();
		
		
	},

	
	
	
};













/*var helpState = {
	create: function () {
		this.fondoAyuda=game.add.sprite(0,0,'fondoAyuda');
		game.input.onDown.addOnce(this.retornar, this);
	},
	
	retornar: function () {
		game.state.start('menu');
	},
};
*/