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 }
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 }
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; }