コード例 #1
0
ファイル: Sparkman.cpp プロジェクト: MarcosPernica/Megaman
void Sparkman::actualizarMaquinaEstados(real deltaT)
{
	if(!megaman || !obtenerMundo().existeMegaman(IDTarget))
	{
		megaman = obtenerMundo().obtenerMegamanCercano(obtenerPosicion());
		IDTarget = megaman->obtenerID();
	}

	reflejos += deltaT;

	switch(estadoSparkman)
	{
		case DISPARANDO:
		{
			orientacion = obtenerOrientacion();
	
			b2Vec2 vista = megaman->obtenerPosicion()-obtenerPosicion();

			if(b2Dot(vista,Cuerpo::versorIzquierda) > 0)
				modificarOrientacion(izquierda);
			else 
				modificarOrientacion(derecha);

			disparar(megaman->obtenerPosicion()-obtenerPosicion());

			estadoSparkman = QUIETO;
			
			break;
		}
		case SALTANDO:
		{
			if(reflejos >= TIEMPOCORRIENDO)
			{
				reflejos = 0;
				dejarCorrer();
			}

			if(puedeSaltar())
				estadoSparkman = QUIETO;
			break;
		}
		case QUIETO:
		{
			
			real aleatorio = numeroAleatorio(0,1);

			modificarOrientacion(orientacion);
			
			if(puedeCorrer())
			{

				if(aleatorio < 0.5)
				{
					correr();
					saltar();
					estadoSparkman = SALTANDO;
				}
				else
				{
					estadoSparkman = DISPARANDO;
				}
			}
			else
			{
				virar();
				orientacion = obtenerOrientacion();
			}

			reflejos = 0;
			break;
		}
	}

	#ifndef compiling_server
	/*Es mas preciso cambiarlo de esta forma que una vez por cambio de la maquina de estados.*/

	if(estaEnElAire())
		cambiar(&animacion_saltando);
	else
		cambiar(&animacion_corriendo);
	#endif
}
コード例 #2
0
ファイル: Magnetman.cpp プロジェクト: MarcosPernica/Megaman
void Magnetman::actualizarMaquinaEstados(real deltaT)
{
	reflejos += deltaT;

	switch(estadoMagnetman)
	{
		case CORRIENDO:
		{
			if(!puedeCorrer())
			{
				virar();
				estadoMagnetman = QUIETO;		
			}	
			break;
		}
		case SALTANDO:
		{
			if(reflejos >= REFLEJOS && disparos)
			{
				reflejos = 0;

				Megaman *megaman = obtenerMundo().obtenerMegamanCercano(obtenerPosicion());

				b2Vec2 vista = megaman->obtenerPosicion()-obtenerPosicion();

				if(b2Dot(vista,Cuerpo::versorIzquierda) > 0)
					modificarOrientacion(izquierda);
				else 
					modificarOrientacion(derecha);

				disparar(megaman->obtenerPosicion()-obtenerPosicion());
				disparos--;
			}

			if(puedeSaltar())
				estadoMagnetman = QUIETO;
			break;
		}
		case QUIETO:
		{
			
			real aleatorio = numeroAleatorio(0,1);
			
			if(aleatorio > 0.6)
			{
				saltar();
				estadoMagnetman = SALTANDO;
				disparos = CANTDISPAROS;
			}
			else
			{
				correr();
				estadoMagnetman = CORRIENDO;
			}

			reflejos = 0;
			break;
		}
	}

	#ifndef compiling_server
	/*Es mas preciso cambiarlo de esta forma que una vez por cambio de la maquina de estados.*/

	if(estaEnElAire())
		cambiar(&animacion_saltando);
	else
		cambiar(&animacion_corriendo);
	#endif
}
コード例 #3
0
ファイル: parser.c プロジェクト: FedericoGarou/RepoDePrueba
int parsear(char* linea, imagen_proceso_t* proceso)
{
	if(especificaTiempo(linea))
		printf("Especifica tiempo;");
		//sleep(tiempo);
	int tipoDeLinea = determinarTipoDeLinea(linea);
	switch (tipoDeLinea)
	{
		case LINEA_VACIA:
			return NOSALTO;
			break;
		case INTERPRETE:
			return NOSALTO;
			break;
		case COMENTARIO:
			return NOSALTO;
			break;
		case DECLARACION_DE_VARIABLES:
			return NOSALTO;
			break;
		case COMIENZO_PROGRAMA:
			return NOSALTO;
			break;
		case FIN_PROGRAMA:
			proceso->PCB_proceso.ProgramCounter = FIN;
			return FIN;
			break;
		case COMIENZO_FUNCION:
			puts("Una funcion empieza");
			break;
		case FIN_FUNCION:
			//nodoStack_t* retorno = sacarLlamada(proceso);
			//proceso->PCB_proceso->ProgramCounter = retorno->numeroDeLinea;
			puts("Una funcion finaliza");
			return SALTO;
			break;
		case IMPRIMIR:
			imprimir(linea,*proceso);
			return NOSALTO;
			break;
		case SALTAR_NO_CERO:
			return saltar(linea,proceso,DISTINTO);
			break;
		case SALTAR_SI_CERO:
			return saltar(linea,proceso,IGUAL);
			break;
		case ETIQUETA:
			return NOSALTO;
			break;
		case ASIGNACION:
			puts("Asignacion");
			asignarVariable(linea,*proceso);
			return NOSALTO;
			break;
		case IO_FUNCION:
			puts("I/O");
			ejecutarIO(linea);
			return NOSALTO;//TODO por ahora despues vemos
			break;
		case FUNCION:
			irAFuncion(linea,proceso);
			return SALTO;
		case OTRO:
			puts("Error");
			return ERROR;
			break;
	}
	return 0;
}