summaryrefslogtreecommitdiff
path: root/2004/i/nono/src/ovision/map.cc
diff options
context:
space:
mode:
Diffstat (limited to '2004/i/nono/src/ovision/map.cc')
-rw-r--r--2004/i/nono/src/ovision/map.cc69
1 files changed, 15 insertions, 54 deletions
diff --git a/2004/i/nono/src/ovision/map.cc b/2004/i/nono/src/ovision/map.cc
index d90b2bd..0e1f255 100644
--- a/2004/i/nono/src/ovision/map.cc
+++ b/2004/i/nono/src/ovision/map.cc
@@ -62,10 +62,12 @@ Map::AddBall(double *pos, ZONE *pZone)
// definit la position de la balle
// ballTmp.zone = (double)((int)(pos[0])%300 + ((int)(pos[1])%300)*7);
+ // Vue de la balle partiel ou en bas de l'ecran
ballTmp.partial = pZone->partial;
if (pZone->bottom)
ballTmp.bottom = oconfig->ball_bottom_time_out ;
else ballTmp.bottom = 0;
+
ballTmp.skepticism = 0;
ballTmp.precision = pZone->centery;
@@ -88,6 +90,7 @@ Map::DelBall(list<tBALL>::iterator &iter)
int
Map::TestSimilarBall(ZONE *pBall, list<tBALL>::iterator &iter)
{
+ // Parcours de toutes les balles déjà trouvées
for(iter = ball.begin(); iter != ball.end(); iter++)
{
double pos[2] = {pBall->centerx, pBall->centery};
@@ -122,14 +125,14 @@ Map::Angle (double ballPosY, double robotPosY, double distRobotBall)
return acos ((ballPosY - robotPosY)/distRobotBall);
}
-/// Retourne si une balle est locke
+/// Balle lockée ?
bool
Map::IsLock()
{
return lock;
}
-/// Lock une balle pour savoir quel balle le robot suit
+/// Lock ou unlock une balle pour savoir quel balle le robot suit
void
Map::SetLock(bool value)
{
@@ -145,6 +148,7 @@ Map::GetCurBallPos (double &x, double &y)
{
x = curBall->position[0];
y = curBall->position[1];
+ cout << x << " " << y << endl;
return 1;
}
return false;
@@ -180,73 +184,30 @@ Map::AddBallsToMap(Group *group)
double pos[2];
double centYMax = 900;
-// bool ballLost = 1;
// On supprime l'ancienne liste de balle
ball.clear ();
+ checkCurBall = 0;
while (pCur)
{
-
+
// On choppe la position par rapport au robot
space->GetLoc (pCur->centerx, pCur->centery, pos[0], pos[1]);
+ AddBall(pos, pCur);
+ checkCurBall = 1;
- // Cherche si la balle est deja dans la liste
- list<tBALL>::iterator iCur;
-
- // On regarde si le group trouvé n'est pas en dehors de la table
- if (1) //TODO (pos[0] < TABLE_WIDTH) && (pos[1] < TABLE_HEIGHT))
+ // Place la balle la plus proche dans le pointeur curBall
+ if (pCur->centery < centYMax)
{
- // Si la balle n'est pas dans la liste on l'ajoute
- // if (!TestSimilarBall(pCur, iCur))
- // {
- AddBall(pos, pCur);
- /* }
- // Si elle l'est
- else
- {
- // on regarde si c'est la balle qui a ete locké
- if (IsLock ())
- if (iCur == curBall)
- ballLost = 0;
-
- // on incremente son marqueur de viabilite
- if (iCur->skepticism < oconfig->skepticism_max)
- iCur->skepticism++;
-
- if (pCur->centery <= iCur->precision)
- {
- ///TODO mis a jour de la position
- iCur->position[0] = pCur->centerx;
- iCur->position[1] = pCur->centery;
-
- iCur->bottom = pCur->bottom * oconfig->ball_bottom_time_out;
- }
- }
- */
- checkCurBall = 1;
- if (pCur->centery < centYMax)
- {
- curBall = ball.end ();
- centYMax = pCur->centery;
- }
+ curBall = ball.end ();
+ curBall--;
+ centYMax = pCur->centery;
}
pCur = pCur->next;
}
- // TODO decremente d'autre marqueur
-/* if (IsLock () && ballLost)
- {
- // si la balle sort par le bas pour etre prise
- if (curBall->bottom)
- curBall->bottom--;
- else curBall->skepticism -= oconfig->ball_lost_weight;
- }
-*/
- // presence robot ennemi
-
-
// Detection de poteau ou de goal
pCur = group->zoneListGoal;
if (pCur)