Exemplo n.º 1
0
void CollisionManager::collision(std::vector<Ball*>& balls, Cursor& cursor)
{
	for (int i = 0; i < balls.size(); i++)
	{
		if (balls[i] != 0)
		{
			if(cursor.getSprite().getGlobalBounds().intersects(balls[i]->getSprite().getGlobalBounds()))
			{
				// Reverse all directions
				balls[i]->setDirX(-1);
				balls[i]->setDirY(-1);

				while(cursor.getSprite().getGlobalBounds().intersects(balls[i]->getSprite().getGlobalBounds()))
				{
					// back into the past
					balls[i]->moveB();
				}

				// No more collision here
				// Back to the present
				balls[i]->setDirX(-1);
				balls[i]->setDirY(-1);

				// Collision place detection
				if(balls[i]->getPosY() + balls[i]->getHeight() <= cursor.getPosY())
				{
					// Up
					balls[i]->setDirY(-1);
					balls[i]->moveB();
				}
				else if(balls[i]->getPosY() >= cursor.getPosY() + cursor.getWidth() - 5)
				{
					// Down
					balls[i]->setDirY(-1);
					balls[i]->moveB();
				}
				else if(balls[i]->getPosX() <= cursor.getPosX())
				{
					// Left
					balls[i]->setDirX(-1);
					balls[i]->moveB();
				}
				else if(balls[i]->getPosX() >= cursor.getPosX() + cursor.getWidth())
				{
					// Right
					balls[i]->setDirX(-1);
					balls[i]->moveB();
				}
			}
		}
	}
}