#include "floor.hpp" #include #include #include #include #include #include namespace silly::editor { void TileFloor::update(const sf::RenderWindow &window) { if (sf::Mouse::isButtonPressed(sf::Mouse::Button::Left) || sf::Mouse::isButtonPressed(sf::Mouse::Button::Right)) { sf::Vector2i mousePosition = sf::Mouse::getPosition(window); for (int x = 0; x < this->get_width(); x++) { for (int y = 0; y < this->get_height(); y++) { int rx = x * 16, ry = y * 16; if ((rx < mousePosition.x && mousePosition.x < rx + 16) && (ry < mousePosition.y && mousePosition.y < ry + 16)) { sf::Vector2i pos(x, y); if (sf::Mouse::isButtonPressed(sf::Mouse::Button::Left)) { this->place_tile(pos); } else if (sf::Mouse::isButtonPressed(sf::Mouse::Button::Right)) { this->remove_tile(pos); } } } } } } void TileFloor::render(sf::RenderWindow &window) const { std::for_each( this->tiles.begin(), this->tiles.end(), [&window](const Tile &t) { sf::RectangleShape shape({16, 16}); shape.setFillColor(sf::Color(255, 190, 190)); shape.setPosition({t.position.x * 16.0f, t.position.y * 16.0f}); window.draw(shape); }); } void TileFloor::place_tile(const sf::Vector2i &position) { if (!std::any_of( this->tiles.begin(), this->tiles.end(), [&position](const Tile &t) { return t.position == position; })) { this->tiles.push_back({position}); } } void TileFloor::remove_tile(const sf::Vector2i &position) { this->tiles.resize(std::distance( this->tiles.begin(), std::remove_if( this->tiles.begin(), this->tiles.end(), [&position](const Tile &t) { return t.position == position; }))); } const int TileFloor::get_width() const { return this->width; } const int TileFloor::get_height() const { return this->height; } }