diff --git a/src/Map.cpp b/src/Map.cpp index 86328b9..fd8db91 100644 --- a/src/Map.cpp +++ b/src/Map.cpp @@ -240,30 +240,29 @@ void Map::shiftDown(Point& point, int tileSize) point.y_ = (point.y_ / tileSize + 1) * tileSize; } +void Map::drawBackgroundTile(const Screen& screen, TilePosition position) +{ + const auto& tile{getTileUsingPosition(position)}; + if (tile->isPartOfBackground()) + { + tile->draw(screen); + changedTiles_[position.x_][position.y_] = false; + } + else + { + plainTile_->setLocation(tilePositionToScreenPoint(position)); + plainTile_->draw(screen); + } +} void Map::drawBackground(const Screen& screen) { for (std::size_t x = 0; x < mapDimension_; ++x) for (std::size_t y = 0; y < mapDimension_; ++y) - { - if (!changedTiles_[x][y]) - continue; - - const auto& tile{getTileUsingPosition({x, y})}; - if (tile->isPartOfBackground()) - { - tile->draw(screen); - changedTiles_[x][y] = false; - } - - else - { - plainTile_->setLocation(tilePositionToScreenPoint({x, y})); - plainTile_->draw(screen); - } - } + if (changedTiles_[x][y]) + drawBackgroundTile(screen, {x, y}); } -void Map::drawTile(const Screen& screen, TilePosition position) +void Map::drawForegroundTile(const Screen& screen, TilePosition position) { const auto& tile{getTileUsingPosition(position)}; if (!tile->isPartOfBackground()) @@ -277,7 +276,7 @@ void Map::drawForeground(const Screen& screen) for (std::size_t x = 0; x < mapDimension_; ++x) for (std::size_t y = 0; y < mapDimension_; ++y) if (changedTiles_[x][y]) - drawTile(screen, {x, y}); + drawForegroundTile(screen, {x, y}); } bool Map::isBaseDestroyed() const { return baseDestroyed_; } diff --git a/src/Map.h b/src/Map.h index 587269c..9bc7dfc 100644 --- a/src/Map.h +++ b/src/Map.h @@ -64,7 +64,8 @@ class Map bool isValidSign(char sign) const; - void drawTile(const Screen& screen, TilePosition position); + void drawBackgroundTile(const Screen& screen, TilePosition position); + void drawForegroundTile(const Screen& screen, TilePosition position); std::vector>> board_{};