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; } } }
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); }