Beispiel #1
0
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;
}
Beispiel #2
0
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);
                }
            }
        }
    }
}