/* ================================================================================ Game::Draw Gets called once per frame to draw the current snapshot of the game. ================================================================================ */ void Game::Draw() { // clear the screen SDL_SetRenderDrawColor(mRenderer, 0, 0, 0, 255); SDL_RenderClear(mRenderer); if (mBackground) { Render(mBackground->GetRenderable(), &mBackground->GetRect(), SDL_FLIP_NONE); } if (mForeground) { //Render(mForeground->GetRenderable(), &mForeground->GetRect(), SDL_FLIP_NONE); } if (mFlagPole) { Render(mFlagPole->GetRenderable(), &mFlagPole->GetRect(), SDL_FLIP_NONE); } // // draw the grid // if (mGrid) { int tileWidth = mGrid->TileWidth(); int tileHeight = mGrid->TileHeight(); GG::Rect tileRect(0, 0, tileWidth, tileHeight); for (int y = 0; y < mGrid->NumRows(); y++) { for (int x = 0; x < mGrid->NumCols(); x++) { const GG::Renderable* renderable = mGrid->GetTile(y, x)->GetRenderable(); if (renderable) { Render(renderable, &tileRect, SDL_FLIP_NONE); } tileRect.x += tileWidth; } tileRect.y += tileHeight; tileRect.x = 0; } } // Draw the collision rectangles if (rectVisible) { SDL_SetRenderDrawColor(mRenderer, 255, 0, 0, 255); SDL_RenderFillRect(mRenderer, &mRobot->GetBottomTileRect()); SDL_SetRenderDrawColor(mRenderer, 150, 0, 0, 255); SDL_RenderFillRect(mRenderer, &mRobot->GetTopTileRect()); SDL_SetRenderDrawColor(mRenderer, 255, 255, 0, 255); SDL_RenderFillRect(mRenderer, &mRobot->GetCollisonRect()); for (auto coinIt = mCoins.begin(); coinIt != mCoins.end(); ++coinIt) { Coin* coin = *coinIt; SDL_RenderFillRect(mRenderer, &coin->GetRect()); } for (auto crawlerIt = mCrawlers.begin(); crawlerIt != mCrawlers.end(); ++crawlerIt) { Crawler* crawler = *crawlerIt; SDL_RenderFillRect(mRenderer, &crawler->GetCollisionRect()); } for (auto meteorIt = mMeteors.begin(); meteorIt != mMeteors.end(); ++meteorIt) { Meteor* meteor = *meteorIt; SDL_RenderFillRect(mRenderer, &meteor->GetRect()); } SDL_SetRenderDrawColor(mRenderer, 0, 0, 255, 255); for (auto crawlerIt = mCrawlers.begin(); crawlerIt != mCrawlers.end(); ++crawlerIt) { Crawler* crawler = *crawlerIt; SDL_RenderFillRect(mRenderer, &crawler->GetTileRect()); } } // // draw the robot // if (mRobot) { Render(mRobot->GetRenderable(), &mRobot->GetRect(), mRobot->GetDirection()?SDL_FLIP_HORIZONTAL:SDL_FLIP_NONE); } // // draw the coins // std::list<Coin*>::iterator coinIt = mCoins.begin(); for ( ; coinIt != mCoins.end(); ++coinIt) { Coin* coin = *coinIt; Render(coin->GetRenderable(), &coin->GetRect(), SDL_FLIP_NONE); } // // draw the mushrooms // std::list<Layer*>::iterator mushIter = mMushrooms.begin(); for ( ; mushIter != mMushrooms.end(); ++mushIter) { Layer* mushroom = *mushIter; Render(mushroom->GetRenderable(), &mushroom->GetRect(), SDL_FLIP_NONE); } // // draw the crawlers // for (auto crawlerIt = mCrawlers.begin(); crawlerIt != mCrawlers.end(); ++crawlerIt) { Crawler* crawler = *crawlerIt; if (crawler->GetDirection() == 1) { Render(crawler->GetRenderable(), &crawler->GetRect(), SDL_FLIP_HORIZONTAL); } else { Render(crawler->GetRenderable(), &crawler->GetRect(), SDL_FLIP_NONE); } } // // draw the explosions // std::list<Explosion*>::iterator it = mExplosions.begin(); for ( ; it != mExplosions.end(); ++it) { Explosion* boom = *it; Render(boom->GetRenderable(), &boom->GetRect(), SDL_FLIP_NONE); } // // draw the meteors // std::list<Meteor*>::iterator metIt = mMeteors.begin(); for ( ; metIt != mMeteors.end(); ++metIt) { Meteor* meteor = *metIt; Render(meteor->GetRenderable(), &meteor->GetRect(), SDL_FLIP_NONE); } // Draw the points label if (mPointsLabel) { Render(mPointsLabel->GetRenderable(), &mPointsLabel->GetRect(), SDL_FLIP_NONE); } // Draw the lives label if (mLivesLabel) { Render(mLivesLabel->GetRenderable(), &mLivesLabel->GetRect(), SDL_FLIP_NONE); } // display everything we just drew SDL_RenderPresent(mRenderer); }