bool Car::checkTrackCollision(std::list<TrackTile*> allTracks) { bool collided = false; int i = 0; std::list<TrackTile*>::const_iterator iterator; for (iterator = allTracks.begin(); iterator != allTracks.end(); ++iterator) { if ((*iterator)->getY() == (this->yPosition - yPosition)) { //cout << "Tile " << (*iterator)->getLeft() << " " << (*iterator)->getRight() << " " << (*iterator)->getBottom() << " " << (*iterator)->getFront() << "\n"; //cout << "Car " << getLeft() << " " << getRight() << " " << getBottom() << " " << getFront() << "\n"; if(getLeft() < (*iterator)->getRight()) { //cout << "1\n"; if(getRight() > (*iterator)->getLeft()) { //cout << "2\n"; if(getFront() > (*iterator)->getBottom()) { //cout << "3\n"; if(getBottom() < (*iterator)->getFront()) { collided = true; lastTile = currentTile; currentTile = i; checkLap(*iterator, allTracks.size()); //cout << "Atual " << currentTile << "\n"; } } } } } i++; } return collided; }
//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(); }