void UniteUtilitaire::convertir(Unite* ennemi , Player* joueur, Player* joueurEnnemi) { if (outil == Outil::convertisseur) { int index = -1; for (int i = 0; i < joueurEnnemi->getNombreUnite(); i++) { if (joueurEnnemi->getUnite(i)->getCoordX() == ennemi->getCoordX() && joueurEnnemi->getUnite(i)->getCoordY() == ennemi->getCoordY()) { index = i; break; } } if (joueurEnnemi->getUnite(index)->isUtilitaire()) { UniteUtilitaire* u = (UniteUtilitaire*)joueurEnnemi->getUnite(index); if (u->estPlein()) { Unite* temp = u->getUnite(); for (int i = 0; i < joueurEnnemi->getNombreUnite(); i++) { if (joueurEnnemi->getUnite(i)->getCoordX() == temp->getCoordX() && joueurEnnemi->getUnite(i)->getCoordY() == temp->getCoordY()) { joueurEnnemi->detruireUnite(i); } } } } joueur->creerUnite(ennemi, ennemi->getResistance()); joueurEnnemi->detruireUnite(index); outilRestant--; setAAgi(); } }
void RTSSelectedUnitsCommand::addBuild(const TypeUnite *type, int count) { if (m_availableBuilds.find(type) != m_availableBuilds.end()) { EngineMessage message(nullptr); message.message = mf::EngineMessageType::BUILD; message.ints[mf::EngineMessageKey::OBJECT_TYPE] = type->id(); message.ints[mf::EngineMessageKey::COUNT] = count; message.ints[mf::EngineMessageKey::TEAM_ID] = m_rtsState->game()->getCurrentJoueur()->equipe()->id(); ClientNetworkEngine *network = m_rtsState->game()->clientNetwork(); for (WorldObject * object : m_selection) { Unite *unite = dynamic_cast<Unite*>(object); message.ints[mf::EngineMessageKey::BUILDER] = unite->id(); network->sendToServerTcp(message); } } }
void RTSSelectedUnitsCommand::changeSelection(const std::vector<WorldObject *> &selection) { m_selection = selection; m_availableBuilds.clear(); std::vector<const std::vector<TypeUnite *>*> available; for (WorldObject * object : m_selection) { Unite *unite = dynamic_cast<Unite *>(object); if (unite) { available.push_back(&unite->type()->construit()); } else { available.clear(); break; } } for (auto * types : available) { for (TypeUnite * type : *types) { bool add = true; for (const std::vector<TypeUnite *> *typesToTest : available) { auto it = std::find(typesToTest->begin(), typesToTest->end(), type); if (it == typesToTest->end()) { add = false; break; } } if (add) { m_availableBuilds.insert(type); } } } }
void Player::decouvre() { for (unsigned int i = 0; i < listUnite.size(); i++) { Unite* unite = listUnite[i]; for (int j = unite->getCoordY() - unite->getChampVision(); j < unite->getCoordY() + unite->getChampVision(); j++) { if (j >= 0 && j < MAP_HEIGTH) { for (int k = 1 + unite->getCoordX() - (unite->getChampVision() - abs(j - unite->getCoordY())); k < unite->getCoordX() + (unite->getChampVision() - abs(j - unite->getCoordY()));k++) { if (k >= 0 && k < MAP_WIDTH) { caseDecouverte[k][j] = true; } } } } } }
Uint32 gestionAction(Uint32 intervalle, void *arg) { ObjetMap *temp, *cible; Unite *n; for(int i=0;i< m->getvec().size();i++) { temp=m->getvec()[i]; if(temp->gettype()==PEON || temp->gettype()==LANCIER) { SDL_mutexP(mutexObjet); n = (Unite*)temp; if(n->getStatut()==DEPLACEMENT) { point coordActuel=n->getc1(), coordDesti=n->getdesti(); if(coordActuel.x==coordDesti.x && coordActuel.y==coordDesti.y) { n->setStatut(AFK); n->setCible(NULL); } else { deplaceToi(n, coordDesti.x, coordDesti.y); } } if(n->getStatut()==COLLECTE) { point coordActuel=n->getc1(), coordDesti=(n->getcible())->getc1(); if(abs(coordActuel.x-coordDesti.x)<=1 && abs(coordActuel.y-coordDesti.y)<=1) { cible=n->getcible(); cible->setpv(cible->getpv()-1); if(cible->gettype()==BLE) { joueur1.setmiam(joueur1.getmiam()+1); } else { joueur1.setbois(joueur1.getbois()+1); } } else { deplaceToi(n, coordDesti.x, coordDesti.y); } } if(n->getStatut()==ATTAQUE) { point coordActuel=n->getc1(), coordDesti=(n->getcible())->getc1(); if(abs(coordActuel.x-coordDesti.x)<=1 && abs(coordActuel.y-coordDesti.y)<=1) { cible=n->getcible(); cible->setpv(cible->getpv()-n->getPa()); } else { deplaceToi(n, coordDesti.x, coordDesti.y); } } SDL_mutexV(mutexObjet); } } return intervalle; }
void gestionCliqueD(int cliqueX, int cliqueY) { if(objetReadyToDrop != 0) { objetReadyToDrop = 0; } else if(cliqueY<maxH-MENU_H)// si on est hors du menu { Position positionVue; SDL_mutexP(mutexInput); positionVue.offsetCaseX=maPosition.offsetCaseX; positionVue.offsetCaseY=maPosition.offsetCaseY; positionVue.offsetPositionX=maPosition.offsetPositionX; positionVue.offsetPositionY=maPosition.offsetPositionY; SDL_mutexV(mutexInput); cliqueX=(int)(cliqueX+positionVue.offsetPositionX)/TILE_SIZE+positionVue.offsetCaseX; cliqueY=(int)(cliqueY+positionVue.offsetPositionY)/TILE_SIZE+positionVue.offsetCaseY; if(currentObj!=NULL && currentObj->getcamp()==0) { bool rien=true; Unite *n; ObjetMap *temp; for(int i=0;i< m->getvec().size();i++) { temp=m->getvec()[i]; if(cliqueX>=((point)temp->getc1()).x && cliqueX<=(((point)temp->getc1()).x+temp->getnum()) && cliqueY>=((point)temp->getc1()).y && cliqueY<=(((point)temp->getc1()).y+temp->getnum()) ) { rien=false; SDL_mutexP(mutexObjet); if(currentObj->gettype()==PEON) { if(temp->gettype()==FORET || temp->gettype()==BLE) { n = (Unite*)currentObj; n->setCible(temp); n->setStatut(COLLECTE); } else { n = (Unite*)currentObj; n->setStatut(AFK); n->setCible(NULL); } } else if(currentObj->gettype()==LANCIER) { if((temp->gettype()==FORUM || temp->gettype()==CASERNE || temp->gettype()==PEON || temp->gettype()==LANCIER) && (temp->getcamp()==1)) { n = (Unite*)currentObj; n->setCible(temp); n->setStatut(ATTAQUE); } else { n = (Unite*)currentObj; n->setStatut(AFK); n->setCible(NULL); } } SDL_mutexV(mutexObjet); } } if(rien) { if(currentObj->gettype()==PEON || currentObj->gettype()==LANCIER) { SDL_mutexP(mutexObjet); n = (Unite*)currentObj; n->setStatut(DEPLACEMENT); n->setdesti(cliqueX, cliqueY); SDL_mutexV(mutexObjet); } } } } }