Commit 853966ab authored by pitiot's avatar pitiot
Browse files

okish limaces

parent b7f81b10
......@@ -139,7 +139,7 @@ public:
static unsigned int maxMovingObstacles_;
static float averageMaxSpeed_ ;
static float panicSpeed;
static float neighborDist_ ;
static float neighborDistSq_ ;
static float radius_ ;
......@@ -164,6 +164,7 @@ public:
VEC3 meanVelocity_[SMOOTHING_BUFFER_SIZE] ;
VEC3 meanDirection_ ;
float ratio;
Simulator* sim_;
bool alive;
};
......
......@@ -390,6 +390,7 @@ inline void EnvMap::addObstAsNeighbor (Obstacle * o, const std::vector<Dart>& b
Dart d=NIL;
Dart dd=NIL;
/////////////////////////////////////////////boucle pour trouver une face du voisinage de l'obstacle ne contenant pas l'obstacle
// CGoGNout<<"debut neighbors cellules : ";
// for (std::vector<Dart>::const_iterator it =belonging_cells.begin();it<belonging_cells.end();++it)
......@@ -397,87 +398,99 @@ inline void EnvMap::addObstAsNeighbor (Obstacle * o, const std::vector<Dart>& b
// CGoGNout<<CGoGNendl;
do
{
beg = *it;
first = NIL;
d=beg;
do {
dd=map.alpha1(map.alpha1(d));
do {
if (!memo_mark.isMarked(dd))
{
first = dd;
}
dd=map.alpha1(dd);
}while (first==NIL && dd!=d);
d=map.phi1(d);
} while(first==NIL && d!=beg);
++it;
}while(first==NIL && it!=belonging_cells.end());
// assert(!buildingMark.isMarked(d)) ;
assert(first!=NIL) ;
// CGoGNout<<"first : "<<first<<CGoGNendl;
d=first;
do
{
if (!OneRingMark.isMarked(d))
{
OneRingMark.mark(d);
(*neighbor_cells).push_back(d);
}
beg = *it;
first = NIL;
d=beg;
do {
dd=map.alpha1(map.alpha1(d));
do {
if (!memo_mark.isMarked(dd) && !OneRingMark.isMarked(dd))
{
OneRingMark.mark(dd);
(*neighbor_cells).push_back(dd);
find_next(o,&d, memo_mark);
// CGoGNout<<"d : "<<d<<CGoGNendl;
}while(!map.sameFace(d,first));
}
}
dd=map.alpha1(dd);
}while (dd!=d);
d=map.phi1(d);
} while(d!=beg);
++it;
}while(it!=belonging_cells.end());
// save thomas
// Dart lastCell=NIL;
// Dart LastDartinLastCell=NIL;
// while(true)
// {
//
// // look a new component of one-ring
// do
// {
// beg = *it;
// first = NIL;
// d=beg;
// do {
// dd=map.alpha1(map.alpha1(d));
// do {
// if (!memo_mark.isMarked(dd) && !OneRingMark.isMarked(dd))
// {
// first = dd;
// lastCell=beg;
// LastDartinLastCell=d;
// }
// dd=map.alpha1(dd);
// }while (first==NIL && dd!=d);
//
// d=map.phi1(d);
//
// } while(first==NIL && d!=beg);
// ++it;
// }while(first==NIL && it!=belonging_cells.end());
//
// // here a component found (or not)
//
//
//
// // assert(!buildingMark.isMarked(d)) ;
// assert(first!=NIL) ;
// // CGoGNout<<"first : "<<first<<CGoGNendl;
//
// // register a component
// if (first !=NIL)
// {
// d=first;
// do
// {
// if (!OneRingMark.isMarked(d)) // on tente de marquer la cellule en tant que voisine
// {
// OneRingMark.mark(d);
// (*neighbor_cells).push_back(d);
// }
//
// dd=map.alpha1((d));
// if (!(memo_mark.isMarked(dd))) // Si la cellule a droite n'est pas marquée comme présente, on la sélectionne
// {
// d = dd;
// }
// else d=map.phi_1(d); // sinon on tourne dans la cellule actuelle
// // CGoGNout<<"d : "<<d<<CGoGNendl;
// }while(d!=first); //on s'arrête quand on est revenu a la dart de départ
//
// }
// else break;
// }
// find_next cherche la prochaine case "voisine" d'un obstacle faisant parti d'un movingobstacle (algo de parcours du one-ring )
inline void EnvMap::find_next(Obstacle* o,Dart * ddd, CellMarkerMemo<FACE>& cms)
{
Dart d=*ddd;
Dart first = NIL;
Dart dd;
int rd =0;
do{
rd++;
dd=map.alpha1((d));
if (!(cms.isMarked(dd)))
{
first = dd;
}
if(rd>100)
{
if (rd>10000)
{
displayMO(o);
CGoGNout <<(first==NIL)<< " infini find next d : "<< d<<"phi 2 markée ? : "<<cms.isMarked(map.phi2(d))<<CGoGNendl;
CGoGNout<<"cellules markées : "<<CGoGNendl;
std::vector<Dart> v=cms.get_markedCells();
for(std::vector<Dart>::iterator it=v.begin();it<v.end();++it)
{
CGoGNout<<(*it).index<<CGoGNendl;
}
break;
}
CGoGNout <<(first==NIL)<< " infini find next d : "<< d<<"phi 2 markée ? : "<<cms.isMarked(map.phi2(d))<<CGoGNendl;
CGoGNout<<"cellules markées : "<<CGoGNendl;
std::vector<Dart> v=cms.get_markedCells();
for(std::vector<Dart>::iterator it=v.begin();it<v.end();++it)
{
CGoGNout<<(*it).index<<CGoGNendl;
}
}
d=map.phi_1(d);
}while(first==NIL);
*ddd=first;
}
inline void EnvMap::pushObstNeighborInCells(Obstacle* o, Dart d)
{
assert(map.getCurrentLevel() == map.getMaxLevel());
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment