summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/tileset.cpp28
-rw-r--r--src/tileset.hpp30
2 files changed, 58 insertions, 0 deletions
diff --git a/src/tileset.cpp b/src/tileset.cpp
new file mode 100644
index 0000000..8651a8f
--- /dev/null
+++ b/src/tileset.cpp
@@ -0,0 +1,28 @@
+#include "tileset.hpp"
+
+namespace silly::editor {
+ void Tileset::add_tile(const std::string &path, TilesetTileType type) {
+ TilesetTile tile;
+ tile.type = type;
+ tile.id = this->tiles.size();
+
+ if (!tile.texture.loadFromFile(path)) {
+ // TODO: add logging here
+ return;
+ }
+
+ this->tiles.push_back(tile);
+ }
+
+ void Tileset::remove_tile(const TilesetTile &tile) {
+ this->tiles.resize(std::distance(
+ this->tiles.begin(),
+ std::remove_if(
+ this->tiles.begin(), this->tiles.end(),
+ [&tile](const TilesetTile &t) { return t.id == tile.id; })));
+ }
+
+ const std::vector<TilesetTile> &Tileset::get_tiles() const {
+ return this->tiles;
+ }
+} \ No newline at end of file
diff --git a/src/tileset.hpp b/src/tileset.hpp
new file mode 100644
index 0000000..2b65356
--- /dev/null
+++ b/src/tileset.hpp
@@ -0,0 +1,30 @@
+#pragma once
+
+#include <SFML/Graphics/Texture.hpp>
+#include <string>
+#include <vector>
+
+#define TILE_WIDTH 16
+#define TILE_HEIGHT 16
+
+namespace silly::editor {
+ enum TilesetTileType { TILE_FLOOR = 0, TILE_WALL };
+ struct TilesetTile {
+ int id;
+ sf::Texture texture;
+ TilesetTileType type;
+ };
+
+ class Tileset {
+ public:
+ Tileset() = default;
+ ~Tileset() = default;
+
+ void add_tile(const std::string &path, TilesetTileType type);
+ void remove_tile(const TilesetTile &tile);
+ const std::vector<TilesetTile> &get_tiles() const;
+
+ private:
+ std::vector<TilesetTile> tiles;
+ };
+} \ No newline at end of file