diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/editor.cpp | 5 | ||||
| -rw-r--r-- | src/floor.cpp | 23 | ||||
| -rw-r--r-- | src/floor.hpp | 7 |
3 files changed, 23 insertions, 12 deletions
diff --git a/src/editor.cpp b/src/editor.cpp index 4b8396d..198620c 100644 --- a/src/editor.cpp +++ b/src/editor.cpp @@ -26,8 +26,9 @@ namespace silly::editor { (ry < mousePosition.y && mousePosition.y < ry + 16)) { sf::Vector2i pos(x, y); - if (sf::Mouse::isButtonPressed(sf::Mouse::Button::Left)) { - this->floor.place_tile(pos); + if (sf::Mouse::isButtonPressed(sf::Mouse::Button::Left) && + this->selectedTile.has_value()) { + this->floor.place_tile(this->selectedTile.value(), pos); } else if (sf::Mouse::isButtonPressed(sf::Mouse::Button::Right)) { this->floor.remove_tile(pos); } diff --git a/src/floor.cpp b/src/floor.cpp index 9f94ad3..4365c73 100644 --- a/src/floor.cpp +++ b/src/floor.cpp @@ -2,26 +2,31 @@ #include <SFML/Graphics/RectangleShape.hpp> #include <SFML/Graphics/RenderWindow.hpp> +#include <SFML/Graphics/Sprite.hpp> #include <SFML/System/Vector2.hpp> #include <algorithm> #include <iterator> +#include "tileset.hpp" + namespace silly::editor { 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); - }); + std::for_each(this->tiles.begin(), this->tiles.end(), + [&window](const Tile &t) { + sf::Sprite s(t.tile->texture); + s.setPosition({t.position.x * (float)TILE_WIDTH, + t.position.y * (float)TILE_HEIGHT}); + + window.draw(s); + }); } - void TileFloor::place_tile(const sf::Vector2i &position) { + void TileFloor::place_tile(std::shared_ptr<TilesetTile> &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}); + this->tiles.push_back({position, tile}); } } void TileFloor::remove_tile(const sf::Vector2i &position) { diff --git a/src/floor.hpp b/src/floor.hpp index e0bdcc4..a04fc4b 100644 --- a/src/floor.hpp +++ b/src/floor.hpp @@ -2,11 +2,15 @@ #include <SFML/Graphics/RenderWindow.hpp> #include <SFML/System/Vector2.hpp> +#include <memory> #include <vector> +#include "tileset.hpp" + namespace silly::editor { struct Tile { sf::Vector2i position; + std::shared_ptr<TilesetTile> tile; }; class TileFloor { @@ -15,7 +19,8 @@ namespace silly::editor { ~TileFloor() = default; void render(sf::RenderWindow &window) const; - void place_tile(const sf::Vector2i &position); + void place_tile(std::shared_ptr<TilesetTile> &tile, + const sf::Vector2i &position); void remove_tile(const sf::Vector2i &position); const int get_width() const; |
