void Controlador_game_over::loop(Input_base& input, float delta)
{
	if(input.es_senal_salida() || input.es_input_down(Input::I_ESCAPE))
	{
		abandonar_aplicacion();
	}
	else
	{
		tiempo+=delta;

		alpha=(tiempo * 255) / 2.0f;
		if(alpha > 255) alpha=255;

		alpha_the_end=(tiempo * 255) / 5.0f;
		if(alpha_the_end > 255) alpha_the_end=255;

		rep_game_over.establecer_alpha(alpha);
		rep_the_end.establecer_alpha(alpha_the_end);

		if(input.hay_eventos_teclado_down() && alpha > 200)
		{
			solicitar_cambio_estado(Director_estados::t_estados::intro);
		}
	}
}
Input_usuario Recogedor_input::recoger_input_usuario(Input_base& input) const
{
	auto proc=[&input](Input_usuario::t_estados& e, int t)
	{
		if(input.es_input_down(t)) 		e=Input_usuario::t_estados::down;
		else if(input.es_input_pulsado(t)) 	e=Input_usuario::t_estados::pulsado;
	};

	Input_usuario resultado;

	proc(resultado.usar, Input::I_USAR_SELECCION);
	proc(resultado.recargar_escudo, Input::I_RECARGA_ESCUDO);
	proc(resultado.estasis, Input::I_ESTASIS);

	if(input.es_input_pulsado(Input::I_DERECHA)) resultado.mov_horizontal=1;
	else if(input.es_input_pulsado(Input::I_IZQUIERDA)) resultado.mov_horizontal=-1;
//	else if(input.es_input_up(Input::I_DERECHA)) resultado.keyup_horizontal=1;
//	else if(input.es_input_up(Input::I_IZQUIERDA)) resultado.keyup_horizontal=-1;

	if(input.es_input_pulsado(Input::I_ARRIBA)) resultado.mov_vertical=-1;
	else if(input.es_input_pulsado(Input::I_ABAJO)) resultado.mov_vertical=1;
//	else if(input.es_input_pulsado(Input::I_ARRIBA)) resultado.keyup_vertical=-1;
//	else if(input.es_input_pulsado(Input::I_ABAJO)) resultado.keyup_vertical=1;

	return resultado;
}
void Controlador_juego::loop(Input_base& input, float delta)
{
	if(input.es_senal_salida() || input.es_input_down(Input::I_ESCAPE))
	{
		abandonar_aplicacion();
	}
	else
	{
		contador_tiempo.turno(delta);

		Recogedor_input RI;
		Input_usuario iu=RI.recoger_input_usuario(input);

		if(iu.usar)
		{
			Logica_disparador lp(proyectiles_enemigos, jugador);
			lp.insertar_disparo_jugador(proyectiles_jugador);
		}

		procesar_jugador(jugador, delta, iu);

		//TODO TODO TODO...
		if(jugador.acc_salud() <= 0.0)
		{
			abandonar_aplicacion();
		}

		//TODO TODO TODO...
		if(!contador_tiempo.es_tiempo_restante())
		{
			abandonar_aplicacion();
		}
	
		controlar_y_efectuar_salida_sala(jugador);

		logica_proyectiles(delta);
		logica_mundo(delta);
	}
}