Пример #1
0
void Message::InjectView(const View &view) {
  InjectInt(view.width());
  InjectInt(view.height());
  InjectArray(view.tiles(), view.width()*view.height());
  InjectInt(view.position().x());
  InjectInt(view.position().y());
}
Пример #2
0
GameWidget::GameWidget(Scene *scene, QWidget *parent) :
    QGraphicsView(parent),
    m_scene(scene),
    m_timeLabel(this),
    m_checkpointRemainingLabel(this),
    m_paused(false),
    m_cameraScale(1.f),
    m_frameCount(0),
    m_timeBeforeStartLabel(this)
{
    if (!scene)
    {
        QMessageBox::information(nullptr, "Erreur (GameWidget)", "Aucune scène a afficher!", 0);
    }
    else if (!scene->loaded())
    {
        QMessageBox::information(nullptr, "Erreur (GameWidget)", "Le niveau n'a pas été chargé!", 0);
    }
    else
    {       
        this->setCursor(Qt::BlankCursor);

        //Placement du label du timer
        m_timeLabel.setGeometry(0,0,500,50);
        m_timeLabel.setStyleSheet("color: white;font: 24pt \"Leelawadee UI\";");

        //Placement du label du nombre de checkpoints restants
        m_checkpointRemainingLabel.setGeometry(parent->width()-250,0,250,50);
        m_checkpointRemainingLabel.setStyleSheet("color: white;font: 14pt \"Leelawadee UI\";");

        //Placement du label du affichant le temps avant le début de la partie
        m_timeBeforeStartLabel.setGeometry(350,250,100,100);
        m_timeBeforeStartLabel.setStyleSheet("font: 72pt \"Leelawadee UI\";");

        // prépare la scène pour l'affichage
        this->setScene(scene->graphicsScene());
        this->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
        this->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);

        // réglages du clavier
        grabKeyboard();
        scene->setPlayerInput(&m_playerInput);

        // démarrage du timer de rafraichissement du jeu
        startTimer(sf::seconds(1/60.f).asMilliseconds());

        //Centrage de la caméra
        View view = m_scene->calcViewPoint();
        centerOn(view.position());

        //Démarrage du timer de début de course ( 3,2,1 -> Go)
        m_preStartTimer = new PreStartTimer(this);
        m_preStartTimer->startTimer();
        connect(m_preStartTimer,SIGNAL(startGame()),this,SLOT(startGame()));

    }
}
Пример #3
0
void GameWidget::timerEvent(QTimerEvent *timerEvent)
{
    //Vérifie si la partie a déjà commencé ou non
    if(m_preStartTimer->timeRemaining())
    {
        m_timeBeforeStartLabel.setText(QString::number(m_preStartTimer->timeRemaining()));
    }
    else{
        //Vérifie si le jeu est en pause ou non
        if(!m_paused)
        {
            if (m_scene)
            {
                //Vérifie si le jeu est en pause
                if(m_scene->isFinished())
                {
                    killTimer(timerEvent->timerId());
                    emit showScore("EndGame");
                }
                //Gère les actions dans le cas où la partie est en cours
                else
                {
                    /// mise à jour de la scène
                    m_scene->update();

                     /// mise à jour de la caméra
                    View view = m_scene->calcViewPoint();
                    centerOn(view.position());
                    // "crante" l'effet de zoom, car visiblement, changer l'échelle de la vue dans qt prend du temps
                    // et ralenti considérablement le jeu lorsque cela est fait à chaque frame.
                    //float zoom = (int)(view.zoom()*200)/200.f;
                    //std::cout << view.zoom() << " --- " << zoom << " --- " << m_cameraScale << std::endl;
                    //view.setZoom(.7);
                    m_frameCount++;
                    if (m_frameCount == 3)
                        m_frameCount = 0;
                    if (m_frameCount == 0)
                    {
                        if (view.zoom() != m_cameraScale)
                        {
                            float cameraScale = 1 - (m_cameraScale - view.zoom());
                            m_cameraScale = view.zoom();
                            scale(cameraScale, cameraScale);
                        }
                    }

                    /// mise à jour du compteur (Affichage
                    m_timeLabel.setText(utils::showableTime(m_scene->time().elapsed()));

                    /// mise à jour du nombre de checkpoint restant (Affichage)
                    QString checkpointRemainingString = "Checkpoint(s) Remaining : "+QString::number(m_scene->checkpointListener()->checkpointRemaining());
                    m_checkpointRemainingLabel.setText(checkpointRemainingString);
                }
            }
        }
    }
}