void CPowerupManager::handleWalls( CPlayer& player, std::set<CPlayer*>& crashedPlayers ) { CCoordinates playersPreviousCoordinates = player.GetPreviousPosition( ); CCoordinates playersCoordinates = player.GetPosition(); for( auto powerup : powerups ) { CCoordinates realCoordinates( playersCoordinates.y * 10 + 5, playersCoordinates.x * 10 + 5 ), realPreviousCoordinates( playersPreviousCoordinates.y * 10 + 5, playersPreviousCoordinates.x * 10 + 5 ); if( powerup.second != WALL ) { continue; } CCoordinates firstPoint( powerup.first.y * 10, powerup.first.x * 10 ), secondPoint( (powerup.first.y + 1) * 10, powerup.first.x * 10 ), thirdPoint( (powerup.first.y + 1) * 10, (powerup.first.x + 1) * 10 ), fourthPoint( powerup.first.y * 10, (powerup.first.x + 1) * 10 ); if( isIntersects( realPreviousCoordinates, realCoordinates, firstPoint, secondPoint ) || isIntersects( realPreviousCoordinates, realCoordinates, secondPoint, thirdPoint ) || isIntersects( realPreviousCoordinates, realCoordinates, thirdPoint, fourthPoint ) || isIntersects( realPreviousCoordinates, realCoordinates, fourthPoint, firstPoint ) ) { powerups.erase( powerup.first ); crashedPlayers.insert( &player ); return; } } }
bool Game::playerOutOfTrack( size_t num ) { Coordinates playersPreviousCoordinates = players[num].getPreviousPosition(); Coordinates playersCoordinates = players[num].getPosition(); int minX = std::min( playersPreviousCoordinates.x, playersCoordinates.x ), maxX = std::max( playersPreviousCoordinates.x, playersCoordinates.x ), minY = std::min( playersPreviousCoordinates.y, playersCoordinates.y ), maxY = std::max( playersPreviousCoordinates.y, playersCoordinates.y ); Coordinates realCoordinates( playersCoordinates.x * 10 + 5, playersCoordinates.y * 10 + 5 ), realPreviousCoordinates( playersPreviousCoordinates.x * 10 + 5, playersPreviousCoordinates.y * 10 + 5 ); for( int i = minX; i <= maxX; ++i ) { for( int j = minY; j <= maxY; ++j ) { if( map.isEmpty( i, j ) ) { continue; } Coordinates firstPoint( i * 10, j * 10 ), secondPoint( ( i + 1 ) * 10, j * 10 ), thirdPoint( ( i + 1 ) * 10, ( j + 1 ) * 10 ), fourthPoint( i * 10, ( j + 1 ) * 10 ); if( isIntersects( realPreviousCoordinates, realCoordinates, firstPoint, secondPoint ) || isIntersects( realPreviousCoordinates, realCoordinates, secondPoint, thirdPoint ) || isIntersects( realPreviousCoordinates, realCoordinates, thirdPoint, fourthPoint ) || isIntersects( realPreviousCoordinates, realCoordinates, fourthPoint, firstPoint ) ) { return true; } } } return false; }