/*
 * Menu.cpp
 *
 *  Created on: 29 janv. 2017
 *      Author: sylvain
 */


#include "Menu.h"

Menu::Menu(QWidget *parent, Qt::WindowFlags f ) :
    QMainWindow( parent, f ){

    gameInitiated = false;
    qApp->installEventFilter( this );
    // qApp->timerEvent(this);

    QVBoxLayout *layout = new QVBoxLayout;

    layout->addWidget(controller.gameView.getView());
    layout->addWidget(controller.statView.getWidget());  

    //Ajout boutons tactiles
    dPadL = new QPushButton("", &widgetMain);
    dPadL->setIcon(QIcon(":/media/buttons/DpadL.png"));
    dPadL->resize(50,50);
    dPadL->setIconSize(QSize(50,50));
    dPadL->move(20,350);
    dPadL->setFlat(true);

    dPadR = new QPushButton("", &widgetMain);
    dPadR->setIcon(QIcon(":/media/buttons/DpadR.png"));
    dPadR->resize(50,50);
    dPadR->move(100,350);
    dPadR->setIconSize(QSize(50,50));
    dPadR->setFlat(true);

    dPadU = new QPushButton("", &widgetMain);
    dPadU->setIcon(QIcon(":/media/buttons/DpadU.png"));
    dPadU->resize(50,50);
    dPadU->move(60,310);
    dPadU->setIconSize(QSize(50,50));
    dPadU->setFlat(true);

    dPadD = new QPushButton("", &widgetMain);
    dPadD->setIcon(QIcon(":/media/buttons/DpadD.png"));
    dPadD->resize(50,50);
    dPadD->move(60,390);
    dPadD->setIconSize(QSize(50,50));
    dPadD->setFlat(true);

    aButton = new QPushButton("", &widgetMain);
    aButton->setIcon(QIcon(":/media/buttons/AButton.png"));
    aButton->resize(50,50);
    aButton->move(700,350);
    aButton->setIconSize(QSize(50,50));
    aButton->setFlat(true);

    bButton = new QPushButton("", &widgetMain);
    bButton->setIcon(QIcon(":/media/buttons/BButton.png"));
    bButton->resize(50,50);
    bButton->move(750,390);
    bButton->setIconSize(QSize(50,50));
    bButton->setFlat(true);

    connect(dPadL ,SIGNAL(pressed()), &controller, SLOT(goLeft()));
    connect(dPadL ,SIGNAL(released()), &controller, SLOT(stopLeft()));
    connect(dPadU ,SIGNAL(pressed()), &controller, SLOT(goUp()));
    connect(dPadU ,SIGNAL(released()), &controller, SLOT(stopUp()));
    connect(dPadD ,SIGNAL(pressed()), &controller, SLOT(goDown()));
    connect(dPadD ,SIGNAL(released()), &controller, SLOT(stopDown()));
    connect(dPadR ,SIGNAL(pressed()), &controller, SLOT(goRight()));
    connect(dPadR ,SIGNAL(released()), &controller, SLOT(stopRight()));
    connect(aButton ,SIGNAL(pressed()), &controller, SLOT(goAttackA()));
    connect(aButton ,SIGNAL(released()), &controller, SLOT(stopAttackA()));
    connect(bButton ,SIGNAL(pressed()), &controller, SLOT(goAttackB()));
    connect(bButton ,SIGNAL(released()), &controller, SLOT(stopAttackB()));

    widgetMain.setLayout(layout);
    startTimer(10);

    }

Menu::~Menu() {
	// TODO Auto-generated destructor stub
}

void Menu::show(void){
	widgetMain.show();
    //les Boutons n'ayant pas été ajoutés au layout, on les fait remonter au top de l'UI.
    dPadL->raise();
    dPadR->raise();
    dPadU->raise();
    dPadD->raise();
    aButton->raise();
    bButton->raise();
}
bool Menu::eventFilter(QObject *obj, QEvent *event)
{
    QKeyEvent *KeyEvent = (QKeyEvent*)event;

    switch( event->type() ){
        case QEvent::MouseButtonPress:
            //qDebug() << "Mouse Button Clicked";
            if(!gameInitiated){
                controller.gameView.initMap();
                gameInitiated=true;
            }
        break;

        case QEvent::KeyPress:
            //qDebug() << "Key pressed";

            if (!KeyEvent->isAutoRepeat())
                switch(KeyEvent->key())
                   {
                    case Qt::Key_Left:
                      controller.goLeft();
                      break;
                    case Qt::Key_Right:
                      controller.goRight();
                      break;
                    case Qt::Key_Up:
                      controller.goUp();
                      break;
                    case Qt::Key_Down:
                      controller.goDown();
                      break;
                    default:
                      break;
                   }
            return true;
        break;

        case QEvent::KeyRelease:
            if (!KeyEvent->isAutoRepeat())
                switch(KeyEvent->key())
                   {
                    case Qt::Key_Left:
                        controller.stopLeft();
                        break;
                    case Qt::Key_Right:
                        controller.stopRight();
                        break;
                    case Qt::Key_Up:
                        controller.stopUp();
                        break;
                    case Qt::Key_Down:
                        controller.stopDown();
                        break;
                     default:
                        break;
                   }
            return true;
        break;
        }
    // pass the event on to the parent class if we don't need to filter it
    return QMainWindow::eventFilter(obj, event);
}

void Menu::timerEvent(QTimerEvent *event) {
    //qDebug() << "Timer Event !"<<event->timerId();
    if(gameInitiated){
        controller.gameLoop();

    }
}

