You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
This repo is archived. You can view files and clone it, but cannot push or open issues/pull-requests.

64 lines
1.7 KiB
C++

#include <vector>
#include "brick_grid.hpp"
BrickGrid::BrickGrid() {}
BrickGrid::BrickGrid(sf::FloatRect borders, int numBrickColumns, int numBrickRows) :
m_border(borders),
m_numBrickColumns(numBrickColumns),
m_numBrickRows(numBrickRows),
m_numActiveBricks(numBrickColumns * numBrickRows)
{
m_bricks.resize(m_numBrickColumns * m_numBrickRows, Brick{true});
m_brickShape.setSize(getBrickSizes());
m_brickShape.setOutlineColor(sf::Color::Black);
m_brickShape.setOutlineThickness(0.5);
m_brickShape.setFillColor(color);
}
sf::FloatRect BrickGrid::getBorder() const
{
return m_border;
}
sf::Vector2i BrickGrid::getGridSizes() const
{
return {m_numBrickColumns, m_numBrickRows};
}
sf::Vector2f BrickGrid::getBrickSizes() const
{
return {m_border.width / m_numBrickColumns, m_border.height / m_numBrickRows};
}
bool BrickGrid::isBrickActive(std::pair<int, int> indexes) const
{
return m_bricks[indexes.first + indexes.second * m_numBrickColumns].isActive;
}
void BrickGrid::deactivateBrick(std::pair<int, int> indexes)
{
m_bricks[indexes.first + indexes.second * m_numBrickColumns].isActive = false;
m_numActiveBricks--;
}
int BrickGrid::getNumActiveBricks() const
{
return m_numActiveBricks;
}
void BrickGrid::draw(sf::RenderWindow& window)
{
auto [brickWidth, brickHeight] = getBrickSizes();
for (int j = 0; j < m_numBrickRows; ++j)
{
for (int i = 0; i < m_numBrickColumns; ++i)
{
if (!isBrickActive({i, j}))
continue;
m_brickShape.setPosition({m_border.left + i * brickWidth, m_border.top + j * brickHeight});
window.draw(m_brickShape);
}
}
}