#include "environnement.h"
#include "enum.h"
#include <cmath>


Environnement::Environnement()
{
    //setStyleSheet("background-color: green");
    setFixedSize(1300,700);
    nombrePandas = 10;
    nombreBambous = 150;
    int i;
    simulation = new QPushButton("Lancer go omg",this);
    simulation->setGeometry(0,0,150,20);
    QObject::connect(simulation,SIGNAL(clicked()),this,SLOT(deplacement()));

    for(i=0;i<nombrePandas;i++)    // PLACEMENT DES PANDAS
    {

        Panda nouveauPanda;
        nouveauPanda.setNum(i);
        pandas.push_back(nouveauPanda);
        tabPandas[i] = new QLabel(this);
        QPixmap *imagePixmapP;
        if(nouveauPanda.getSexe() == MASCULIN)
        {
        imagePixmapP = new QPixmap("male2.png");
        }
        else {imagePixmapP = new QPixmap("femelle.png");}
        tabPandas[i]->setPixmap(*imagePixmapP);
        tabPandas[i]->move(nouveauPanda.getX(),nouveauPanda.getY());

    }

    for(i=0;i<nombreBambous;i++)   // PLACEMENT DES BAMBOUS
    {
        Bambou nouveauBambou;
        nouveauBambou.setNum(i);
        bambous.push_back(nouveauBambou);
        tabBambous[i] = new QLabel(this);
        QPixmap *imagePixmapB;
        imagePixmapB = new QPixmap("bambou2.png");
        tabBambous[i]->setPixmap(*imagePixmapB);
        tabBambous[i]->move(nouveauBambou.getX(),nouveauBambou.getY());
    }
}


void Environnement::deplacement()
{

    int i;
    int j;
    int conditionFin;
    int bouffe = 0;

    for(i=0;i<nombrePandas;i++) // DEBUT FOR PANDAS
    {
     Panda tmpPand = pandas.first();
     conditionFin = 1;
     bouffe = 0;

     for(j=0;j<nombreBambous;j++)  // DEBUT FOR BAMBOUS
     {

         Bambou tmpBamb = bambous.first();
         float distance = equationDistance(tmpPand,tmpBamb);


            if((tmpPand.getVision() > distance) && conditionFin !=0) // CONDITION DE MANGAGE NOM NOM NOM NOM
            {
                tmpPand.setX(tmpBamb.getX());
                tmpPand.setY(tmpBamb.getY());
                tabBambous[tmpBamb.getNum()]->setGeometry(0,0,0,0);
                tabPandas[tmpPand.getNum()]->setGeometry(tmpBamb.getX(),tmpBamb.getY(),20,20);
                bambous.pop_front();
                conditionFin = 0;
                bouffe = 1;
            }
            if(conditionFin == 1)
            {
                bambous.pop_front();
                bambous.push_back(tmpBamb);
            }

     } // FIN FOR BAMBOUS
     if(bouffe == 1)
     {
         nombreBambous--;
     }
     else
     {
         tmpPand = changerCoordonneesY(tmpPand);
         tmpPand = changerCoordonneesX(tmpPand);
         tabPandas[tmpPand.getNum()]->setGeometry(tmpPand.getX(),tmpPand.getY(),20,20);
     }
     pandas.pop_front();
     pandas.push_back(tmpPand);
    } // FIN FOR PANDAS

/*
cout << "on fais la pause" << endl;
QTime time;
time.start();
int tempsPasse = time.elapsed();
while(tempsPasse < 5000)     // PAUSE DANS LE PROGRAMME
{tempsPasse = time.elapsed();}

*/

} // FIN FONCTION






float equationDistance(Panda a, Bambou b)
{
    float distance = sqrt(((a.getX() - b.getX())*(a.getX() - b.getX())) + ((a.getY() - b.getY())*((a.getY() - b.getY()))));
    return distance;
}

Panda changerCoordonneesX(Panda a)
{
    float tmp = a.getX();
    float tmp2 = tmp + rand()%40 - 19;
          while(tmp2>=1280 || tmp2<=0)
          {
              tmp2 = tmp;
              tmp2 = tmp + rand()%40 - 19;
          }
    a.setX(tmp2);
    return a;
}

Panda changerCoordonneesY(Panda a)
{
    float tmp = a.getY();
    float tmp2 = tmp + rand()%40 - 19;
          while(tmp2>=680 || tmp2<=0)
          {
              tmp2 = tmp;
              tmp2 = tmp + rand()%40 - 19;
          }
    a.setY(tmp2);
    return a;
}


void Environnement::setNombrePandas(int p)
{
    nombrePandas = p;
}


int Environnement::getPanda()
{
    return nombrePandas;
}

void Environnement::addPanda()
{
    Panda newPanda;
    pandas.push_back(newPanda);
}

QVector<Panda> Environnement::getPandas()
{
    return pandas;
}


