//Método principal para atualização do game em tempo real void Game::gameUpdate(){ //Limite de Frame Rate gameWindow.setFramerateLimit(60); //Checa se algum dos players completou as 3 voltas isRaceOver(); //Verifica se a tecla ESC é pressionada, abrindo o menuPause renderPause(); if (sf::Keyboard::isKeyPressed(sf::Keyboard::Escape)) menuPause.abrirMenu(); //Toca a música que será reproduzida durante a corrida raceBGM.playMusic(); raceBGM.setVolume(100); //Ativa os métodos de entrada de keyboard para os controles de ambos os players player[0].ativarMovimentos(0); player[1].ativarMovimentos(1); //Checa todas as colisões possíveis dentro da partida para cada Player checkCollision(0); checkCollision(1); //Checa se os players estão no sentido correto da pista (caso eles percorram ao contrário), seus //carros explodirão player[0].checarSentido(); player[1].checarSentido(); //Checa durante a partida quando a linha de chegada é ultrapassada checkLap(); //Centralizando cada câmera em seu respectivo player player[0].centralizarCamera(); player[1].centralizarCamera(); //Renderizações na tela do Player1 gameWindow.setView(player[0].getCamera()); renderMap(); gameWindow.draw(player[0].getSprite()); gameWindow.draw(player[1].getSprite()); renderProjeteis(); renderGUI(0); //Renderizações na tela do Player 2 gameWindow.setView(player[1].getCamera()); renderMap(); gameWindow.draw(player[1].getSprite()); gameWindow.draw(player[0].getSprite()); renderProjeteis(); renderGUI(1); gameWindow.display(); gameWindow.clear(); }
void Game::runGame(){ this->fadeScreen = new FadeScreen(); this->currentState = this->statesMap.at(GStates::SPLASH); this->currentState->load(); // Get the first game time. Timer timer{}; double totalGameTime = 0.0; const double deltaTime = 1.0 / 60.0; double accumulatedTime = 0.0; // This is the main game loop. while(this->isRunning){ const double frameTime = timer.GetFrameTime(); accumulatedTime += frameTime; // Update. while(accumulatedTime >= deltaTime){ this->inputHandler->handleInput(); // Check for an exit signal from input. if(this->inputHandler->isQuitFlag() == true){ stop(); return; } std::array<bool, GameKeys::MAX> keyStates = Game::instance().getInput(); if(keyStates[GameKeys::ESCAPE] && isPauseable()){ this->currentSelection = PSelection::RESUME; this->isPaused = true; } if(!this->isPaused){ this->currentState->update(deltaTime); } else if(!this->isCutscene){ this->passedTime += deltaTime; updatePause(); } else{ this->passedTime += deltaTime; updateDialog(); } this->fadeScreen->update(deltaTime); accumulatedTime -= deltaTime; totalGameTime += deltaTime; } // Render. window->clear(); this->currentState->render(); if(this->isPaused){ renderPause(); } else if(this->isCutscene){ if(currentLine < numLines) renderDialog(); else{ currentLine = 0; isCutscene = false; } } this->fadeScreen->render(); window->render(); timer.Reset(); } }