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); } } } } }