void hacerMovimiento(t_personaje *personaje) { if(!tieneRecursoActual(personaje)) { leerSiguienteRecurso(personaje); if(!personaje->nivel_actual) { return; } } log_info(logger, "Posicion del recurso: (%d, %d), mi posicion: (%d, %d).", personaje->recursoActual->pos->x, personaje->recursoActual->pos->y, personaje->pos->x, personaje->pos->y); char* recursoBloqueante = ""; mover(personaje); if(samePoint(personaje->pos, personaje->recursoActual->pos)) { recursoBloqueante = pedirRecurso(personaje); log_debug(logger, string_equals_ignore_case(recursoBloqueante, "0") ? "Recurso otorgado" : "Bloqueado! Recurso no otorgado"); } t_mensaje* requestMovimiento = mensaje_create(MOVER, pointAsString(*personaje->pos)); socketSend(personaje->connNivel, requestMovimiento, handleConnectionError); pedirSiguienteTurno(personaje, recursoBloqueante); }
void Foam::binaryOperationSearchableSurface::findNearest ( const pointField& samples, const scalarField& nearestDistSqr, List<pointIndexHit>& info ) const { if(debug) { Info << "Foam::binaryOperationSearchableSurface::findNearest " << name() << " : " << samples.size() << " samples" << endl; } List<pointIndexHit> hitA; List<pointIndexHit> hitB; if(debug) { Info << "Doing A" << endl; } a().findNearest(samples,nearestDistSqr,hitA); if(debug) { Info << "Doing B" << endl; } b().findNearest(samples,nearestDistSqr,hitB); List<bool> inAA,inAB; List<bool> inBA,inBB; List<bool> same; insideA(hitB,inAB); insideB(hitA,inBA); insideB(hitB,inBB); insideA(hitA,inAA); samePoint(hitA,hitB,same); info.setSize(samples.size()); forAll(info,i) { hitWhom hA=HITSA; hitWhom hB=HITSB; if(same[i]) { hA=BOTH; hB=BOTH; } bool validA=(hitA[i].hit() && this->decidePoint(hA,inAA[i],inBA[i])); bool validB=(hitB[i].hit() && this->decidePoint(hB,inAB[i],inBB[i])); if(!validA && !validB) { // WarningIn("Foam::binaryOperationSearchableSurface::findNearest") // << "Neither hit " << hitA[i] << " nor " << hitB[i] // << " near " << samples[i] << " valid" << endl // << same[i] << " " << inAA[i] << " " << inBA[i] // << " " << inAB[i] << " " << inBB[i] << endl // << mag(hitA[i].rawPoint()-samples[i]) << " " // << mag(hitB[i].rawPoint()-samples[i]) // << endl; } else if( validA && validB ) { if(same[i]) { info[i]=hitA[i]; } else if( mag(samples[i]-hitA[i].rawPoint()) < mag(samples[i]-hitB[i].rawPoint()) ) { info[i]=hitA[i]; } else { info[i]=hitB[i]; } } else if( validA ) { info[i]=hitA[i]; } else { info[i]=hitB[i]; } }