summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/editor.cpp5
-rw-r--r--src/floor.cpp23
-rw-r--r--src/floor.hpp7
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;