#include "GameView.h"

GameView::GameView()
{
    gameStarted = false;
    mapInitialized = false;

    background = QImage(":/media/zeldaMenu.jpg");
    bgItem = new QGraphicsPixmapItem(QPixmap::fromImage(background));

    gameView = new QGraphicsView(&gameScene);
    int id = QFontDatabase::addApplicationFont(":/media/ZeldaDXTTBRK.ttf");
    QString family = QFontDatabase::applicationFontFamilies(id).at(0);
    retroFont = QFont(family, 36);

    //image du début
    QGraphicsTextItem* baseText  = new QGraphicsTextItem("Touch  to  start");
    baseText->setDefaultTextColor(Qt::yellow);

    baseText->setFont(retroFont);
    baseText->setPos(150,700);

    gameScene.addItem(bgItem);
    gameScene.addItem(baseText);
}
GameView::~GameView() {
    // TODO Auto-generated destructor stub
}
QGraphicsView *GameView::getView(void){
    gameView->setScene(&gameScene);
    gameView->setFixedSize(800,420);
    QRect rcontent = gameView->contentsRect();
    gameView->setSceneRect(0, 0, rcontent.width(), rcontent.height());
    return gameView;
}

QGraphicsScene *GameView::getScene(void){
    return &gameScene;
}

void GameView::initMap(void){

    if (!mapInitialized)
    {
        background = QImage (":/media/BattleBase.png");
        bgItem = new QGraphicsPixmapItem(QPixmap::fromImage(background));

        gameScene.clear();
        gameScene.addItem(bgItem);
        mapInitialized = true;

        gameScene.update();
        gameView->show();
    }
}

void GameView::updateMap(Link *l, QList<Monster*> *monsters){
   //display link and monsters on gameScene

    if (!gameStarted){

        linkSprite = new QGraphicsPixmapItem(l->linkImage);
        linkSprite->setPos(l->getXPos(),l->getYPos());

        gameStarted = true;

        gameScene.addItem(linkSprite);
        gameScene.update();

    }

    if(gameStarted){

        //Mise à jour des positions des monstres
        int count = monsters->count();

        Monster* m;
        for(int i=0;i<count;i++)
        {
            m = monsters->at(i);
            m->updateMonster();

            if (!gameScene.items().contains(m->monsterView))
                gameScene.addItem(m->monsterView);

            if(m->getLife() == 0)
            {
                //nettoyage
                gameScene.removeItem(m->monsterView);
                monsters->removeAt(i);
            }
        }

        l->updateLink();
        linkSprite->setPixmap(l->linkImage);
        linkSprite->setPos(l->getXPos(),l->getYPos());

        gameScene.update();
       }

    mapInitialized = true;
    gameScene.update();
    gameView->show();


}
