Ejemplo n.º 1
0
void Game::tick()
{
	ballMove();

	forceRacketIntoField();

	while (true)
	{
		bool hit = false;
		Brick* pBrickRef = nullptr;

		HitRecord hr;
		HitRecord lhr;

		if (hitTopField(lhr) == true && lhr.getRollback() > hr.getRollback())
		{
			hit = true;
			hr = lhr;
		}
		if (hitRightField(lhr) == true && lhr.getRollback() > hr.getRollback())
		{
			hit = true;
			hr = lhr;
		}
		//Bottom border
		if (hitBottomField(lhr) == true && lhr.getRollback() > hr.getRollback())
		{
			setBallOwner();
			ballExit();
			hr = lhr;
			break;
		}
		if (hitLeftField(lhr) && lhr.getRollback() > hr.getRollback())
		{
			hit = true;
			hr = lhr;
		}

		hitRacket(lhr, hr, hit);

		pBrickRef = hitBrick(lhr, hr, hit);

		if (hit)
		{
			setBallPosition(hr);

			if (pBrickRef != nullptr)
			{
				pBrickRef->strength()--;
				incrementScore();

				if (pBrickRef->strength() == 0)
				{
					removeBrick(pBrickRef);
				}
			}
		}
		else
		{
			break;
		}

	}
}
Ejemplo n.º 2
0
void Game::setBallPosition(const HitRecord& hr)
{
	m_pBall->position() = hr.getNewPosition();
	Calculator::bounce(*m_pBall, hr.getNormal());
	Calculator::move(*m_pBall, hr.getRollback() + 0.1f);
}