void AutoRetaliate::step(){ Team* team = this->team_; Goal* myGoal = team->goal(); if(player_[0]->robot()->isActive()) { player_[0]->step(); } /*else { map<qreal, Robot*> robotsCloseToGoal = stage()->getClosestPlayersToPoint(team, team->goal()->x(), team->goal()->y()); map<qreal, Robot*>::iterator goalIter = robotsCloseToGoal.begin(); for(int j=0; j<robotsCloseToGoal.size(); j++){ Robot* r = goalIter.first; } for(int i=0; i<team->size(); i++) { if(team->at(i)->isActive()) { player_[0]->setRobot(team->at(i)); player_[0]->step(); break; } } }*/ if(myGoal->width()>0){ Goal* goal = this->team()->goal(); cover1->setX(goal->x()); cover1->setY(goal->y() + goal->width()/3); cover2->setX(goal->x()); cover2->setY(goal->y() - goal->width()/3); cover3->setX(goal->x()); cover3->setY(goal->y()); //usei team->enemyTeam()->at(0), mas tanto faz pq o enemy eh associada dinamicamente ao robo for(int i = 3; i < this->team()->size(); i++){ Object* p; if(i==3) p = cover1; else if(i==4) p = cover2; else p = cover3; ((Defender*)player_[i])->setCover(p); } init = true; } if(init){ Stage* stage = this->stage_; Ball* ball = stage->ball(); map<qreal, Robot*> close = stage->getClosestPlayersToBallThatCanKick(team); map<int, Robot*> ids; map<qreal, Robot*> enemys = stage->getClosestPlayersToPointThatCanKick(team->enemyTeam(), (Point*)team->goal()); //Attacker e Blocker int i=0; map<qreal, Robot*>::iterator it1 = close.begin(); for(int j=0; j<close.size(); j++){ if((*it1).second->id() == player_[0]->robot()->id()){ it1++; continue; } Robot* robot = (*it1).second; if(i == 0){ player_[1]->setRobot(robot); player_[1]->step(); } else if(i == 1){ player_[2]->setRobot(robot); player_[2]->step(); } else ids[robot->id()] = robot; i++; it1++; } //Defenders enemys map<qreal, Robot*>::iterator it3 = enemys.begin(); //Defenders map<int, Robot*>::iterator it2 = ids.begin(); for(int i=3; i<team->size() && it2!=ids.end(); i++){ player_[i]->setRobot((*it2).second); if(it3!=enemys.end() && (*it3).second != NULL){ ((Defender*)player_[i])->setEnemy((*it3).second); it3++; } else{ ((Defender*)player_[i])->setEnemy(ball); ((Defender*)player_[i])->reset(); } player_[i]->step(); it2++; } } }