void CArena::Draw(CWindow *theWindow) { // Center the view on the player CView theOriginalView = CView(theWindow->getView()); CView theView = theOriginalView; CVector2f viewSize = theView.getSize(); CVector2f viewCenter; viewCenter.x = mPlayer->GetPosition().x; viewCenter.y = mPlayer->GetPosition().y; float minmaxPixel = (mArenaSize / 2.0f) + 150.0f; float rightmostPixel = viewCenter.x + (viewSize.x / 2.0f); float leftmostPixel = viewCenter.x - (viewSize.x / 2.0f); if (rightmostPixel > minmaxPixel) { float offset = rightmostPixel - minmaxPixel; viewCenter.x -= offset; } if (leftmostPixel < -minmaxPixel) { float offset = -minmaxPixel - leftmostPixel; viewCenter.x += offset; } float topmostPixel = viewCenter.y - (viewSize.y / 2.0f); float bottommostPixel = viewCenter.y + (viewSize.y / 2.0f); if (bottommostPixel > minmaxPixel) { float offset = bottommostPixel - minmaxPixel; viewCenter.y -= offset; } if (topmostPixel < -minmaxPixel) { float offset = -minmaxPixel - topmostPixel; viewCenter.y += offset; } theView.setCenter(viewCenter); theWindow->setView(theView); // Draw static objects for (CGameObject *theObject : mStaticObjects) { theObject->Draw(theWindow); } // Draw floor pattern int interval = 50; for (int xy = interval - 500; xy < 500; xy += interval) { CLine theHorizontalLine = CLine(CVector2f(-500, xy), CVector2f(500, xy)); CLine theVerticalLine = CLine(CVector2f(xy, -500), CVector2f(xy, 500)); theWindow->DrawLine(theHorizontalLine, CColour::Black); theWindow->DrawLine(theVerticalLine, CColour::Black); } // Draw dynamic objects for (CGameObject *theObject : mObjects) { theObject->Draw(theWindow); } theWindow->setView(theOriginalView); }